ZPY博客

压测工具Locust介绍

Locust 是一款基于 Python 的开源​​分布式负载测试工具​​,专为模拟高并发用户行为设计,尤其擅长测试 Web 应用和 API 的性能。其核心特点是通过 Python 脚本定义用户行为,结合轻量级协程(gevent)实现高并发,同时提供实时 Web 界面监控测试数据。以下是 Locust 的详细介绍:


🔧 一、核心特性与架构

  1. ​事件驱动与高并发​
    • 基于 gevent 库实现协程,单节点可支持数千并发用户,资源占用低(内存消耗远低于 JMeter 等工具)。
    • 通过轻量级进程模拟用户行为,避免回调地狱,提升执行效率。
  2. ​灵活的脚本编写​
    • 使用 Python 编写测试脚本,支持复杂逻辑(如参数化、条件判断、数据动态生成)。
    • 通过 @task 装饰器定义任务及权重,模拟不同用户操作频率(如 @task(3) 表示该任务执行概率是其他任务的 3 倍)。
  3. ​分布式架构​
    • 采用 ​​Master-Worker 模式​​:
      • ​Master 节点​​:协调任务、汇总数据并提供 Web 界面。
      • ​Worker 节点​​:执行实际请求,可横向扩展至多台机器。

⚙️ 二、安装与基础使用

  1. ​安装要求​
    • Python ≥ 3.6,推荐 Python 3.9+。
    • 安装命令:pip install locust(需提前安装 Python 和 pip)。
  2. ​基础脚本示例​
    class WebsiteUser(HttpUser):
        wait_time = between(1, 5)  # 任务间隔时间(秒)
        @task
        def login(self):
            self.client.post("/login", json={"username": "test", "password": "123"})
        @task(2)
        def view_item(self):
            self.client.get("/items/1")

     

  3. ​启动方式​
    • ​Web 界面模式​​:
      locust -f locustfile.py --host=http://target-host

      访问 http://localhost:8089 配置并发用户数(Total Users)和每秒启动速率(Spawn Rate)。

    • ​无头模式(Headless)​​:
      locust -f locustfile.py --headless --users 1000 --spawn-rate 100

      适用于自动化测试或资源受限环境。


⚡️ 三、高级功能

  1. ​生命周期钩子​
    • on_start():用户开始时的初始化操作(如登录)。
    • on_stop():用户结束时的清理操作。
  2. ​响应验证​
    • 使用 catch_response=True 捕获响应,自定义断言:
      with self.client.get("/data", catch_response=True) as response:
          if response.json()["status"] != 200:
              response.failure("Invalid status")[5](@ref)

       

  3. ​参数化请求​
    • 动态生成请求参数(如随机商品 ID):
      @task
      def load_item(self):
          item_id = random.randint(1, 100)
          self.client.get(f"/item/{item_id}", name="/item/[id]")[9](@ref)

       

  4. ​自定义负载模型​
    • 支持阶梯增压、波浪式负载等复杂场景(需继承 LoadTestShape 类)。

🌐 四、分布式压测

  1. ​启动 Master​​:
    locust -f locustfile.py --master
  2. ​启动 Worker​​:
    locust -f locustfile.py --worker --master-host=<master-ip>

    ​优势​​:多节点协同可模拟百万级并发,突破单机资源瓶颈。


📊 五、测试结果分析

Locust 的 Web 界面提供实时监控,关键指标包括:

​指标​ ​说明​
​RPS​ 每秒请求数,反映系统吞吐量
​响应时间​ 中位数(Median)、90%分位数(90%ile)、平均值(Average)
​失败率​ 请求失败比例,标识系统稳定性
​并发用户数​ 当前活跃用户数量

图表展示 RPS 与响应时间变化趋势,支持导出 CSV 数据进一步分析


⚠️ 六、适用场景与注意事项

  1. ​适用场景​
    • Web 应用/API 负载测试、微服务压力测试、系统容量规划。
    • 需定制化脚本的复杂用户行为模拟(如电商下单流程)。
  2. ​局限性​
    • 原生仅支持 HTTP/HTTPS 协议,测试其他协议(如 TCP/MQTT)需自定义客户端。
    • 报告功能较简陋,需二次开发或集成 Prometheus/Grafana 增强。
  3. ​最佳实践​
    • ​逐步增压​​:从低并发开始,逐步增加用户数,避免瞬时压垮系统。
    • ​生产环境慎用​​:压测可能影响线上服务,建议在隔离环境执行。

💎 七、对比其他工具(如 JMeter)

​特性​ ​Locust​ ​JMeter​
​脚本语言​ Python(灵活编程) XML/GUI(配置复杂)
​并发模型​ 协程(单进程高并发) 线程(资源消耗高)
​分布式部署​ 原生支持 需额外插件
​协议支持​ 主要 HTTP,其他需扩展 多协议(JDBC/FTP 等)
​报告实时性​ 强(Web 界面动态更新) 弱(依赖日志导出)

💎 总结

Locust 凭借 ​​Python 脚本的灵活性​​、​​分布式架构的扩展性​​和​​实时监控能力​​,成为 DevOps 和测试工程师的首选压测工具。尤其适合需要定制化高并发场景的团队,但需注意其协议支持局限性和报告功能的不足。结合逐步增压策略和分布式部署,可高效定位系统性能瓶颈,为优化提供数据支撑