如何用python做六色风车_python压测工具Locust

news/2025/2/25 19:06:21

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 classMyTasks(TaskSet):4 '''

5 创建测试任务,需要继承TaskSet6 可以添加多个测试任务7 '''

8 #每个测试任务,往往会以实例方法的形式呈现

9 #同时需要使用task装饰器来装饰任务

10 @task11 defone_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 classRunTasks(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 importHttpLocust, TaskSet, task

​classAdminLoadTest(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") #子系统的退出接口

​defon_start(self):'''当任何一个task调度执行前,on_start实例方法会被调用

先登录

:return:'''self.login()

​defon_stop(self):'''当任何一个task调度执行之后,on_stop实例方法会被调用

:return:'''self.logout()

@task#task装饰器来装饰任务

defadmin_index(self):'''对后台主页进行压测

:return:'''self.client.get("http://ip:port/portal/")

​classRunLoadTests(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左右

响应时间随着用户量增加,持续上升

没有失败和异常的请求

总结:

locust用来做压测工具还是挺不错了,因为它单机能模拟并发量确实是太高了(采用的是协程的方式模拟并发),初次之外,locust还支持分布式,这样并发量就进一步提升了。由于Locust的缺点也显而易见,他没有友好的性能监控页面,没有任何关联,参数化,检查点之类的定义,所以locust单独不适合做完整的性能测试,当然如果能结合python的其他的库,也应该可以解决。有兴趣的小伙伴可以研究研究...


http://www.niftyadmin.cn/n/712662.html

相关文章

斐讯k1潘多拉专版固件_斐讯路由器K2刷机-斐讯k1-k2华硕及潘多拉固件下载__飞翔下载...

斐讯K2最近在路由器领域也算是小有名气了,但跟其他比较火的路由器不同,这款路由器从产品本身来说可以说是毫无亮点,最大的亮点在于其“免费”的特性。既然是免费的,硬件也是很牛掰!那么不要白不要,PO主在同…

linux配置防火墙 Centos7下 添加 端口白名单

最近在阿里云服务器centos7上部署项目 要开启8484端口 , CentOS 7默认使用的是firewall作为防火墙 在firewall下开启端口白名单 1.查看下防火墙的状态:systemctl status firewalld 需要开启防火墙 systemctl start firewalld.service firewall-cmd --z…

HDU 2018:母牛的故事(动态规划)

题目传送门&#xff1a;HDUOJ 2018&#xff1a;母牛的故事 动态规划&#xff1a;小牛在出生后第四年成为大牛就可产仔了&#xff0c;所以说三年前就已经存在的牛&#xff0c;在三年后&#xff08;也就是在今年&#xff09;一定会产仔。 #include <iostream> #include &…

Java——泛型(概念理解+应用举例)

1.泛型的概念 泛型是一种末知的数据类型&#xff0c;当我们不知道使用什么数据类型的时候&#xff0c;可以使用泛型。泛型也可以看成是一个变量用来接收数据类型。E e&#xff1a;Element元素&#xff0c;T t&#xff1a;Type类型。 集合中可以存储任意类型的对象元素&#xff…

让视频压制更简单

又一次不务正业了。 一直待在一个美剧字幕组做后期压制工作&#xff0c;也经常被问到“要怎么压制&#xff1f;”这种即使用一二十句话都无法说清的问题。 因为自己经历过&#xff0c;深知软件安装、参数配置之痛&#xff0c;当翻阅了数十篇资料都无法配置成功&#xff0c;气到…

微信小程序下拉刷新 并重新加载数据

1.在json页面配置&#xff1a; {"enablePullDownRefresh": true } 2.调用刷新函数 onPullDownRefresh: function() { wx.showNavigationBarLoading() //在标题栏中显示加载this.updateBlogs() //重新加载数据 //模拟加载 1秒setTimeout(function () {// completewx…

jdbctemplate 添加_SpringBoot2.x系列教程41--整合使用JdbcTemplate

SpringBoot2.x系列教程41--整合使用JdbcTemplate作者&#xff1a;一一哥我在上一章节中&#xff0c;重点讲解了Spring中关于DataSource的一些理论知识点&#xff0c;接下来本章节我主要是带大家学习JdbcTemplate的使用。一. JdbcTemplate1. JdbcTemplate简介JDBC虽然能够满足大…

HDU 2014:超级楼梯(动态规划)

题目传送门&#xff1a;HDU 2014&#xff1a;超级楼梯 简单动态规划&#xff08;斐波那契数列&#xff09; #include <iostream> using namespace std;int main() {int cases, n, g, f;cin >> cases;while (cases--) {cin >> n;g 0; f 1;while (n--) {f …