Example code
A fundamental feature of Locust is that you describe all your test in Python code. No need for clunky UIs or bloated XML, just plain code.
I'm impressed not more people talk about locust (http://locust.io/). The thing is awesome :) Shoutout too the guys from ESN :)
Armin Ronacher @mitsuhiko Author of Flask, Jinja2 & more
it’s become a mandatory part of the development of any large scale HTTP service built at DICE at this point.
Joakim Bodin @jbripley Lead Software Engineer at EA/DICE
locust.io is pretty fantastic, wish it had a bit more in the way of docs for non-HTTP stuff though
Alex Gaynor @alex_gaynor Django & PyPy core developer
from locust import HttpLocust, TaskSet, task, between class WebsiteTasks(TaskSet): def on_start(self): self.client.post("/login", { "username": "test_user", "password": "" }) @task def index(self): self.client.get("/") @task def about(self): self.client.get("/about/") class WebsiteUser(HttpLocust): task_set = WebsiteTasks wait_time = between(5, 15)
# This locust test script example will simulate a user # browsing the Locust documentation on http://docs.locust.io import random from locust import HttpLocust, TaskSet, task, between from pyquery import PyQuery class BrowseDocumentation(TaskSet): def on_start(self): # assume all users arrive at the index page self.index_page() self.urls_on_current_page = self.toc_urls @task(10) def index_page(self): r = self.client.get("/") pq = PyQuery(r.content) link_elements = pq(".toctree-wrapper a.internal") self.toc_urls = [ l.attrib["href"] for l in link_elements ] @task(50) def load_page(self, url=None): url = random.choice(self.toc_urls) r = self.client.get(url) pq = PyQuery(r.content) link_elements = pq("a.internal") self.urls_on_current_page = [ l.attrib["href"] for l in link_elements ] @task(30) def load_sub_page(self): url = random.choice(self.urls_on_current_page) r = self.client.get(url) class AwesomeUser(HttpLocust): task_set = BrowseDocumentation host = "http://docs.locust.io/en/latest/" # we assume someone who is browsing the Locust docs, # generally has a quite long waiting time (between # 20 and 600 seconds), since there's a bunch of text # on each page wait_time = between(20, 60)
# An example on how to nest tasksets from locust import HttpLocust, TaskSet, task, between class ForumPage(TaskSet): # wait_time can be overridden for individual TaskSets wait_time = between(10, 300) class AboutPage(TaskSet): pass class WebsiteTasks(TaskSet): # We specify sub TaskSets using the tasks dict tasks = { ForumPage: 20, AboutPage: 10, } # We can use the @task decorator as well as the # tasks dict in the same TaskSet @task(10) def index(self): pass class WebsiteUser(HttpLocust): task_set = WebsiteTasks wait_time = between(5, 15)
A fundamental feature of Locust is that you describe all your test in Python code. No need for clunky UIs or bloated XML, just plain code.
The easiest way to install Locust is from PyPI, using pip:
> pip install locustioRead more detailed installations instructions in the documentation.
Get the source code at Github.