Locust 是一个用于 HTTP 和其他协议的开源性能/负载测试工具。其开发人员友好的方法允许您使用常规 Python 代码定义测试。
Locust 测试可以从命令行或使用其基于 Web 的 UI 运行。吞吐量、响应时间和错误可以实时查看和/或导出以供以后分析。
您可以将常规 Python 库导入到您的测试中,并且借助 Locust 的可插拔架构,它可以无限扩展。与使用大多数其他工具不同,您的测试设计永远不会受到 GUI 或特定领域语言的限制。
要立即开始,请参阅文档。
如果您希望用户循环、执行一些条件行为或进行一些计算,您只需使用 Python 提供的常规编程结构即可。 Locust 在自己的 greenlet(轻量级进程/协程)中运行每个用户。这使您能够像正常(阻塞)Python 代码一样编写测试,而不必使用回调或某些其他机制。因为您的场景“只是 Python”,所以您可以使用常规 IDE,并将测试作为常规代码进行版本控制(而不是使用 XML 或二进制格式的其他一些工具)
from locust import HttpUser, task, Betweenclass QuickstartUser(HttpUser):wait_time = Between(1, 2)def on_start(self):self.client.post("/login", json={"用户名":"foo", "密码":"bar"})@taskdef hello_world(self):self.client.get("/hello")self.client.get("/world")@task(3)def view_item(self):for item_id in range(10):self.client.get(f"/item?id={item_id}", name="/item")
Locust 可以轻松地运行分布在多台机器上的负载测试。它是基于事件的(使用 gevent),这使得单个进程可以处理数千个并发用户。虽然可能有其他工具能够在给定硬件上每秒执行更多请求,但每个 Locust 用户的低开销使其非常适合测试高度并发的工作负载。
Locust 具有用户友好的 Web 界面,可以实时显示测试进度。您甚至可以在测试运行时更改负载。它还可以在没有 UI 的情况下运行,从而易于用于 CI/CD 测试。
尽管 Locust 主要用于网站/服务,但它可以用于测试几乎任何系统或协议。只需为您想要测试的内容编写一个客户端,或者探索社区创建的一些客户端。
Locust 的代码库故意保持较小,并且不能立即解决所有问题。相反,我们尝试使用常规 Python 代码轻松适应您可能遇到的任何情况。没有什么可以阻止你:
将实时报告数据发送到 TimescaleDB 并在 Grafana 中可视化
包装调用以处理 REST API 的特殊性
使用完全自定义的负载形状/轮廓
...
文档:docs.locust.io
支持/问题:StackOverflow
Github 讨论:Github 讨论
聊天/讨论:Slack(注册)
维护者:拉斯·霍姆伯格
用户界面:安德鲁·鲍德温
原创作者:乔纳坦·海曼
非常感谢我们所有的贡献者
根据 MIT 许可证授权的开放源代码(有关详细信息,请参阅许可证文件)。