Locust:用 Python 写压测脚本,能跑几十万并发
文章目录
Locust:用 Python 写压测脚本,能跑几十万并发
locust 在 GitHub 上已经拿到 27,916 Star 了。
这是一个开源的性能测试工具,专门用来对 HTTP 和其他协议做压力测试。跟 JMeter 那套 GUI 拖拽 + XML 配置的路线不一样,Locust 的思路是:用纯 Python 代码来定义测试场景。

1、这东西解决什么问题
做过压测的人都知道,传统工具的痛点在哪。
JMeter 功能是够用,但那个 GUI 配起来又慢又容易出错,脚本一复杂就变成一堆 XML 节点的堆砌。想写个循环、加个条件判断、做点数据计算,都得在 GUI 里点来点去。脚本没法版本管理,团队协作的时候谁改了什么根本看不清。
Locust 的做法很直接:把测试场景写成 Python 类。循环用 for,条件用 if,数据处理随便你写。测试脚本就是普通的 .py 文件,能放进 Git,能用 IDE 打断点调试。
from 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")
一个用户类,几个带 @task 装饰器的方法,权重用数字控制。想加登录流程就写 on_start,想循环请求就写 for 循环。没有额外的 DSL,没有配置文件,就是 Python。
2、怎么做到几十万并发的
Locust 底层用的是 gevent,一个基于协程的并发库。每个虚拟用户跑在一个 greenlet 里,开销很小。单机单进程就能撑住几千个并发用户,多台机器分布式跑的话,几十万并发也不难。
分布式的方式也很简单:一台机器当 master,其他机器当 worker。master 负责调度和汇总数据,worker 负责发请求。加机器就加 worker,不用改脚本。
命令行启动:
locust -f locustfile.py --host=https://example.com

3、Web UI 和实时数据
Locust 自带一个 Web 界面,默认跑在 8089 端口。打开浏览器就能配置并发数、启动压测、看实时数据。
界面上能看到的东西包括:每秒请求数(RPS)、响应时间分布、失败率、每个接口的详细统计。测试跑着的时候可以随时调整并发数,不用停了重来。
也可以不带 UI 跑,纯命令行模式适合塞进 CI/CD 流程里:
locust -f locustfile.py --headless --users 1000 --spawn-rate 10 --run-time 5m
4、不止是 HTTP
虽然 Locust 主要是用来测 Web 服务的,但它的架构是可扩展的。你可以自己写一个 Client 类,对接任何协议。官方文档里给了例子,社区也有人做了 gRPC、WebSocket、MQTT 等协议的插件。
这意味着不管是 REST API、数据库、消息队列还是自定义的 TCP 服务,都能用 Locust 来压。
5、跟其他工具的差别
跟 JMeter 比:Locust 的脚本更灵活,写起来更快,但图表展示没有 JMemter 那么多维度。如果你需要复杂的断言和响应提取,Locust 也能做,只是方式不同——直接在 Python 里写逻辑就行。
跟 k6 比:k6 用 JavaScript 写脚本,性能也不错。但 Locust 的优势在于 Python 生态,数据处理、文件读写、第三方库随便用。对 Python 开发者来说上手成本为零。
跟 Gatling 比:Gatling 基于 Scala,性能很好,但学习曲线陡。Locust 的门槛明显低一截。
6、适合什么场景
- 后端服务上线前的容量评估
- 接口性能回归测试,集成到 CI 里每次跑
- 线上问题复现,模拟高并发场景定位瓶颈
- 给客户出压测报告,用 Locust 的导出数据做分析
Locust 是 MIT 协议,可以商用,没有限制。Python 3.8 以上都能跑,pip install locust 一行搞定。
Locust 的导出数据做分析
Locust 是 MIT 协议,可以商用,没有限制。Python 3.8 以上都能跑,pip install locust 一行搞定。
更多推荐



所有评论(0)