一般的软件性能测试都是使用专属的工具来进行,类似jmeter、LR等工具功能齐全且成熟。今天学习了python的一个性能测试模块locust,不用依赖UI界面进行配置,全程代码岂不是更爽。况且它不像jmeter模拟的负载是线程绑定的,最重要的一点就是,性能测试的原则就是尽可能的减少工具本身对于系统的影响,这一点locust无异于能更好的减少影响。当然创建过程对于新手而言是相对繁琐的。
安装方法不做陈述,python大部分都是使用的pycharm,安装三方库不要太简单。
直接贴代码看注释就可简单了解整个配置,想知道更多要养成command+左键看文档的习惯,毕竟有很多的函数方法会被弃用。
from locustimport HttpLocust,TaskSet,task,between
class UserBehavior(TaskSet):
def one_start(self):
#可在此处初始化前置任务,每一次任务调用一次
pass
#任务
#@task装饰该方法表示为用户行为,括号里面参数表示该行为的执行权重:数值越大,执行频率越高,不设置默认是1;
@task(1)
def getTagVals(self):
#request_params 配置请求头
#request_json 配置请求参数
request_url ='https://ratest-cp.csc108.com/advisor/ra/znjy/api/v1/graphql'
request_params = {
'User-Agent':"Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, "
"like Gecko) Chrome/80.0.3987.163 Mobile Safari/537.36",
'content-type':'application/json',
'Authorization':'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6IkExNUM4ODA1NjY3ODFERTY3RjkyRjM4REM0MDI3NDVDRUFBNTA0M0EyMTY0NkY2NjlFMzE5MUFDMjM5MTQzQTciLCJzY29wZXMiOlsiXHU4OGM1XHU1OTA3Olx1NjdlNVx1NzcwYlx1NGVkNlx1NGViYSIsIlx1ODhjNVx1NTkwNzpcdThiYTJcdTk2MDUiLCJcdTg4YzVcdTU5MDc6XHU2N2U1XHU3NzBiIiwiXHU4OGM1XHU1OTA3Olx1NTIxYlx1NWVmYSIsIlx1ODhjNVx1NTkwNzpcdTRmZWVcdTY1MzkiLCJcdTY3M2FcdTU2NjhcdTRlYmE6XHU2N2U1XHU3NzBiXHU0ZWQ2XHU0ZWJhIiwiXHU2NzNhXHU1NjY4XHU0ZWJhOlx1OGJhMlx1OTYwNSIsIlx1NjczYVx1NTY2OFx1NGViYTpcdTY3ZTVcdTc3MGIiLCJcdTY3M2FcdTU2NjhcdTRlYmE6XHU1MjFiXHU1ZWZhIiwiXHU2NzNhXHU1NjY4XHU0ZWJhOlx1NGZlZVx1NjUzOSIsIlx1N2EzYlx1ODM0OVx1NGViYVx1NjU3MFx1NjM2ZTpcdTY3ZTVcdTc3MGIiLCJcdTUzMDU6XHU2N2U1XHU3NzBiIiwiXHU1MzA1Olx1OGJhMlx1OTYwNSIsIlx1NTMwNTpcdTUyMWJcdTVlZmEiLCJcdTUzMDU6XHU0ZmVlXHU2NTM5IiwiXHU2Mjk1XHU4ZDQ0XHU1MzlmXHU1MjE5Olx1NjdlNVx1NzcwYiIsIlx1NzUyOFx1NjIzNzpcdTY3ZTVcdTc3MGIiLCJcdTY3NDNcdTk2NTA6XHU2N2U1XHU3NzBiIl0sImV4cCI6MTU4NzM1MDk4OCwic3ViIjoiYWNjZXNzIn0.y2dCUd1i8HIQjNiAileI3oEehzvJvS52YPiXQFf_4tg'
}
request_json = {"query":"{weeklyList{startDate endDate}}","variables":None,"operationName":None}
response =self.client.post(url=request_url,params=request_params,json=request_json)
if response.status_code !=200:
print('异常!请求返回码:',response.status_code)
if response.status_code ==200:
print('成功!')
# 性能测试配置
class MobileUserLocust(HttpLocust):
#task_set 指向定义了用户行为的类
#wait_time 模拟负载的任务之间执行时的时间范围
task_set = UserBehavior
#host = '' #待测试的ip或者域名
wait_time = between(100,3000)
以上配置即可,自行修改
启动locust
1、如果启动的locust文件名为locustfile.py并位于当前工作目录中,可以在编译器中直接运行该文件,或者通过cmd,执行如下命令:
locust --host=‘请求url’
2、如果Locust文件位于子目录下且名称不是locustfile.py,可以使用-f命令启动上面的示例locust文件:
locust -f ‘文件名‘.py --host=‘请求url’
3、如果要运行分布在多个进程中的Locust,通过指定-master以下内容来启动主进程 :
locust -f testscript/locusttest.py --master --host=‘请求url’
4、如果要启动任意数量的从属进程,可以通过-salve命令来启动locust文件:
locust -f testscript/locusttest.py --salve --host=‘请求url’
5、如果要运行分布式Locust,必须在启动从机时指定主机(运行分布在单台机器上的Locust时不需要这样做,因为主机默认为127.0.0.1):
locust -f testscript/locusttest.py --slave --master-host=192.168.0.100 --host=‘请求url’
6、启动locust文件成功后,编译器控制台会显示如下信息:
[2020-04-09 01:01:44,727] IMYalost/INFO/locust.main: Starting web monitor at *:8089
[2020-04-09 01:01:44,729] IMYalost/INFO/locust.main: Starting Locust 0.8
PS:8089是该服务启动的端口号,如果是本地启动,可以直接在浏览器输入http://localhost:8089打开UI界面,如果是其他机器搭建locust服务,则输入该机器的IP+端口即可;
Number of users to simulate:设置模拟的用户总数
Hatch rate (users spawned/second):每秒启动的虚拟用户数
Start swarming:执行locust脚本
指标就是这些个,模块如下:
Statistics:类似于jmeter中Listen的聚合报告;
Charts:测试结果变化趋势的曲线展示图,分别为每秒完成的请求数(RPS)、响应时间、不同时间的虚拟用户数;
Failures:失败请求的展示界面;
Exceptions:异常请求的展示界面;
Download Data:测试数据下载模块