1. Locust性能测试实战指南
最近在帮一个电商项目做压力测试时,我重新审视了各种性能测试工具,最终选择了Locust。这个基于Python的开源工具用起来简直不要太爽——它可以用纯Python编写测试脚本,分布式执行能力强大,而且Web界面直观易懂。今天我就把这两年用Locust踩过的坑和实战经验完整分享出来。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 为什么选择Locust做性能测试
2.1 主流性能测试工具对比
在性能测试领域,我们通常有这几个选择:
| 工具名称 | 语言支持 | 学习曲线 | 分布式支持 | 报告可视化 |
|---|---|---|---|---|
| JMeter | Java | 中等 | 需要插件 | 一般 |
| LoadRunner | C/Java | 陡峭 | 完善 | 优秀 |
| Locust | Python | 平缓 | 原生支持 | 直观 |
Locust最大的优势在于:
- 完全用Python编写测试脚本,对开发友好
- 支持分布式压测,轻松模拟百万级并发
- 实时Web UI监控,结果一目了然
- 轻量级,安装配置简单
2.2 Locust核心架构解析
Locust采用master-slave架构:
code复制Master节点
├── 管理测试任务
├── 收集统计数据
└── 提供Web界面
Slave节点(多个)
├── 执行实际请求
└── 上报统计数据
这种架构让Locust可以轻松扩展到数千个并发用户。我在实际项目中用10台slave机器模拟过50万并发用户,系统运行非常稳定。
3. 环境搭建与基础配置
3.1 安装Locust
推荐使用Python 3.6+环境:
bash复制pip install locust
验证安装:
bash复制locust -V
注意:如果遇到SSL相关错误,可以尝试:
bash复制pip install --upgrade certifi
3.2 第一个测试脚本
创建一个基本的locustfile.py:
python复制from locust import HttpUser, task, between
class WebsiteUser(HttpUser):
wait_time = between(1, 5)
@task
def view_homepage(self):
self.client.get("/")
@task(3)
def view_product(self):
self.client.get("/product/1")
这个脚本定义了两个任务:
- 查看首页(权重1)
- 查看商品页(权重3)
4. 高级测试场景实现
4.1 模拟用户登录流程
真实的电商场景需要先登录:
python复制class LoggedInUser(HttpUser):
wait_time = between(2, 10)
def on_start(self):
# 登录操作
response = self.client.post("/login", {
"username": "testuser",
"password": "test123"
})
self.token = response.json()["token"]
@task
def view_profile(self):
headers = {"Authorization": f"Bearer {self.token}"}
self.client.get("/profile", headers=headers)
4.2 参数化测试数据
使用CSV文件驱动测试:
python复制import csv
from itertools import cycle
product_ids = cycle([
row["id"] for row in csv.DictReader(open("products.csv"))
])
class ProductUser(HttpUser):
@task
def view_product(self):
product_id = next(product_ids)
self.client.get(f"/product/{product_id}")
5. 分布式压测实战
5.1 启动Master节点
bash复制locust -f locustfile.py --master
5.2 启动Worker节点
bash复制locust -f locustfile.py --worker --master-host=192.168.1.100
提示:Worker节点数量建议为CPU核心数的2-3倍
5.3 压测结果分析
关键指标解读:
- RPS (Requests Per Second):系统吞吐量
- 响应时间:P95/P99值更重要
- 失败率:超过1%就需要关注
6. 常见问题排查指南
6.1 "Socket hang up"错误
通常是因为:
- 服务器连接数达到上限
- 网络带宽不足
- 客户端端口耗尽
解决方案:
bash复制# 增加系统文件描述符限制
ulimit -n 100000
6.2 Worker节点失联
检查:
- 网络连通性
- Master节点防火墙设置
- 系统资源是否耗尽
7. 性能测试最佳实践
- 渐进式加压:从低并发开始,逐步增加
- 场景设计:模拟真实用户行为
- 监控全面:不仅要监控被测系统,还要监控压测机
- 测试数据:准备足够多的测试数据,避免缓存影响
我在实际项目中总结的黄金法则:先用20%的预期流量热身,然后持续加压直到出现性能拐点,最后保持峰值压力运行至少30分钟。
