
locustio/locustLocust是一个易于使用、可编写脚本且可扩展的性能测试工具。用户通过常规Python代码定义用户行为,而非使用笨重的UI或特定领域语言,这使得Locust具有无限扩展性且对开发人员非常友好。
如需让用户执行循环、条件行为或计算,只需使用Python提供的常规编程结构。Locust在独立的greenlet(轻量级进程/协程)中运行每个用户,允许以普通(阻塞)Python代码编写测试,无需使用回调或其他机制。由于测试场景是“纯Python代码”,可使用常规IDE,并通过版本控制管理(不同于使用XML或二进制格式的工具)。
pythonfrom locust import HttpUser, task, between class QuickstartUser(HttpUser): wait_time = between(1, 2) def on_start(self): self.client.post("/login", json={"username":"foo", "password":"bar"}) @task def 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体积小且非常灵活。如需将报告数据发送到指定数据库和图形系统、包装REST API调用以处理系统特定需求,或运行完全自定义的负载模式,均可轻松实现。
bashdocker run -p 8089:8089 -v $PWD:/locust locustio/locust -f /locust/locustfile.py
-p 8089:8089:映射Web UI端口-v $PWD:/locust:挂载本地目录到容器内,便于加载测试文件-f /locust/locustfile.py:指定测试脚本路径主节点(负责协调和Web UI):
bashdocker run -p 8089:8089 -v $PWD:/locust locustio/locust -f /locust/locustfile.py --master
从节点(负责生成负载,可多节点部署):
bashdocker run -v $PWD:/locust locustio/locust -f /locust/locustfile.py --worker --master-host=<主节点IP>
yamlversion: '3' services: master: image: locustio/locust ports: - "8089:8089" volumes: - ./:/locust command: -f /locust/locustfile.py --master worker: image: locustio/locust volumes: - ./:/locust command: -f /locust/locustfile.py --worker --master-host=master depends_on: - master deploy: replicas: 3 # 启动3个从节点
locustfile.py,定义继承HttpUser的测试类@task装饰器标记用户行为,可通过参数设置任务权重(如@task(3)表示权重为3)wait_time定义任务间等待时间,支持固定值或随机范围(如between(1, 2)表示1-2秒)on_start方法在用户开始时执行(如登录操作)开源,基于MIT许可证(详见LICENSE文件)。
manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务