python压测工具Locust
python压测工具Locust
Locust介绍
Locust作为基于Python语言的性能测试框架。
其优点在于他的并发量可以实现单机10倍于LoadRunner和Jmeter工具。他的工作原理为协程并发,也就是gevent库。
Locust的缺点也显而易见,他没有友好的性能监控页面,没有任何关联,参数化,检查点之类的定义。当然基于python这些都不是问题,如果简单的使用,用来做压测是最合适不过了
Locust安装
1、安装了python,并加入了环境变量:pip intsall locustio
2、Pycharm内部直接import Locust,如图:
Locust实例_1(访问百度首页)
代码:
from locust import HttpLocust, TaskSet, task #导入需要引用的类
class MyTasks(TaskSet):
'''
创建测试任务,需要继承TaskSet
可以添加多个测试任务
'''
#每个测试任务,往往会以实例方法的形式呈现
#同时需要使用task装饰器来装饰任务
@task
def one_task(self):
print("执行第一个测试任务")
self.client.get("/") #client封装的requests,所以requests的请求方法都能调用,括号内为子路径,与class RunTasks(HttpLocust)中的host拼接,也可以直接写成self.clint.get("http://www.baidu.com/"),在class RunTasks(HttpLocust)就不需要指host了
class RunTasks(HttpLocust):
'''
创建运行测试类,需要继承HttpLocust父类
'''
task_set = MyTasks #指定测试任务类,使用task_set覆盖父类属性
min_wait = 2000 #模拟负载的任务之间执行时的最小等待时间,单位为毫秒
max_wait = 5000 #模拟负载的任务之间执行时的最大等待时间,单位为毫秒
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左右
响应时间随着用户量增加,持续上升
没有失败和异常的请求
总结:
locust用来做压测工具还是挺不错了,因为它单机能模拟并发量确实是太高了(采用的是协程的方式模拟并发),初次之外,locust还支持分布式,这样并发量就进一步提升了。由于Locust的缺点也显而易见,他没有友好的性能监控页面,没有任何关联,参数化,检查点之类的定义,所以locust单独不适合做完整的性能测试,当然如果能结合python的其他的库,也应该可以解决。有兴趣的小伙伴可以研究研究...
python压测工具Locust的更多相关文章
- 一键压测工具改造(locust)
本文内容来自“天外归云”大神,原文链接http://www.cnblogs.com/LanTianYou/p/5987741.html,目前只对启动脚本做了一些改造,应该说是,不适用powershel ...
- python服务端多进程压测工具
本文描述一个python实现的多进程压测工具,这个压测工具的特点如下: 多进程 在大多数情况下,压测一般适用于IO密集型场景(如访问接口并等待返回),在这种场景下多线程多进程的区分并不明显(详情请参见 ...
- 压测工具Locuse的使用
我是听朋友提起的"蝗虫"(Locust),然而她不想用python,我就拿来试一试~ http的 各种压测工具也已经太多了,所以主要是试试locust在当前比较流行的rpc协议上的 ...
- Http压测工具wrk使用指南
用过了很多压测工具,却一直没找到中意的那款.最近试了wrk感觉不错,写下这份使用指南给自己备忘用,如果能帮到你,那也很好. 安装 wrk支持大多数类UNIX系统,不支持windows.需要操作系统支持 ...
- web压测工具http_load原理分析
一.前言 http_load是一款测试web服务器性能的开源工具,从下面的网址可以下载到最新版本的http_load: http://www.acme.com/software/http_load/ ...
- [软件测试]网站压测工具Webbench源码分析
一.我与webbench二三事 Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能.Webbench ...
- Http压测工具wrk使用指南【转】
用过了很多压测工具,却一直没找到中意的那款.最近试了wrk感觉不错,写下这份使用指南给自己备忘用,如果能帮到你,那也很好. 安装 wrk支持大多数类UNIX系统,不支持windows.需要操作系统支持 ...
- 内存压测工具Memtester
在做压力测试时,发现一个内存压测工具Memtester,可以随意设置内存占用大小,非常方便 下载地址:http://pyropus.ca/software/memtester/old-versions ...
- Http 压测工具 wrk 基本使用
Http 压测工具 wrk 基本使用 Intro wrk 是一款现代HTTP基准测试工具,能够在单个多核CPU上运行时产生显着负载.它将多线程设计与可扩展事件通知系统(如epoll和kqueue)结合 ...
随机推荐
- Leetcode之二分法专题-278. 第一个错误的版本(First Bad Version)
Leetcode之二分法专题-278. 第一个错误的版本(First Bad Version) 你是产品经理,目前正在带领一个团队开发新的产品.不幸的是,你的产品的最新版本没有通过质量检测.由于每个版 ...
- Spring依赖注入浅析
1. 概念理解 依赖注入 谁注入谁? 依赖对象注入IoC容器. 控制反转 谁控制谁?控制什么? IoC容器控制对象,控制依赖对象的创建与注入. 为什么称为反转?创建.注入对象的控制权由程序员的主观意愿 ...
- Python——常用模块(time/datetime, random, os, shutil, json/pickcle, collections, hashlib/hmac, contextlib)
1.time/datetime 这两个模块是与时间相关的模块,Python中通常用三种方式表示时间: #时间戳(timestamp):表示的是从1970年1月1日00:00:00开始按秒计算的偏移量. ...
- 从零开始开发IM(即时通讯)服务端
好消息:IM1.0.0版本已经上线啦,支持特性: 私聊发送文本/文件 已发送/已送达/已读回执 支持使用ldap登录 支持接入外部的登录认证系统 提供客户端jar包,方便客户端开发 github链接: ...
- java虚拟机10.内存模型与线程
多任务处理在现代计算机操作系统中是一项必备的功能,让计算机同时去做几件事情,不仅是因为计算机的运算能力强大了,更重要的原因是计算机的运算速度与它的存储和通信子系统速度的差距太大,大量的时间都花费在磁盘 ...
- 【转载】Windows api数据类型
最近在接触windows api函数,看到了很多之前没有看到过的数据类型,发现“个人图书馆”中有个帖子说的挺详细的,特地搬运过来 Windows 数据类型 Delphi 数据类型 描述 LPSTR P ...
- BZOJ4034 [HAOI2015]树上操作+DFS序+线段树
参考:https://www.cnblogs.com/liyinggang/p/5965981.html 题意:是一个数据结构题,树上的,用dfs序,变成线性的: 思路:对于每一个节点x,记录其DFS ...
- 逆序对 线段树&树状数组 (重制版)
逆序对的定义:长度为n的数组a,求满足i<j时a[i]>a[j]条件的数对个数. 第一次接触这种问题的人可能是更先想到的是n^2去暴力数前面有几个比他大的数. int main() { i ...
- 背包形动态规划 fjutoj1380 Piggy-Bank
Piggy-Bank TimeLimit: 2000/1000 MS (Java/Others) MemoryLimit: 65536/32768 K (Java/Others) 64-bit in ...
- 玲珑杯 1137 - Sin your life(数学)
题目链接:http://www.ifrog.cc/acm/problem/1137 题解:设m=n-z sin(x)+sin(y)=sin(m-y)+sin(y)利用公式得最大值为sqrt(sin(m ...