Example tests and snippets

XML-RPC Load Testing

By default, LoadForge tests plain HTTP/HTTPS sites. However, as you can use python for test definitions, it is easy to expand beyond that.

The below example allows you to load test an XML-RPC server. It calls the get_time() function and get_random_number() function - you will of course replace these with your own requirements.

Code example

import time
from xmlrpc.client import ServerProxy, Fault


from locust import User, task


class XmlRpcClient(ServerProxy):
    """
    XmlRpcClient is a wrapper around the standard library's ServerProxy.
    It proxies any function calls and fires the *request* event when they finish,
    so that the calls get recorded.
    """


    def __init__(self, host, request_event):
        super().__init__(host)
        self._request_event = request_event


    def __getattr__(self, name):
        func = ServerProxy.__getattr__(self, name)


        def wrapper(*args, **kwargs):
            start_time = time.perf_counter()
            request_meta = {
                "request_type": "xmlrpc",
                "name": name,
                "response_length": 0,
                "response": None,
                "context": {},  # see HttpUser if you actually want to implement contexts
                "exception": None,
            }
            try:
                request_meta["response"] = func(*args, **kwargs)
            except Fault as e:
                request_meta["exception"] = e
            request_meta["response_time"] = (time.perf_counter() - start_time) * 1000
            self._request_event.fire(**request_meta)  # This is what makes the request actually get logged
            return request_meta["response"]


        return wrapper




class XmlRpcUser(User):
    abstract = True  # dont instantiate this as an actual user


    def __init__(self, environment):
        super().__init__(environment)
        self.client = XmlRpcClient(self.host, request_event=environment.events.request)




# The real user class that will be instantiated
# This is the only thing that is actually specific to the service that we are testing.
class MyUser(XmlRpcUser):
    @task
    def get_time(self):
        self.client.get_time()


    @task
    def get_random_number(self):
        self.client.get_random_number(0, 100)

Locust Test Example

LoadForge is powered by locust, meaning open source locust users can copy this script as well. If you are a locust user, consider importing your script to LoadForge to supercharge your testing!

Previous
API examples (GraphQL)