Locust:简介和基本用法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Locust:简介和基本⽤法
我个⼈在性能测试⼯作中,负载⽣成⼯具使⽤的⼤多都是jmeter,之前学习python时顺带了解过python开源的性能测试框架locust。

这篇博客,简单介绍下locust的使⽤⽅法,仅供参考。

官⽅⽂档:
⼀、认识Locust
1、定义
Locust是⼀款易于使⽤的分布式负载测试⼯具,完全基于事件,即⼀个locust节点也可以在⼀个进程中⽀持数千并发⽤户,不使⽤回调,通过使⽤轻量级过程(即在⾃⼰的进程内运⾏)。

2、特点
①、不需要编写笨重的UI或者臃肿的XML代码,基于协程⽽不是回调,脚本编写简单易读;
②、有⼀个基于we简洁的HTML+JS的UI⽤户界⾯,可以实时显⽰相关的测试结果;
③、⽀持分布式测试,⽤户界⾯基于⽹络,因此具有跨平台且易于扩展的特点;
④、所有繁琐的I / O和协同程序都被委托给gevent,替代其他⼯具的局限性;
3、locust与jmeter的区别
⼯具区别
jmeter需要在UI界⾯上通过选择组件来“编写”脚本,模拟的负载是线程绑定的,意味着模拟的每个⽤户,都需要⼀个单独的线程。

单台负载机可模拟的负载数有限locust通过编写简单易读的代码完成测试脚本,基于事件,同样配置下,单台负载机可模拟的负载数远超jmeter
PS:但locust的局限性在于,⽬前其本⾝对测试过程的监控和测试结果展⽰,不如jmeter全⾯和详细,需要进⾏⼆次开发才能满⾜需求越来越复杂的性能测试需要。

⼆、安装Locust
1、⽀持的python版本:2.7、3.4、3.5、3.6;
2、Windows系统安装locust
①、直接通过 pip install locustio 命令安装;
②、通过为pyzmq、gevent和greenlet安装预先构建的⼆进制包,然后在找到⾮官⽅的预制包,下载.whl⽂件后,使⽤ pip install name-of-file.whl 命令安装;
安装成功后可以输⼊ pip show locust 命令查看是否安装成功,以及通过 locust -help 命令查看帮助信息。

PS:运⾏⼤规模测试时,建议在Linux机器上执⾏此操作,因为gevent在Windows下的性能很差。

三、⼀个简单的⽰例
locust的脚本⾥,模拟负载的请求和python的基本⼀样,⽰例如下:
1# coding=utf-8
2import requests
3from locust import HttpLocust,TaskSet,task
4from requests.packages.urllib3.exceptions import InsecureRequestWarning
5# 禁⽤安全请求警告
6 requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
7
8class MyBlogs(TaskSet):
9# 访问我的博客⾸页
10 @task(1)
11def get_blog(self):
12# 定义请求头
13 header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"}
14
15 req = self.client.get("/imyalost", headers=header, verify=False)
16if req.status_code == 200:
17print("success")
18else:
19print("fails")
20
21class websitUser(HttpLocust):
22 task_set = MyBlogs
23 min_wait = 3000 # 单位为毫秒
24 max_wait = 6000 # 单位为毫秒
25
26if__name__ == "__main__":
27import os
28 os.system("locust -f locusttest.py --host=https://")
脚本说明:
新建⼀个类MyBlogs(TaskSet),继承TaskSet,该类下⾯写需要请求的接⼝以及相关信息;
self.client调⽤get和post⽅法,和requests⼀样;
@task装饰该⽅法表⽰为⽤户⾏为,括号⾥⾯参数表⽰该⾏为的执⾏权重:数值越⼤,执⾏频率越⾼,不设置默认是1;
WebsiteUser()类⽤于设置⽣成负载的基本属性:
属性说明
task_set 指向定义了⽤户⾏为的类
min_wait 模拟负载的任务之间执⾏时的最⼩等待时间,单位为毫秒
max_wait 模拟负载的任务之间执⾏时的最⼤等待时间,单位为毫秒
PS:默认情况下,时间是在min_wait和max_wait之间随机选择,但是可以通过将wait_function设置为任意函数来使⽤任何⽤户定义的时间分布。

四、启动Locust
1、如果启动的locust⽂件名为locustfile.py并位于当前⼯作⽬录中,可以在编译器中直接运⾏该⽂件,或者通过cmd,执⾏如下命令:
locust --host=https://
2、如果Locust⽂件位于⼦⽬录下且名称不是locustfile.py,可以使⽤-f命令启动上⾯的⽰例locust⽂件:
locust -f testscript/locusttest.py --host=https://
3、如果要运⾏分布在多个进程中的Locust,通过指定-master以下内容来启动主进程:
locust -f testscript/locusttest.py --master --host=https://
4、如果要启动任意数量的从属进程,可以通过-salve命令来启动locust⽂件:
locust -f testscript/locusttest.py --salve --host=https://
5、如果要运⾏分布式Locust,必须在启动从机时指定主机(运⾏分布在单台机器上的Locust时不需要这样做,因为主机默认为127.0.0.1):
locust -f testscript/locusttest.py --slave --master-host=192.168.0.100 --host=https://
6、启动locust⽂件成功后,编译器控制台会显⽰如下信息:
[2018-10-09 01:01:44,727] IMYalost/INFO/locust.main: Starting web monitor at *:8089
[2018-10-09 01:01:44,729] IMYalost/INFO/locust.main: Starting Locust 0.8
PS:8089是该服务启动的端⼝号,如果是本地启动,可以直接在浏览器输⼊http://localhost:8089打开UI界⾯,如果是其他机器搭建locust服务,则输⼊该机器的IP+端⼝即可;
五、locust的UI界⾯
1、启动界⾯
Number of users to simulate:设置模拟的⽤户总数
Hatch rate (users spawned/second):每秒启动的虚拟⽤户数
Start swarming:执⾏locust脚本
2、测试结果界⾯
PS:点击STOP可以停⽌locust脚本运⾏:
Type:请求类型,即接⼝的请求⽅法;
Name:请求路径;
requests:当前已完成的请求数量;
fails:当前失败的数量;
Median:响应时间的中间值,即50%的响应时间在这个数值范围内,单位为毫秒;
Average:平均响应时间,单位为毫秒;
Min:最⼩响应时间,单位为毫秒;
Max:最⼤响应时间,单位为毫秒;
Content Size:所有请求的数据量,单位为字节;
reqs/sec:每秒钟处理请求的数量,即QPS;
3、各模块说明
New test:点击该按钮可对模拟的总虚拟⽤户数和每秒启动的虚拟⽤户数进⾏编辑;
Statistics:类似于jmeter中Listen的聚合报告;
Charts:测试结果变化趋势的曲线展⽰图,分别为每秒完成的请求数(RPS)、响应时间、不同时间的虚拟⽤户数;Failures:失败请求的展⽰界⾯;
Exceptions:异常请求的展⽰界⾯;
Download Data:测试数据下载模块,提供三种类型的CSV格式的下载,分别是:Statistics、responsetime、exceptions;以上即为locust的介绍和简单使⽤以及说明,更多详细的内容请参考官⽅⽂档。

相关文档
最新文档