性能测试Locust的使用
一、Locust 是什么?
Locust 是一个开源的负载测试工具,用于对网站(或 API)进行性能测试和压力测试。它使用 Python 编写,支持分布式测试,并且可以通过 Web UI 实时查看测试结果。
二、Locust 安装方法
你可以通过 pip
轻松安装 Locust。
✅ 安装命令:
pip install locust
📌 注意:建议在虚拟环境中安装和运行 Locust,避免依赖冲突。
三、验证是否安装成功
安装完成后,可以输入以下命令查看版本号:
locust --version
如果输出类似:
locust 2.19.0
说明安装成功 ✅
四、如何在 Python 中导入 Locust 并编写测试脚本
Locust 不是作为模块直接导入使用的,而是通过编写一个 Python 脚本来定义用户行为,然后用 locust
命令运行这个脚本。
转换成性能测试用例,需要的步骤:
-
创建HttpUser子类
-
为用例加上@task
1. 创建一个测试脚本文件,比如:locustfile.py
from locust import HttpUser, task, between
class MyUser(HttpUser):wait_time = between(1, 3) # 每个任务之间等待 1~3 秒
@taskdef login(self):url = "/api/login" # 替换为你的登录接口路径payload = {"username": "test","password": "123456"}self.client.post(url, json=payload)
@task(3) # 权重为3,表示该任务被调用的概率更高def get_homepage(self):self.client.get("/api/home") # 替换为你的首页接口
2. 运行 Locust 测试
在终端中执行:
locust -f locustfile.py
Locust 会启动一个 Web 界面,默认地址是:
http://localhost:8089
你可以在浏览器中打开这个地址,设置并发用户数、每秒启动用户数等参数,开始压测。
五、常见问题与注意事项
问题 | 解决方案 |
---|---|
locust: command not found | 确保已正确安装 pip install locust ,并检查环境变量 PATH 是否包含 pip 的可执行目录(如 ~/.local/bin/ 或 Scripts/ ) |
接口返回 404 | 检查测试 URL 是否正确,确保目标服务已经启动 |
需要认证的接口 | 可以在 on_start() 方法中先执行登录获取 token,再保存到 headers 中 |
六、扩展功能示例(带 Token 认证)
# 性能测试import os
import logging
logging.basicConfig(level=logging.INFO)
import jsonpath
from locust import HttpUser, between, task, TaskSetclass Task_Test(TaskSet):URL = "http://shop-xo.hctestedu.com/index.php?s="Params = {"application": "app","application_client_type": "weixin"}def on_start(self):# 在每个虚拟用户开始时候执行一次self.token=None@taskdef login(self):Json = {"accounts": "huace_tester","pwd": "huace_tester","verify": "rib5","type": "username"}res = self.client.post(url=self.URL + "api/user/login",params=self.Params,json=Json,name="登录" )if res.status_code == 200:self.token=jsonpath.jsonpath(res.json(),"$..token")else:print(f"Login接口执行的结果{res.status_code}")@taskdef address(self):# request的区别self.client.request(method='POST',url=self.URL+f"api/region/index&token={self.token}",params=self.Params,json={"pid":0},name='地址')@taskdef integral(self):self.client.request(method="POST",url=self.URL+f"api/userintegral/index&token={self.token}",params=self.Params,json={"page":1},name="积分列表")@taskdef HomePage(self):self.client.request(method="POST",url=self.URL+f"api/index/index&token={self.token}",params=self.Params,name="首页")@taskdef MasgessList(self):self.client.request(method="POST",url=self.URL+f"api/message/index&token={self.token}",params=self.Params,name="消息列表")if __name__ == '__main__':os.system('locust -f locust_demo.py --web-host="127.0.0.1"')
七、生成测试报告(可选)
Locust 默认没有自动保存报告的功能,但你可以结合日志记录或第三方插件(如 locust-plugins
)来实现报告导出。
安装插件:
pip install locust-plugins