mirror of
https://git.freebsd.org/ports.git
synced 2025-04-29 01:56:37 -04:00
Locust is an easy-to-use, distributed, user load testing tool. It is intended for load-testing web sites (or other systems) and figuring out how many concurrent users a system can handle. The behavior of each locust (or test user if you will) is defined by you and the swarming process is monitored from a web UI in real-time. This will help you battle test and identify bottlenecks in your code before letting real users in. WWW: https://locust.io/ Approved by: araujo (mentor), rene (mentor) Sponsored by: cleverbridge AG Differential Revision: https://reviews.freebsd.org/D18895
69 lines
2.1 KiB
Python
69 lines
2.1 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
"""
|
|
This is an example of a locustfile that uses Locust's built in event hooks to
|
|
track the sum of the content-length header in all successful HTTP responses
|
|
"""
|
|
|
|
from locust import HttpLocust, TaskSet, events, task, web
|
|
|
|
|
|
class MyTaskSet(TaskSet):
|
|
@task(2)
|
|
def index(l):
|
|
l.client.get("/")
|
|
|
|
@task(1)
|
|
def stats(l):
|
|
l.client.get("/stats/requests")
|
|
|
|
class WebsiteUser(HttpLocust):
|
|
host = "http://127.0.0.1:8089"
|
|
min_wait = 2000
|
|
max_wait = 5000
|
|
task_set = MyTaskSet
|
|
|
|
|
|
"""
|
|
We need somewhere to store the stats.
|
|
|
|
On the master node stats will contain the aggregated sum of all content-lengths,
|
|
while on the slave nodes this will be the sum of the content-lengths since the
|
|
last stats report was sent to the master
|
|
"""
|
|
stats = {"content-length":0}
|
|
|
|
def on_request_success(request_type, name, response_time, response_length):
|
|
"""
|
|
Event handler that get triggered on every successful request
|
|
"""
|
|
stats["content-length"] += response_length
|
|
|
|
def on_report_to_master(client_id, data):
|
|
"""
|
|
This event is triggered on the slave instances every time a stats report is
|
|
to be sent to the locust master. It will allow us to add our extra content-length
|
|
data to the dict that is being sent, and then we clear the local stats in the slave.
|
|
"""
|
|
data["content-length"] = stats["content-length"]
|
|
stats["content-length"] = 0
|
|
|
|
def on_slave_report(client_id, data):
|
|
"""
|
|
This event is triggered on the master instance when a new stats report arrives
|
|
from a slave. Here we just add the content-length to the master's aggregated
|
|
stats dict.
|
|
"""
|
|
stats["content-length"] += data["content-length"]
|
|
|
|
# Hook up the event listeners
|
|
events.request_success += on_request_success
|
|
events.report_to_master += on_report_to_master
|
|
events.slave_report += on_slave_report
|
|
|
|
@web.app.route("/content-length")
|
|
def total_content_length():
|
|
"""
|
|
Add a route to the Locust web app, where we can see the total content-length
|
|
"""
|
|
return "Total content-length recieved: %i" % stats["content-length"]
|