测试技术之Locust性能测试学习总结
凌雪 2018-11-07 来源 :网络 阅读 1081 评论 0

摘要:本文将带你了解测试技术Locust性能测试学习总结,希望对大家学测试技术有所帮助。


         本文将带你了解测试技术Locust性能测试学习总结,希望对大家学测试技术有所帮助。


 

  Locust是一个用于可扩展的,分布式的,性能测试的,开源的,用Python编写框架/工具,它非常容易使用,也非常好学。它的主要思想就是模拟一群用户将访问你的网站。每个用户的行为由你编写的python代码定义,同时可以从Web界面中实时观察到用户的行为。

  Locust完全是事件驱动的,因此在单台机器上能够支持几千并发用户访问。与其它许多基于事件的应用相比,Locust并不使用回调,而是使用gevent,而gevent是基于协程的,可以用同步的方式来编写异步执行的代码。每个用户实际上运行在自己的greenlet中。

  特点:

  ①用简单python语言编写测试脚本,非常简单轻便。不需要笨重的UI和臃肿的xml代码,基于协同而非回调。

  ②分布式的,可扩展性的,可模拟上百万用户。Locust支持多机器的性能测试,每台机器可以模拟上千用户,当然这可以控制的,

  ③Locust有一个整洁的HTML+JS的用户界面,实时显示相关测试细节。由于用户界面是基于网络的,它是跨平台的和容易扩展。

  ④可以测试任何系统,尽管Locust是基于网站的,但它几乎可以测试任何系统,只要你写一个客户端。

  安装:

  Locust可以通过pip或者easy_install安装:

  pip   install locustio

  或者

  easy_install   locustio

  安装完Locust后,shell命令locust就可以使用了,可以查看locust命令有哪些选项:

  (注意,要确保你安装好了python,版本必须是2.6以上的,但不能是3.0版以上的,3.0以上的改动好大,还没法兼容)

  locust   --help

  如果打算以分布式模式运行Locust,建议同时安装pyzmq(一种通信队列):

  pip   install pyzmq

  或者

  easy_install   pyzmq

  在windows上安装:

  下载二进制安装包,然后按照提示安装

  网址://www.lfd.uci.edu/~gohlke/pythonlibs/

  需要注意的是,当需要大规模的测试时,安装在Linux上的性能比windows上的好。

  在苹果电脑上安装:

  ①先安装Homebrew

  ②安装libevent

  brew   install   libevent

  ③参照在linux上的安装过程。

  增加打开文件限制的最大数量:

  在每一个HTTP连接的机器上打开一个新文件(技术文件描述符)。操作系统可以设置一个可以打开的文件的最大数量的下限。如果限制小于模拟用户的数量,在测试时,会发生故障。增加操作系统的默认最大数量的文件限制到一个数字高于模拟用户数的数量,才能达到你想要的测试,具体操作参考本机的操作系统。

  快速启动:

  下面是一个简单的列子,保持为python文件,文件名随意

  from   locust import HttpLocust, TaskSet

  def   login(l):

  l.client.post("/login",   {"username":"ellen_key",   "password":"education"})

  def index(l):

  l.client.get("/")

  def   profile(l):

  l.client.get("/profile")

  class   UserBehavior(TaskSet):

  tasks = {index:2,   profile:1}

  def   on_start(self):

  login(self)

  class   WebsiteUser(HttpLocust):

  task_set =   UserBehavior

  min_wait=5000

  max_wait=9000

   


  这个几行短短的代码就是一个完成的测试脚本。定义了两个类,一个User   Behavior类,继承了TaskSet类,用于定义测试任务的,给属性tasks增加了两个任务,index函数和profile函数,这些人物被执行,然后返回执行时间,正常情况下,是在下面的最小时间和最大时间之间,从on_start   开始,就像java的main函数一样,是任务开口,然后随机的挑选任务,通过client(相当于一个Httpsession)的方法执行http请求,但是会按照设置的比率来执行。Tasks属性把上面定义的函数变成任务,它是一个dict类型。相当于java的map类型。

  一个WebsiteUser类,继承了HttpLocust类,这个类用于代表用户,生成一个实例,为每个每个模拟用户,发送http请求和设置测试参数,Task_set属性,它是唯一必须要有的,它指向Task   Set类,定义用户的行为,请求等待最小时间min_wait和请求等待最大时间max_wait属性,单位是毫秒。,weight属性指定用户的执行的比率,host属性是测试的应用的网址。

  注意最大时间和最小时间属性可以在locust类中定义,也可以在task   set类中定义,完全是一样的

  下面是一种更简单的定义task的方法,用@task   构造器。下面的代码和上面的效果是一样的:但这是顺序执行任务的,第一种是随机挑选任务

  from   locust import HttpLocust, TaskSet, task

  class   UserBehavior(TaskSet):

  def   on_start(self):

  """ on_start is called   when a Locust start before any task is scheduled   """

  self.login()

  def   login(self):

  self.client.post("/login",   {"username":"ellen_key",   "password":"education"})

  @task(2)

  def   index(self):

  self.client.get("/")

  @task(1)

  def   profile(self):

  self.client.get("/profile")

  class   WebsiteUser(HttpLocust):

  task_set =   UserBehavior

  min_wait=5000

  max_wait=9000

   


  TaskSet还可以嵌套:参考下面的代码

  第一种:

  class   ForumPage(TaskSet):

  @task(20)

  def   read_thread(self):

  pass

  @task(1)

  def   new_thread(self):

  pass

  @task(5)

  def   stop(self):

  self.interrupt()

  class   UserBehaviour(TaskSet):

  tasks =   {ForumPage:10}

  @task

  def   index(self):

  pass

   


  第一种需要注意的是interrupt这个函数,如果没有这个函数locust就会一直执行formpage这个任务,只有通过这个函数,才能跳出来。执行formpage之外的函数。

  第二种:

  class   MyTaskSet(TaskSet):

  @task

  class   SubTaskSet(TaskSet):

  @task

  def   my_task(self):

  pass

   


  运行Locust:

  locust   -f ../locust_files/上面的文件名.py   --host=//example.com

  代码存放地址                                 主机的名字和应用

  分布式多处理器的Locust运行:

  主处理器,负责分发任务的

  locust   -f ../locust_files/上面的文件名.py --master   --host=//example.com

  --master-port=8888(默认的是8080端口)

  从处理器,负责执行代码脚本的

  llocust   -f ../locust_files/上面的文件名.py --slave --master-host=192.168.0.100   --host=//example.com   --master-bind-host=8888

  打开Locust web 界面

  //127.0.0.1:8089

  由于example是在本地的,所以ip也是本地的

  需要输入模拟多少个用户数和每秒启动多少个用户,就是并发数

     




   
                   

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标软件测试之测试技术频道!

本文由 @凌雪 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程