Locust性能测试简介
Locust是一款开源的负载测试工具,基于Python开发,采用事件驱动架构,支持模拟高并发用户行为。其特点包括分布式测试、实时监控、脚本编写灵活(纯Python代码),适合测试Web应用、API等场景。
安装与基础配置
确保已安装Python(建议3.7+版本),通过pip安装Locust:
pip install locust
验证安装:
locust --version
创建性能测试脚本(如locustfile.py
),定义用户行为和任务:
from locust import HttpUser, task, between
class WebsiteUser(HttpUser):
wait_time = between(1, 5) # 用户请求间隔时间(秒)
@task
def load_homepage(self):
self.client.get("/") # 测试首页
@task(3) # 权重为3,执行频率更高
def load_api(self):
self.client.get("/api/data")
启动测试
运行以下命令启动Locust:
locust -f locustfile.py --host=http://目标网站地址
参数说明:
-f
:指定测试脚本路径。--host
:设置被测系统的基础URL。
访问Locust的Web界面(默认http://localhost:8089
),设置并发用户数(Number of Users)、生成速率(Spawn Rate)后启动测试。
测试场景设计技巧
-
用户行为模拟
- 使用
@task
装饰器定义任务,通过权重控制执行频率。 - 结合
on_start
方法模拟用户登录等初始化操作。
- 使用
-
参数化请求
动态生成请求参数(如随机用户ID):from random import randint @task def dynamic_request(self): user_id = randint(1, 1000) self.client.get(f"/user/{user_id}")
-
断言与校验
使用catch_response
验证响应:with self.client.get("/", catch_response=True) as response: if response.status_code != 200: response.failure("请求失败")
分布式测试
通过多机协作提升压力生成能力:
- 主节点启动:
locust -f locustfile.py --master --host=http://目标地址
- 从节点启动(需与主节点同一网络):
locust -f locustfile.py --worker --master-host=主节点IP
结果分析与报告
-
Web界面
- 实时查看RPS(每秒请求数)、响应时间、失败率等指标。
- 导出CSV格式数据用于进一步分析。
-
命令行参数
无头模式运行(适合CI/CD集成):locust -f locustfile.py --headless --users 100 --spawn-rate 10 --run-time 1m
参数说明:
--users
:总用户数。--spawn-rate
:每秒启动用户数。--run-time
:测试持续时间(如1m
表示1分钟)。
常见问题与优化
-
性能瓶颈
- 调整Locust的协程数量(默认1000),通过
--expect-workers
参数优化。 - 避免测试脚本存在阻塞操作(如同步IO)。
- 调整Locust的协程数量(默认1000),通过
-
资源监控
结合Prometheus或Grafana监控被测系统的CPU、内存等指标。 -
动态负载
使用TimeLimitTaskSet
实现分阶段压力测试(如阶梯式增加用户数)。
通过以上方法,可快速上手Locust并完成高效的性能测试。更多高级功能可参考官方文档(https://locust.io/)。