Python应用压力测试用Locust吗

wen python案例 2

本文目录导读:

Python应用压力测试用Locust吗

  1. Locust 的核心优势
  2. 快速入门示例
  3. 运行与监控
  4. 高级特性
  5. 与其他工具的对比
  6. 最佳实践

是的,Locust 是 Python 应用压力测试的首选工具之一,尤其适合 HTTP 接口和微服务架构的压力测试。

Locust 的核心优势

  1. 纯 Python 编写:测试脚本用 Python 写,可复用业务代码
  2. 协程并发:基于 gevent,单机可模拟数千并发用户
  3. Web 实时监控:浏览器查看实时统计和图表
  4. 分布式支持:主从模式轻松扩展

快速入门示例

from locust import HttpUser, task, between
class WebsiteUser(HttpUser):
    wait_time = between(1, 5)  # 用户操作间隔
    @task(3)  # 权重,执行3次
    def view_home(self):
        self.client.get("/")
    @task(1)  # 权重,执行1次
    def create_user(self):
        self.client.post("/api/users", json={
            "name": "test_user",
            "email": "test@example.com"
        })

运行与监控

# 命令行运行(Web 模式)
locust -f locustfile.py --host=http://example.com
# 命令行运行(无 Web 模式,适合 CI/CD)
locust -f locustfile.py --headless -u 100 -r 10 --run-time 30s --host=http://example.com

访问 http://localhost:8089 打开 Web UI,设置并发用户数和 spawn rate 后开始测试。

高级特性

参数化请求

class MyUser(HttpUser):
    @task
    def with_query_params(self):
        self.client.get("/search", params={"q": "test", "page": 1})
    @task
    def with_headers(self):
        self.client.get("/api/data", headers={"Authorization": "Bearer token123"})

分布式运行(多机)

# 主机(Master)
locust -f locustfile.py --master --host=http://example.com
# 从机(Worker,多台机器)
locust -f locustfile.py --worker --master-host=192.168.1.100

自定义测试策略

from locust import SequentialTaskSet, constant_pacing
class UserBehavior(SequentialTaskSet):
    def on_start(self):
        self.login()
    def login(self):
        self.client.post("/login", {"user": "test", "pass": "123"})
    @task(1)
    def step1(self):
        self.client.get("/dashboard")
        self.interrupt()  # 中断,重新开始
class MyUser(HttpUser):
    tasks = [UserBehavior]
    wait_time = constant_pacing(1)  # 每秒执行一次

与其他工具的对比

工具 优点 缺点 适用场景
Locust Python 编写,Web 监控,易扩展 不适合协议级测试 HTTP API 压力测试
JMeter 功能全面,UI 丰富 学习曲线陡,资源消耗大 复杂场景、非 HTTP 协议
wrk 性能极高 只支持 HTTP,无脚本支持 纯性能基准测试
Vegeta Go 编写,简单高效 功能单一 HTTP 负载生成

最佳实践

  1. 合理设置等待时间:模拟真实用户操作间隔
  2. 使用 FastHttpUser:性能比 HttpUser 高 2-3 倍
    from locust import FastHttpUser
  3. 监控系统资源:结合 nmontop 观察服务器负载
  4. 分布式部署:单机瓶颈时,使用多机分布式模式
  5. 结果分析:重点看 95% 响应时间错误率
  • 如果你的应用是 HTTP/HTTPS 接口,且团队熟悉 Python,Locust 是最佳选择
  • 需要测试 非 HTTP 协议(如 gRPC、WebSocket)时,考虑其他工具
  • 追求 极致性能 时,可考虑 wrk 或 Vegeta

建议先用 Locust 快速上手,后续根据需求决定是否更换其他工具。

抱歉,评论功能暂时关闭!