Locust 是什么
Locust 是用 Python 编写的开源负载测试工具:用普通 Python 代码定义用户行为,运行时按指定并发数模拟大量用户,自带 Web 界面实时展示吞吐与错误。它基于事件循环并发模型,单进程可撑起可观并发,也支持分布式扩展;脚本就是代码,方便与既有 Python 生态和 CI 集成。
基本信息
| 脚本入口 | locustfile.py 中定义 User 类与任务方法 |
|---|---|
| 行为权重 | 用 task 装饰器设置权重,控制各行为按比例执行 |
| 节奏控制 | wait_time 设定用户思考间隔,避免请求密到失真 |
| 分布式 | master 节点聚合,worker 节点执行,横向扩展并发 |
| 运行模式 | Web 界面交互或 --headless 无头模式用于流水线 |
| 结果输出 | 实时看板、CSV 导出,或接入统计系统 |
最小脚本示例
最小脚本示例
from locust import HttpUser, task, between
class ShopUser(HttpUser):
host = 'https://example.com'
wait_time = between(1, 3) # 用户思考 1 到 3 秒
@task(3) # 权重 3:浏览商品更频繁
def browse(self):
self.client.get('/api/products')
@task(1) # 权重 1:下单较少
def order(self):
self.client.post('/api/orders', json={'sku': 'A-100'})
# 运行:locust -f locustfile.py --headless -u 200 -r 20 -t 5m典型使用场景
- 接口压测:用 Python 复用既有工具与库,写复杂业务链路。
- 混合场景:按权重模拟浏览、搜索、下单等不同用户行为比例。
- CI 冒烟压测:headless 模式在流水线里跑短时压测。
- 长尾分析:结合响应时间分布定位慢接口。
- 团队协作:脚本可读性强,开发与测试都能维护。
别在任务里写阻塞代码:事件循环模型下,一次同步阻塞会拖住整个进程的并发。
并发不等于真实用户:wait_time 与行为比例设计得越贴近真实流量,结论越有迁移价值。
留意依赖版本:gevent 等依赖升级可能影响吞吐表现,压测环境要锁定版本。
常用运行参数
| 参数 | 作用 | 实践建议 |
|---|---|---|
| -u | 用户并发总数 | 按目标并发或阶梯设置 |
| -r | 每秒启动用户数 | 渐进加压,观察爬坡过程 |
| -t | 运行时长 | 短测用于门禁,长跑看稳定性 |
| --headless | 无界面模式 | 配合流水线与定时任务 |
| --csv | 结果导出 | 保留原始数据供离线分析 |
分布式部署时把统计口径对齐:master 聚合的延迟与错误数据,才是汇报口径。