压测工具 Locust
作者:互联网
一、认识Locust
定义
Locust是一款易于使用的分布式负载测试工具,完全基于事件,即一个locust节点也可以在一个进程中支持数千并发用户,不使用回调,通过gevent使用轻量级过程(即在自己的进程内运行)。
特点
①、不需要编写笨重的UI或者臃肿的XML代码,基于协程而不是回调,脚本编写简单易读;
②、有一个基于we简洁的HTML+JS的UI用户界面,可以实时显示相关的测试结果;
③、支持分布式测试,用户界面基于网络,因此具有跨平台且易于扩展的特点;
④、所有繁琐的I / O和协同程序都被委托给gevent,替代其他工具的局限性;
安装
pip install locustio
Locust有六个依赖的python模块,一并安装好。
- gevent:在Python中实现协程的第三方库。协程又叫微线程Corouine。使用gevent可以获取极高的并发能力;
- flask:Python的一个web开发框架,和django相当;
- requests:支持http/https访问的库;
- msgpack-python:一种快速、紧凑的二进制序列化格式,使用与类似json的数据;
- six:提供了一些简单的工具封装Python2和Python3 之间的差异;
- pyzmq:安装这个第三方库,可以把Locust运行在多个进程或多个机器(分布式)
检测安装是否成功
(demo) root@ubuntu1804:/opt/other# locust --version
locust 2.5.0
二、使用
简单使用
编写测试脚本 locust_test.py
from locust import HttpUser, TaskSet, task
class UserBehavior(HttpUser):
@task(1)
def baidu_index(self):
self.client.get("/")
WebsiteUser()类用于设置生成负载的基本属性:
属性 说明
task_set 指向定义了用户行为的类
min_wait 模拟负载的任务之间执行时的最小等待时间,单位为毫秒
max_wait 模拟负载的任务之间执行时的最大等待时间,单位为毫秒
UserBehavior()类用户设置测试具体方法:
UserBehavior继承HttpUser,拥有request等方法。
@task装饰该方法表示为用户行为,括号里面参数表示该行为的执行权重:数值越大,执行频率越高,不设置默认是1;
baidu_index 是具体的测试方法,可以设置GET、POST请求,可以设置请求携带信息,可以设置请求的结果处理。
(demo) root@ubuntu1804:/opt/other# locust -f locust_test.py
/root/.virtualenvs/demo/lib/python3.8/site-packages/locust/util/deprecation.py:14: DeprecationWarning: Usage of User.task_set is deprecated since version 1.0. Set the tasks attribute instead (tasks = [UserBehavior])
warnings.warn(
[2021-11-29 11:36:29,324] ubuntu1804/INFO/locust.main: Starting web interface at http://0.0.0.0:8089 (accepting connections from all network interfaces)
[2021-11-29 11:36:29,356] ubuntu1804/INFO/locust.main: Starting Locust 2.5.0
UI界面
打开网页:http://localhost:8089,进入UI界面。
UI界面的菜单
● Statistics:类似于jmeter中Listen的聚合报告;
● Charts:测试结果变化趋势的曲线展示图,分别为每秒完成的请求数(RPS)、响应时间、不同时间的虚拟用户数;
● Failures:失败请求的展示界面;
● Exceptions:异常请求的展示界面;
● Download Data:测试数据下载模块, 提供三种类型的CSV格式的下载,分别是:Statistics、responsetime、exceptions;
统计信息:
Type:请求类型,即接口的请求方法;
Name:请求路径;
requests:当前已完成的请求数量;
fails:当前失败的数量;
Median:响应时间的中间值,即50%的响应时间在这个数值范围内,单位为毫秒;
Average:平均响应时间,单位为毫秒;
Min:最小响应时间,单位为毫秒;
Max:最大响应时间,单位为毫秒;
Content Size:所有请求的数据量,单位为字节;
reqs/sec:每秒钟处理请求的数量,即QPS;
QPS图信息
官方文档:
https://docs.locust.io/en/stable/what-is-locust.html
三、进阶使用
控制RPS
wait_time 是请求的间隔时间
用户数 是开启的协程数
RPS = 间隔 x 用户数,要求的RPS可以根据这个公式调整。
class UserBehavior(HttpUser):
wait_time = constant_throughput(0.5)
@task(1)
def get_ticket_user(self):
url = "https://apiv3.shanbay.com/tickethub/ticket/user?code=2021-06-cet"
cookies = {"auth_token": random.choice(token_list)}
self.client.get(url, cookies=cookies)
标签:task,请求,压测,Locust,locust,毫秒,UI,工具 来源: https://www.cnblogs.com/goldsunshine/p/16607745.html