An open-source load testing tool that lets you write scalable performance tests in plain Python.
Locust is an open-source load testing tool that allows developers to write performance tests in plain Python code. It simulates user behavior to test the scalability and responsiveness of web services, APIs, and other systems under high concurrency. Unlike GUI-based tools, it provides a code-first approach that integrates with standard development workflows.
Developers, QA engineers, and DevOps professionals who need to perform scalable load and performance testing on web applications, APIs, or custom protocols. It's ideal for teams that prefer scripting tests in Python over using proprietary tools.
Locust stands out by offering a developer-friendly, Python-based testing environment that avoids the limitations of domain-specific languages or graphical interfaces. Its distributed architecture and real-time web UI enable testing at scale while maintaining flexibility through a pluggable, hackable design.
Write scalable load tests in plain Python 🚗💨
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Tests are written in regular Python code, allowing use of loops, conditionals, and standard libraries without callbacks or XML, as shown in the example code snippet for defining user behavior.
Uses event-based gevent to handle hundreds of thousands of concurrent users and supports running tests over multiple machines, enabling testing of highly concurrent systems as highlighted in the README.
Includes an interactive web interface for live monitoring and dynamic load adjustment during tests, with screenshots in the README showing real-time charts and statistics.
Can test any system by writing custom clients or using community extensions, making it adaptable beyond HTTP, though this requires additional effort as noted in the documentation links.
The codebase is intentionally small and hackable, meaning users must write custom code for advanced reporting, load shapes, or protocol support, increasing setup complexity compared to more comprehensive tools.
Requires Python knowledge and environment setup, which can be a hurdle for teams unfamiliar with Python or in polyglot ecosystems, limiting accessibility for non-developers.
Testing non-HTTP protocols necessitates writing custom clients from scratch, which is time-consuming and error-prone compared to tools with native protocol support out of the box.