locust简介
locust是一个基于python的开源的性能测试框架,一个易于使用的基于事件的分布式用户负载工具。
优点是并发高,即一个locust节点也可以在一个进程中支持数千并发用户,资源占用小,不使用回调,通过gevent使用轻量级过程。缺点是报告简陋,如果想得到详细的报告内容则需要使用人员进行定制的二次开发,不支持资源监控。
Python通过yield提供了对协程的基本支持,但是不完全。而第三方的gevent为Python提供了比较完善的协程支持。gevent是第三方库,通过greenlet实现协程,其基本思想是:
当一个greenlet遇到IO操作时,比如访问网络,就自动切换到其他的greenlet,等到IO操作完成,再在适当的时候切换回来继续执行。由于IO操作非常耗时,经常使程序处于等待状态,有了gevent为我们自动切换协程,就保证总有greenlet在运行,而不是等待IO。
注意:使用gevent,可以获得极高的并发性能,但gevent只能在Unix/Linux下运行,在Windows下不保证正常安装和运行。
locust与jmeter3的区别
工具 | 区别 |
---|---|
jmeter | 需要在UI界面上通过选择组件来“编写”脚本,模拟的负载是线程绑定的,意味着模拟的每个用户,都需要一个单独的线程。单台负载机可模拟的负载数有限 |
locust | 通过编写简单易读的代码完成测试脚本,基于事件,同样配置下,单台负载机可模拟的负载数远超jmeter |
安装locust
前提:已经搭建安装好python环境,查看是否安装命令:python --version
1.1 安装locust,直接pip安装,打开终端输入:pip install locust
1.2 安装完毕后,验证是否安装成功的命令:locust --version
操作步骤
第一步:以下创建一个简单的demo程序进行测试,此处我将该程序命名为:locust file.py,并且放在D盘根目录下。
from locust import HttpUser,task
import logging
class point(HttpUser):
@task
def login(self):
logging.captureWarnings(True)
palyed2 = {"email": "org589", "password": "Abc12345"}
# https请求添加verify
response=self.client.post(f'/api/auth/login/',json=palyed2,verify=False)
# 断言
if response==200:
response.success()
else:
response.failure('Failed!')
# 在5-15秒区间内随机取值
wait_time = between(5, 15)
相关参数介绍如下:
①@task:是添加一个task的最简单的方式,相当于jmeter中的http sampler。如果使用的是@task(n),n代表的是weight,用于指定task执行的比率,也即权重。
②wait_time:User类中包含一个可选项wait_time,用于设置在每个task运行之后的等待时间,如果不设置wait_time,会马上执行下一个task。
更多详细参数可查阅:Locust使用方法_白布鸟的博客-CSDN博客_locust使用
第二步:直接进入文件所在路径,以下有3种方式进入该路径:
(1)windows打开cmd窗口,命令为:cd D:\locust file.py
(2)linux打开terminal
(3)pycharm等编码工具打开terminal,也即控制台
第三步:在terminal中输入以下命令,启动Locust服务。
(1)打开GUI界面
locust -f locustfile.py locust -f locustfile.py --host=https://xxx.com
--host:被测试的url
通过浏览器访问localhost:8089,即可通过简易的web界面输入一些目标测试参数,并执行测试,实时展示相关测试结果。
执行测试完毕后,结果展示如下:
(2)无GUI界面
locust -f locustfile.py --headless -u 100 -r 10 -t 10s --csv=result --html=report.html
--headless 表示不启动界面
-u [数量] 设置虚拟用户数
-r [时间] 每秒钟启动虚拟用户数
-t [时间] 设置测试多长时间
----秒,数字后面加上 s ,例如 10s
----分钟,数字后面加上 m,例如 1m
----小时,数字后面加上 h,例如 1h
--csv:保存csv报告,默认会保存4个,如下图
--html:保存HTML格式报告