01. Locust框架
01. Locust框架
https://zhuanlan.zhihu.com/p/530985154
https://www.cnblogs.com/xiaolangjianke/p/12836956.html
1. Locust介绍和安装
- Locust特点
- 基于Python的开源负载测试工具
- 支持多种操作系统
- 支持二次开发
- 能够模拟更多用户
- 基于协程(微线程)的并发
- Locust 与 JMeter对比
JMeter | Locust | |
---|---|---|
授权方式 | 开源免费 | 开源免费 |
语言 | Java | Python |
测试脚本形式 | GUI | Python |
并发机制 | 线程 | 协程(微线程) |
单机并发能力 | 低 | 高 |
是否支持分布式 | 支持 | 支持 |
实时资源监控 | 不支持(借助PerFMon插件) | 不支持 |
分析报表 | 简单图标 | 简单图标 |
二次开发 | 支持 | 支持 |
Locust安装
前提:已安装pycharm、python3.5 以上的版本 在线安装: pip install locustio==0.12.2 离线安装 Pycharm安装 locust与python版本问题 pip uninstall gevent pip install gevent==1.3.0
2. 案例演示环境说明
登录
- URL: http://bms-test.ithiema.net/bms/login - 请求方式:POST - 请求参数:{"username": "admin", "password": "123456"}
首页
- URL:http://bms-test.ithiema.net/bms/index - 请求方式:GET
获取用户信息
- URL:http://bms-test.ithiema.net/bms/profile - 请求方式:GET
退出
- URL:http://bms-test.ithiema.net/bms/logout - 请求方式:POST
3. 编写Locust测试脚本
1. Locust测试脚本实现步骤
定义任务 - 发送HTTP接口请求(类似JMeter中的HTTP取样器)
from locust import TaskSet, HttpLocust """ pip install locustio==0.12.2 locust 与 python版本问题 pip uninstall gevent pip install gevent==1.3.0 """ # 定义任务locust里发送请求是基于requests实现的,请求方法、参数、响应对象和requests使用方式一样 def login(l): l.client.post("/login", data={"username": "admin", "password": "123456"}) def index(l): l.client.get("/index") def profile(l): l.client.get("/profile") def logout(l): l.client.post("/logout")
定义任务集 - 定义一个用户行为,包含多个HTTP请求(即具体的任务,类似于JMeter中的事物管理器)。
class UserBehavier(TaskSet): """ 定义一个用户行为(任务集),包含多个具体的任务。 定义一个用户行为类,要继承TaskSet类,表示一个任务集 tasks:用来添加任务,它是一个dict类型,key表示任务的方法名,value表示挑选执行的权重,数值越大执行频率越高 on_start:前置方法(前置任务),在所有任务之前调用 on_stop:后置方法(后置任务),当任务集停止时调用 """ tasks = { index: 3, profile: 1 }
def on_start(self):
login(self)
def on_stop(self):
logout(self)
```
定义Locust类 - Locust类代表用户,用户会对应具体的用户行为(即任务集,类似与JMeter中的线程组)。
class WebsitUser(HttpLocust): """ 定义一个Locust类,这个类代表用户 task_set:该属性指向`TaskSet`类,定义用户的行为 min_wait:用户执行任务之间等待时间的下界,默认值:1000ms max_wait:用户执行任务之间等待时间的上界,默认值:1000ms host:被测应用的网址,例如:http://bms-test.ithiema.net weight:用户被选中的概率,权重越大,被选中的机会就越大。默认 值:10 """ task_set = UserBehavier min_wait = 500 max_wait = 1000 host = "https://www.baidu.com/s?wd=" weight = 10
4. 运行Locust脚本
if __name__ == "__main__":
import os
os.system("locust -f 01-locust_demo.py --host=https://www.cnblogs.com")
or
运行命令:
locust -f locust_files/my_locust_file.py --host=http://example.com
参数介绍:
-f:用来指定locust文件所在路径
--host:用来指定测试应用的网址
打开Locust的web界面
运行Locust脚本后,打开浏览器并访问:http://localhost:8089。可以看到如下界面:
参数介绍
- Number of users to simulate:要模拟的用户数量
- Hatch rate (users spawned/second):孵化率(用户生成/秒),即每秒启动虚拟用户数
- 点击Start swarming 开始运行性能测试
Statistics界面
类似于JMeter中的聚合报告
Charts界面
测试结果变化趋势的曲线展示图。分别为:每秒完成的请求数(RPS)、响应时间、不同时间的虚拟用户数
Failures界面
失败请求的展示界面,即服务器原因导致无法处理请求
Exceptions界面
异常请求的展示界面
Download Data界面
测试数据下载模块, 提供三种类型的CSV格式的下载,分别是:Statistics CSV、responsetime CSV、failures CSV、exceptions CSV