Locust:用 Python 写压测脚本,27.8K Star
Locust:用 Python 写压测脚本,27.8K Star
Locust 在 GitHub 上拿到了 27,851 Star,是目前最流行的 Python 性能测试工具之一。
压力测试工具很多,但 Locust 走了一条不同的路:用纯 Python 代码来定义测试场景。不用学 DSL,不用在 GUI 里点点点,写测试就跟写普通 Python 脚本一样。你的测试脚本可以放进 Git,在 PyCharm 里写,CI 里跑。

1、这玩意儿是干嘛的
Locust 是一个开源的性能测试工具,主要用来压 HTTP 服务,也能扩展去测任意协议。
你写一段 Python 定义用户行为,Locust 就帮你模拟成千上万个并发用户去打目标服务,然后实时展示吞吐量、响应时间、错误率。结果可以导出做离线分析,也能直接接 Grafana 等可视化工具。
2、为什么要用它
市面上的压测工具大概分两派。GUI 派,比如 JMeter,点点鼠标配场景,上手还行,但场景稍微复杂就绑手绑脚。DSL 派,比如 Gatling,用自己的一套脚本语言描述测试逻辑,得额外学一门方言。
Locust 选了第三条路:直接用 Python。你会 Python 就会写 Locust 测试。想加个条件分支,写 if。想循环,写 for。想调个第三方库算签名,import 进来直接用。
技术层面,每个虚拟用户跑在自己的 greenlet 轻量协程里,代码写起来是同步阻塞式的,不用回调,不用 async/await。省心。
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")
3、分布式执行和 Web UI
Locust 基于 gevent 事件循环,单进程能扛几千并发用户。要测更大规模,开多个 worker 节点,master 统一调度就行,架构很直接。
它自带一个 Web 管理界面,测试跑起来后实时展示指标曲线。吞吐量、响应时间分位数、失败率,跑着跑着就能看到趋势。过程中还能动态调整并发数,不用停测。不需要 UI 的时候用命令行模式,适合塞进 CI/CD 流水线。

4、不止测 HTTP
虽然最常见的用法是压 HTTP API,但 Locust 的架构是协议无关的。写一个客户端封装,就能测数据库、消息队列、gRPC、WebSocket。社区已经贡献了不少现成的协议插件,开箱即用。
Locust 的代码库刻意保持精简,不把能力全塞进核心里,而是留好扩展点。想对接 TimescaleDB 持久化测试数据,想在 Grafana 搭看板,想自定义负载曲线,都有对应方案。微软也基于它做了 VS Code 扩展和 Azure Load Testing 托管服务。
5、适合哪些人用
- 后端或测试工程师,日常要压 HTTP 接口,习惯用 Python 写脚本
- 团队技术栈以 Python 为主,不想为压测额外引入一套工具和语言
- 需要大规模并发压测,对分布式执行有硬需求
- 想把性能测试集成到 CI/CD,每次发布前自动跑一轮回归
套工具和语言
- 需要大规模并发压测,对分布式执行有硬需求
- 想把性能测试集成到 CI/CD,每次发布前自动跑一轮回归
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)