diff options
author | VinÃcius Zavam <egypcio@FreeBSD.org> | 2019-01-20 12:54:30 +0000 |
---|---|---|
committer | VinÃcius Zavam <egypcio@FreeBSD.org> | 2019-01-20 12:54:30 +0000 |
commit | f20baa6ebd75e5a55ec1d3755ef4c61b83fd5924 (patch) | |
tree | cf48db9b35cfc5a7de462164883277362c465afe /benchmarks/py-locust/files/extra-EXAMPLES-events.py | |
parent | Update files/patch-spe-config (and with that our local adjustments to (diff) |
[NEW] benchmarks/py-locust: Python utility for doing distributed load tests
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
Diffstat (limited to 'benchmarks/py-locust/files/extra-EXAMPLES-events.py')
-rw-r--r-- | benchmarks/py-locust/files/extra-EXAMPLES-events.py | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/benchmarks/py-locust/files/extra-EXAMPLES-events.py b/benchmarks/py-locust/files/extra-EXAMPLES-events.py new file mode 100644 index 000000000000..7b1de7fafee2 --- /dev/null +++ b/benchmarks/py-locust/files/extra-EXAMPLES-events.py @@ -0,0 +1,69 @@ +# -*- 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"] |