本文目录导读:

是的,Locust 是 Python 应用压力测试的首选工具之一,尤其适合 HTTP 接口和微服务架构的压力测试。
Locust 的核心优势
- 纯 Python 编写:测试脚本用 Python 写,可复用业务代码
- 协程并发:基于 gevent,单机可模拟数千并发用户
- Web 实时监控:浏览器查看实时统计和图表
- 分布式支持:主从模式轻松扩展
快速入门示例
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 负载生成 |
最佳实践
- 合理设置等待时间:模拟真实用户操作间隔
- 使用 FastHttpUser:性能比 HttpUser 高 2-3 倍
from locust import FastHttpUser
- 监控系统资源:结合
nmon或top观察服务器负载 - 分布式部署:单机瓶颈时,使用多机分布式模式
- 结果分析:重点看 95% 响应时间 和 错误率
- 如果你的应用是 HTTP/HTTPS 接口,且团队熟悉 Python,Locust 是最佳选择
- 需要测试 非 HTTP 协议(如 gRPC、WebSocket)时,考虑其他工具
- 追求 极致性能 时,可考虑 wrk 或 Vegeta
建议先用 Locust 快速上手,后续根据需求决定是否更换其他工具。