Locust 基础

Locust 用 Python 定义用户行为:HttpUser 与 @task 描述任务与权重、wait_time 控制思考时间、Web UI 实时观察;适合与 Python 技术栈共用代码与工具链。

软件测试速查开发更新于 2026-10-13

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 聚合的延迟与错误数据,才是汇报口径。

易错点

  • 阻塞调用拖慢全局:在任务中执行同步 IO,并发数虚高、延迟全面抬升。
  • 忽略 wait_time:请求密到不真实的程度,压出的数字无法与真实流量对应。
  • 单进程硬扛大规模:未上分布式就冲高并发,先撞到压力机资源天花板。
  • 脚本混入测试数据准备:造数逻辑被执行进压测链路,污染结果。
  • 结果只看聚合:不按接口细分,慢接口被平均值掩盖。

数据来源与参考

  • Locust 官方文档(docs.locust.io)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌