locust——python性能测试模块

一般的软件性能测试都是使用专属的工具来进行,类似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+端口即可;


locust——python性能测试模块_第1张图片

Number of users to simulate:设置模拟的用户总数

Hatch rate (users spawned/second):每秒启动的虚拟用户数

Start swarming:执行locust脚本


指标就是这些个,模块如下:

Statistics:类似于jmeter中Listen的聚合报告;

Charts:测试结果变化趋势的曲线展示图,分别为每秒完成的请求数(RPS)、响应时间、不同时间的虚拟用户数;

Failures:失败请求的展示界面;

Exceptions:异常请求的展示界面;

Download Data:测试数据下载模块

你可能感兴趣的:(locust——python性能测试模块)