如今有不少的性能测试工具,好比说咱们熟悉的loadrunner、jmeter、ab、webbench等等,这些工具若是对一个没用过的朋友来讲,学习起来比较不容易,可是若是你能看懂python代码,会写就更好了,就可用尝试一下今天的主角Locust,一款基于python的性能测试工具,它的优势是学习起来比较简单,功能彻底自定制,使用比较灵活,支持分布式。python
全部的性能测试工具都至少包含这3块:web
一、压力产生器,也就是能够指定产生多大的压力,多少并发;sublime-text
二、数据统计,也就是结果的展现,要统计TPS是多少,响应时间多少等等,这些数据; 浏览器
三、代理功能,代理功能呢说白了就一句话,分摊压力。好比说你压测的时候要用1000个并发,可是你的电脑(压力机)配置比较弱,只支持500并发,再大电脑就死掉了,完犊子,压测不了。那怎么办呢,就得分摊压力,再管你同事借一台电脑,俩电脑发压力,那就能够了,每一个人的电脑上500个并发,人多好干活嘛,代理就是干这个的,把这个上面的压力分摊到别的电脑上。并发
固然Locust这3个功能都是有的。分布式
几大性能工具对比:函数
得分项:单机并发能力,Python,开源免费工具
掉分项:不支持资源监控,报告异常简单post
纸上得来终觉浅,始知此事须躬行。性能
Locust是python的一个第三方模块,安装很简单,直接pip install locust便可,或者本身下载安装包,手动安装。安装完成后,就有locust命令,在命令行里面输入 locust --help,有帮助信息就安装成功了。以下图:
locust的官网是 www.locust.io,上面也有怎么安装和例子。
怎么用呢,很简单,只须要几行代码就能够实现,而且有漂亮的web界面,能够设置并发数,和查看结果,首先咱们写几行简单的代码,写一个打开BestTest首页的脚本。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
from locust import HttpLocust, TaskSet, task
#HttpLocust 这个类的做用是用来发送http请求的
#TaskSet 这个类是定义用户行为的,至关于loadrunnerhttp协议的脚本,jmeter里面的http请求同样,要去干吗的
#task 这个task是一个装饰器,它用来把一个函数,装饰成一个任务,也能够指定他们的前后执行顺序
class BestTest(TaskSet):
#本身定义的类,继承TaskSet,也就是这个类是实现我们要去请求什么的
@task#用task装饰器把这个函数装饰成一个我们要执行的性能任务
def index(self):#这个函数里面定义的是我们要具体作的操做
self.client.get('/')#请求这个url里面的哪一个路径,若是是接口的话,就是哪一个接口
class BestTestIndexUser(HttpLocust):
#这个类继承了HttpLocust,表明每一个并发里面的每一个用户
task_set = BestTest #这个是每一个用户都去干什么,指定了BestTest这个类,它就会每一个用户去运行besttest这个类里面的方法
|
代码写好了,下面运行一下,看看结果,可是运行的时候不是像一个普通的python脚本同样运行了, 得使用locust命令,在命令行里运行
1
2
3
|
locust -f besttest.py --host=http://www.besttest.cn
#-f是指定一个python文件 后面跟上我们刚才写的python文件
#--host是你要访问哪一个网站,后面跟网站的url
|
这样就能够运行,运行完以后,就能够在浏览器里面打开locust的控制台了,locust的默认端口号是8089,运行完以后,访问的时候用ip:8090就能够访问了,以下图:
启动locust:
locust控制台页面:
开始测试后的页面:
tps图和响应时间图:
可是locust不像loadrunner和jmeter同样能够设置开始时间和结束时间,只能你本身点stop的时候中止测试,这一点比较烦,因此在使用过程当中仍是须要本身注意一下测试时间。
刚才上面写的例子是单个接口压测, 或者更说单场景的,若是想作混合场景的压测,好比说是一个业务流程,先登陆、而后下单、购物这样的怎么办呢?
只须要写多个task就能够了,也就是在类里面写多个函数,想谁想执行,标上数字就好了,1,2,3,4代码以下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
from locust import HttpLocust, TaskSet, task
class BestTest(TaskSet):
@task(1)#给task装饰器传一个参数,表明先访问首页
def index(self):#首页
self.client.get('/')
#发get请求
@task(2)
def login(self):#登陆
self.client.post('/login',{'username':'besttest','password':'123456'})
#发送post请求,第一个是路径,第二个这个接口的入参,帐号和密码
class BestTestIndexUser(HttpLocust):
#这个类继承了HttpLocust,表明每一个并发里面的每一个用户
task_set = BestTest #这个是每一个用户都去干什么,指定了BestTest这个类,它就会每一个用户去运行besttest这个类里面的方法
|
关于Locust就说这么多,是否是很简单呢,快去试试吧,有问题的小伙伴能够留言哦~