第一章:介绍篇
简介
- Locust是一款基于Python的性能测试框架
- 同时支持命令行及Web UI测试
- 支持导入其他Python库,不受GUI限制,可扩展性不受限制
- 官方文档地址
- 案例代码仓库
特点
- 对比常用的性能测试工具Jmeter,Locust的特点如下
指标项 | Jmeter | Locust |
---|---|---|
代码语言 | Java | Python |
可视化程度/易用性 | 高 | 中 |
性能 | 基于多线程 | 基于协程,高并发下更节省内存 |
支持分布测试 | 是 | 是 |
日志查看 | 丰富 | 丰富 |
学习成本 | 中 | 较高 |
二次开发灵活度 | 中 | 高 |
使用
安装
- Locust当前是作为Python库使用的,因此建议使用pip安装
- Python版本要求:3.8或者更新
pip3 install locust
- 验证安装的版本
locust -V
- 安装预发布版本
pip3 install --pre locust
入门
- Locust实质就是Python方法库的集合,因此使用Locust就是使用已编写的第三方库下的类和方法
- Locust最主要的类是User类和TaskSet类
- User类: 创建用于模拟请求的用户
- TaskSet类:测试场景的集合,访问接口的相关代码和处理,如host、url、response等
案例1:基本测试场景
- 假设有一个服务
- 监听5000端口
- 提供不同的路由访问,如/public
- 访问成功时返回的messgae为success
- 编写locust脚本访问服务
- 执行locust脚本
部署服务端
- 使用一个已构建的flask测试容器镜像快速部署服务端
- 不同操作系统下安装docker,可参考【Docker-get docker】
- 根据操作系统选择对应的docker-compose文件,下载后改名为docker-compose.yml
- 此处以Linux操作系统为例, 将docker-compose.yml移动到/data/compose/flasktest
- 执行命令启动容器
# 进入目录
cd /data/compose/flasktest
# 启动容器
docker compose up -d
编写代码
# 导入Locust类
from locust import FastHttpUser, task
class MockUser(FastHttpUser):
# 设置默认的请求hots,仅在web界面此host生效
host = "http://127.0.0.1:5000"
# 使用@task装饰器表明此方法是一个需要执行的用例
# Locust装饰器详细介绍请查看基础章节
@task
def test_public_route(self):
self.client.get(url="/public")
- 此案例中MockUser继承自FastHttpUser,用于模拟用户
- host:设置默认请求的url host
- 实际请求时url的host部分可以与默认host不一致
- 类中的host变量,会在web界面启动时作为Host的值自动传入
- 类中的host变量,在无界面启动时失效,需要手动指定--host或者-H传入
- @task:被装饰的方法或者函数会被识别为一个测试用例场景
- test_public_route:测试场景的代码
- self.client:实例化User时创建的HttpSession实例。客户端支持cookie,因此在HTTP请求之间保持会话。
- url:请求的url,一般组成如下
- 请求协议:http或者https
- 请求地址:域名或者ip
- 请求端口:根据实际设置,不设置时http默认80,https默认443
- 请求路由:如/public
- 此处MockUser下已设置了默认的host,因此url的实际访问的完整地址为:http://127.0.0.1:5000/public
执行Locust
webui方式
- 创建一个locust文件,如case_01_simple.py
- 复制上面[[#代码]]步骤的内容,粘贴到case_01_simple.py
- 使用locust命令启动
locust -f case_01_simple.py
- 此时通过当前服务器的IP+8089端口即可访问服务端
- 点击中间的【START SWARM】按钮开始执行测试
当然也可以切换到暗色模式
- 在界面上,我们可以看到请求的方法、路径、失败率、响应时间、RPS等性能相关的常规参数
- 当然其他的页面提供了更详细的测试相关信息
命令行方式
- 创建一个locust文件,如case_01_simple.py
- 复制上面[[#代码]]步骤的内容,粘贴到case_01_simple.py
- 使用locust命令启动,并添加--headless参数,此时默认使用命令行启动,无web页面
locust -f case_01_simple.py --headless -t=1m -u=1 -r=1
启动参数详解
- 无论是web界面,还是命令行的方式,都存在以下几个核心参数,让我们看看这些参数的含义
参数 | 简写 | 解释 | 备注 |
---|---|---|---|
--host | -H | 默认的基础url | |
--users | -u | 并发用户数峰值 | 整数类型 |
--spawn-rate | -r | 每秒生成用户数 | 支持浮点数 |
--run-time | -t | 运行时间 | 不设置时默认一直运行 |
评论区