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!