python压测工具Locust
Locust介绍
Locust作为基于Python语言的性能测试框架。
其优点在于他的并发量可以实现单机10倍于LoadRunner和Jmeter工具。他的工作原理为协程并发,也就是gevent库。
Locust的缺点也显而易见,他没有友好的性能监控页面,没有任何关联,参数化,检查点之类的定义。当然基于python这些都不是问题,如果简单的使用,用来做压测是最合适不过了
Locust安装
1、安装了python,并加入了环境变量:pip intsall locustio
2、Pycharm内部直接import Locust,如图:
Locust实例_1(访问百度首页)
代码:
1 from locust import HttpLocust, TaskSet, task #导入需要引用的类 2 3 class MyTasks(TaskSet): 4 ''' 5 创建测试任务,需要继承TaskSet 6 可以添加多个测试任务 7 ''' 8 #每个测试任务,往往会以实例方法的形式呈现 9 #同时需要使用task装饰器来装饰任务 10 @task 11 def one_task(self): 12 print("执行第一个测试任务") 13 self.client.get("/") #client封装的requests,所以requests的请求方法都能调用,括号内为子路径,与class RunTasks(HttpLocust)中的host拼接,也可以直接写成self.clint.get("http://www.baidu.com/"),在class RunTasks(HttpLocust)就不需要指host了 14 15 class RunTasks(HttpLocust): 16 ''' 17 创建运行测试类,需要继承HttpLocust父类 18 ''' 19 task_set = MyTasks #指定测试任务类,使用task_set覆盖父类属性 20 min_wait = 2000 #模拟负载的任务之间执行时的最小等待时间,单位为毫秒 21 max_wait = 5000 #模拟负载的任务之间执行时的最大等待时间,单位为毫秒 22 host = "http://www.baidu.com/" #进行压测的地
启动:
可以在cmd中启动,也可以直接在Pycharm的控制台中启动:locust -f locusttest2.py --web-host=127.0.0.1
-f 后面跟的是需要启动的.py文件,--web-host=127.0.0.1 是我们需要的前端页面展示的地方
启动之后可以在在浏览器中输入127.0.0.1:8089访问页面
开始执行:
统计页面
图图表页面:
第一个为:RPS分别为每秒完成的请求数
第二个为:响应时间
第三个为:不同时间的虚拟数
失败请求页面
异常请求展示页面
数据下载页面
Locust实例2(某子系统系统压测)
from locust import HttpLocust, TaskSet, task class AdminLoadTest(TaskSet): ''' 创建后台管理站点压测类,需要继承TaskSet 可以添加多个任务 ''' def login(self): #登录方法 ''' 登录实例方法 :return: ''' self.client.post("http://ip:port/ssoserver/login?service=http://ip:port/portal/cas", {'username': 'Y2R6Znc=','password':'MTIzNDU2NzhBYQ==', 'scope': '','lt':'_cFC77B10F-B8C6-39DF-8177-35D753A043FC_kF557C6AB-47D5-9530-3B1F-75EA4B339131', 'eventId': 'submit'})#这里先截包,找到登录接口,由于密码都进行的js加密处理,所已我们直接正确的用户名密码加密的结果传入。post的参数可以直接使用字典的形式传入 def logout(self): #退出登录方法 ''' 退出实例方法 :return: ''' self.client.get("http://ip:port/portal/logout") #子系统的退出接口 def on_start(self): ''' 当任何一个task调度执行前,on_start实例方法会被调用 先登录 :return: ''' self.login() def on_stop(self): ''' 当任何一个task调度执行之后,on_stop实例方法会被调用 :return: ''' self.logout() @task #task装饰器来装饰任务 def admin_index(self): ''' 对后台主页进行压测 :return: ''' self.client.get("http://ip:port/portal/") class RunLoadTests(HttpLocust): ''' 创建运行类 ''' task_set = AdminLoadTest min_wait = 200 #模拟负载的任务之间执行时的最小等待时间,单位为毫秒 max_wait = 500 #模拟负载的任务之间执行时的最大等待时间,单位为毫秒 #启动:locust -f test_load.py --web-host=127.0.0.1 --host=172.25.16.7
安装这样的参数,我们执行的动作为:一共1000个用户,每个用户在2~5秒内进行登录,访问首页,退出3个动作。用户数已没5秒一个的方式递增,我们来看看结果:
总览页面
图表页面:
针对这3个动作,子系统每秒能完成的请求数在150左右
响应时间随着用户量增加,持续上升
没有失败和异常的请求
总结: