性能测试工具拓展篇之locust

发表于:2017-9-14 13:11

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:牛牛    来源:51Testing软件测试网采编

  性能测试工具
  基于python的性能测试工具-locust 
     现在有很多的性能测试工具,比如说我们熟悉的loadrunner、jmeter、ab、webbench等等,这些工具如果对一个没用过的朋友来说,学习起来比较不容易,但是如果你能看懂python代码,会写就更好了,就可用尝试一下今天的主角Locust,一款基于python的性能测试工具,它的优点是学习起来比较简单,功能完全自定制,使用比较灵活,支持分布式。
  NO.1 工具组成介绍
   所有的性能测试工具都至少包含这3块:
  1、压力产生器,也就是可以指定产生多大的压力,多少并发;
  2、数据统计,也就是结果的展示,要统计TPS是多少,响应时间多少等等,这些数据; 
  3、代理功能,代理功能呢说白了就一句话,分摊压力。
  比如说你压测的时候要用1000个并发,但是你的电脑(压力机)配置比较弱,只支持500并发,再大电脑就死掉了,完犊子,压测不了。那怎么办呢,就得分摊压力,再管你同事借一台电脑,俩电脑发压力,那就可以了,每个人的电脑上500个并发,人多好干活嘛,代理就是干这个的,把这个上面的压力分摊到别的电脑上。
  当然Locust这3个功能都是有的。
  NO.2 Locuse安装方法
  Locust是python的一个第三方模块,安装很简单,直接pip install locust即可,或者自己下载安装包,手动安装。安装完成后,就有locust命令,在命令行里面输入“locust --help”,有帮助信息就安装成功了。如下图:
  locust的官网是www.locust.io上面也有怎么安装和例子。
  NO.3 Locuse操作方法
  怎么用呢,很简单,只需要几行代码就可以实现,并且有漂亮的web界面,可以设置并发数,和查看结果。
  首先我们写几行简单的代码,写一个打开BestTest首页的脚本。
  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命令,在命令行里运行
  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代码如下:
  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就说这么多,是不是很简单呢,快去试试吧
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号