Locust 是易于使用的分布式用户负载测试工具。 它旨在对网站(或其他系统)进行负载测试,并确定系统可以处理多少个并发用户。
它的大致思路是,在测试期间,一群蝗虫会攻击您的网站。 每个蝗虫(或测试用户)的行为由您定义,并且通过 Web UI 实时监控聚集过程。 这将帮助您在允许真正的用户进入之前,测试并确定代码中的瓶颈。
Locust 完全基于事件,因此它可以在一台计算机上支持数千个并发用户。 与许多其他基于事件的应用程序相比,它不使用回调。 相反,它通过 gevent 使用轻量级进程。你站点的每个测试用户实际上都在其自己的进程中运行(准确地说,是 greenlet)。 这样,你可以在 Python 中编写非常有表现力的场景,且不用复杂的代码和回调。
pip3 install locustio
安装完成后,查看是否安装成功,可以执行以下命令:
locust --help
locust --version
1、File -> New Project -> Pure Python,新建工程 locust_test
2、在项目中,New -> Python file,新建 locust_demo.py,添加以下代码:
# -*- coding: utf-8 -*-
import os
from locust import HttpLocust, TaskSet, task, between
# 创建LocustDemo类继承TaskSet类,它是用户行为类
class LocustDemo(TaskSet):
'''
创建baidu方法,访问百度首页,并校验req返回值
task是任务装饰器,参数为运行次数的比例
即1表示一个Locust实例被挑选执行的权重,数值越大,执行频率越高
'''
@task(1)
def baidu(self):
req = self.client.get("/") # 访问百度首页,并获取对应的req
if req.status_code == 200: # 校验返回的status_code,成功则会返回200
print("success")
else:
print("fail")
# 创建WebSiteUser类用户设置性能测试
class WebsiteUser(HttpLocust):
# 指定定义用户行为的类,包含一组任务
task_set = LocustDemo
# 设置用户执行任务之间等待的上下限,单位秒
wait_time = between(3, 6)
# # 等同于上面wait_time,单位毫秒
# min_wait = 3000
# max_wait = 6000
if __name__ == '__main__':
os.system("locust -f locust_demo.py --host=https://www.baidu.com/")
3、右键 run locust_demo.py 文件,控制台将输出以下内容:
[2019-11-30 17:14:16,235] xiaoxiaodeMacBook-Pro.local/INFO/locust.main: Starting web monitor at *:8089
[2019-11-30 17:14:16,237] xiaoxaiodeMacBook-Pro.local/INFO/locust.main: Starting Locust 0.13.2
4、在浏览器中打开网址:http://127.0.0.1:8089,显示如下:
这里可以看到,有两个编辑框,第一个是并发的总用户数,第二个是每秒递增的用户数,默认从 0 开始,第三个是你代码中设定的 host。
5、我们可以分别输入总用户数 100,递增 10,然后点击 Starting swarming 按钮,可以看到如下图:
各模块说明:
New test:点击该按钮可对模拟的总虚拟用户数和每秒启动的虚拟用户数进行编辑
Statistics:类似于 jmeter 中 Listen 的聚合报告
Charts:测试结果变化趋势的曲线展示图,分别为每秒完成的请求数(RPS)、响应时间、不同时间的虚拟用户数
Failures:失败请求的展示界面
Exceptions:异常请求的展示界面
Download Data:测试数据下载模块, 提供三种类型的 CSV 格式的下载,分别是:Statistics、responsetime、exceptions
切换到 Charts,可以很清晰地看到实时监控图表:
6、如果要停止测试,点击右上角红色的 STOP 按钮。停止后,我们可以切换到 Failures 查看相关错误报告