Locust是一个开源的性能测试工具,可以结合python代码进行用户并发测试,能够测试出一个系统可以并发处理多少个用户
安装
需要在python下安装locust模块
- 要有python环境(先安装python,可见其他文章:python下载安装以及环境变量配置),我的安装目录是D:\Python382
- win+R打开命令行窗口,进入python安装目录下的Scripts文件夹下或者在D:\Python382\Scripts目录直接输入cmd回车(可直接打开该目录下的命令窗口)
- 运行命令:
pip install locust
- 检查安装的命令是:
pip show locust
- 查看版本的命令是:
locust -V
使用
注:需要在有locustfile.py文件(该文件为python脚本,实例见最后)的文件夹下运行命令locust(我的locustfile.py文件放在了E:\locusttest下),否则如下:
有Web界面
启动
运行命令:locust
(关掉窗口就停止了)
打开
浏览器输入:http://localhost:8089/
Number of total users to simulate:要模拟的总用户数
Spawn rate (users spawned/second):生成率(用户生成/秒)
Host (e.g. http://www.example.com):主机(例如 http://www.example.com)
无Web界面
启动运行
直接运行命令:locust -f locustfile.py --host=https://www.baidu.com --headless -u 1 -r 1
(把上面命令中百度的地址替换成自己的测试地址)
host:主机
headless:无图形模式
-u:要模拟的总用户数
-r:要模拟的总用户数
设置运行时间
加–run-time 10或者-t 10
运行命令:locust -f locustfile.py --host=https://www.baidu.com --headless -u 1 -r 1 --run-time 10
或者:locust -f locustfile.py --host=https://www.baidu.com --headless -u 1 -r 1 -t 10
(把上面命令中百度的地址替换成自己的测试地址)
默认秒:s,分钟:m,小时:h,1分30秒:1m30s
导出CSV格式报告
加–csv=example
运行命令:locust -f locustfile.py --host=https://www.baidu.com --headless -u 1 -r 1 -t 10 --csv=example
(把上面命令中百度的地址替换成自己的测试地址)
生成四个csv文件
example_stats.csv效果如下
脚本示例
locustfile.py脚本示例,供参考
# 保存为locustfile.py
# coding=utf-8
from locust import HttpUser, TaskSet, task
'''
实现场景:先登录(只登录一次),然后访问->收藏->消息列表
访问收藏页面权重为2,消息列表权重为1
'''
class UserBehavior(TaskSet):
'''蝗虫行为类'''
def _login(self):
'''登录方法'''
loginUrl = "登录的接口地址" # 自己修改
h = { # 请求头,自己修改
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
"Content-Type": "application/x-www-form-urlencoded",
}
body = { # 请求体,自己修改
"name": "111",
"pwd": "123456"
}
result = self.client.get(loginUrl, data=body, headers=h)
print(result.text)
global token # 定义一个全局的token
token = result.json()["data"]["token"]
print(token)
assert "登录成功" in result.text # 判断是否登录成功
def on_start(self):
'''任务开始准备工作:只登录一次'''
self._login()
# 任务1-收藏
@task
def task_my(self):
print("---访问页面-收藏---")
h = { # 请求头,自己修改
"token": token
}
data = { # 请求体,自己修改
"favorite": "110"
}
r = self.client.get(url="收藏的接口地址", data=data, headers=h) # 地址自己修改
print(r.text)
assert "操作成功" in r.text # 判断是否收藏成功
# 任务2-消息列表
@task
def task_news(self):
print("---访问页面-消息列表---")
h = { # 请求头,自己修改
"token": token
}
data = { # 请求体,自己修改
"page": "1",
"limit": "10"
}
r = self.client.get("消息列表的接口地址", data=data, headers=h) # 地址自己修改
print(r.text)
assert "访问成功" in r.text
class WebsiteUser(HttpUser):
tasks = [UserBehavior]
min_wait = 1000
max_wait = 1000
if __name__ == "__main__":
import os
os.system("locust -f locustfile.py --host=主地址") # 主地址自己修改