基于Locust的性能测试脚本开发(一)
作者:强哥   类别:Python开发    日期:2019-03-28 18:26:44    阅读:2498 次   消耗积分:0 分

Locust介绍


1.简介


讨论性能测试工具,首先我们一定会想到LoadRunner和Jmeter。LoadRunner是HP公司研发的商业性能测试工具,其功能强大,使用复杂,市场面使用较广。Jmeter是基于Java开发的开源性能测试工具,功能丰富,我们往往习惯将它作为接口测试的工具,但实际上它也能满足绝大多数的的性能测试需求,也具有很大的市场占有率。


相比于上面的两款工具,Locust只能算一个“小弟”,它面世的时间并不算长,甚至连笔者在写这本书时百度百科都没有相应的词条,但这并不影响它的发展,对于开源爱好者或者Python爱好者,这都是一款非常值得探索的工具。


Locust翻译为中文是“蝗虫”的意思,图X-X中展现了浩浩荡荡蝗虫大军过境时的场景。而Locust工具像蝗虫般对系统发起成千上万的请求,以测试系统能否在高并发下正常运行。


20190328_181540_428.jpg

 

Locust官网称其为“A modern load testing framework”,它是一款开源的性能测试工具,完全基于Python开发,并采用了基于事件的处理机制,具有明显的特点。

(1)简单易学,可以快速基于Python开发脚本。

(2)开源免费。

(3)分布式执行。配置master和slave(主从机器),在多台机器上对系统持续发起请求。

(4)基于事件驱动。与其他工具使用进程和线程来模拟用户不同,Locust借助了gevent库对协程的支持,可以达到更高数量级的并发。

(5)不支持监控被测机,需要配合其他工具的辅助。


2.安装


Locust安装非常简单,打开命令行cmd,借助pip工具运行 “pip install locust”命令即可。经过系统分析收集相关的模块并进行自动安装,最后看到“Successfully”信息即可。


install locust

Collecting locust

...

...

Successfully installed locust-0.8


使用“Locust --version”命令查看版本信息,显示版本为Locust0.8。


[2018-05-30 20:39:11,325] FS6V6WNJF0VQTT3/INFO/stdout: Locust 0.8

[2018-05-30 20:39:11,325] FS6V6WNJF0VQTT3/INFO/stdout:


使用“Locust --help”命令查看帮助信息,这里列举出来Locust命令的基本语法和常用参数,比如“-H”是指被测系统的主机,“-P”是指Locust运行的端口等,后面我们会结合实例进行讲解。由于选项较多,这里只列出了一部分供参考,大家可以自己去查看Locust的其他选项。


Usage: locust [options] [LocustClass [LocustClass2 ... ]]

Options:

  -h, --help       show this help message and exit

  -H HOST, --host=HOST  Host to load test in the following format:

               http://10.21.32.33

  --web-host=WEB_HOST   Host to bind the web interface to. Defaults to '' (all interfaces)

  -P PORT, --port=PORT, --web-port=PORT

             Port on which to run web host

  -f LOCUSTFILE, --locustfile=LOCUSTFILE

     Python module file to import, e.g. '../other.py'.

     Default: locustfile

  ...

  ...

   -V, --version         show program's version number and exit


利用Locust测试首页


1.编写脚本


仍然选用蜗牛进销存作为性能测试的系统。使用HttpWatch工具监控访问首页的请求,如下图。

20190328_182130_281.png

 

除了请求的地址外,我们还可以看到这是一个GET请求,只有头没有正文。创建一个Python文件为GetIndex.py,编写测试脚本。


from locust import HttpLocust,TaskSet,task

class UserBehavior(TaskSet):

    @task

    def getIndex(self):

        self.client.get(' /')

class WebSite(HttpLocust):

    task_set = UserBehavior

    min_wait = 3000

    max_wait = 6000


代码量虽然非常少,却也真切的实现了首页的性能测试脚本的开发,下面对代码做相应的解释:(1)第1行代码需要从locust模块导入一些类和方法供后续使用。

(2)声明了一个类UserBehavior并继承于类TaskSet,顾名思义,主要是为了实现测试的业务操作。里面有一个被@task标注的测试方法getIndex(),对被测系统的根路径发送了一个Get请求。

(3)接下来又声明了一个类WebSite并继承于HttpLocust,用于设置执行测试的配置。task_set代表任务集,UserBehavior中所有被标注为@task的方法都会被当作测试任务执行;min_wait代表用户执行操作之间的最小等待时间,单位为毫秒;max_wait反之。


2.执行测试


首先需要打开cmd,进入到脚本的目录下,使用locust启动脚本,“-f”和“--host”分别代表运行的测试脚本和被测系统的地址。执行后的提示信息表示已经在8089端口启动了web监控器 和Locust。


locust -f GetIndex.py --host=http://localhost:8080/WoniuSales/

[2018-05-30 21:28:43,597] FS6V6WNJF0VQTT3/INFO/locust.main: Starting web monitor

 at *:8089

[2018-05-30 21:28:43,599] FS6V6WNJF0VQTT3/INFO/locust.main: Starting Locust 0.8

然后在浏览器上打开地址:http://localhost:8089,出现下图中的界面,基于Locust的性能测试正是基于此页面启动的。


20190328_181601_643.png


(1)Number of users to simulate:表示设置的模拟用户数量,即多少用户运行。

(2)Hatch rate:表示每秒产生的虚拟用户数,即虚拟用户增长的速度。

点击“Start swarming”,开始执行。


3.测试数据


在执行过程中,Locust实时的更新了一些图表来展示测试数据。

(1)Statistics:概要统计,以表格的形式展示各项数值,包括请求成功数、失败数、响应时间的中间值、平均值、最小值、最大值、响应大小、每秒响应数。

20190328_181610_102.png


(2)Charts:以图表的形式展示指标的变化轨迹,包括每秒的总请求数、请求平均响应时间、虚拟用户数,清晰直观,易于分析。


20190328_181620_541.png


(3)Failures:失败请求的详细信息。


20190328_181631_431.png


(4)Exceptions:运行过程中的异常信息,可用于脚本的调试,使性能测试正常执行。这里脚本正确没有异常信息输出。


20190328_181639_775.jpg


(5)Download Data:下载测试数据文件,以便于进行综合的对比分析。


20190328_181649_806.jpg






为了答谢大家对蜗牛学院的支持,蜗牛学院将会定期对大家免费发放干货,敬请关注蜗牛学院的官方微信。


20190320_095757_834.jpg


   
版权所有,转载本站文章请注明出处:蜗牛笔记, http://www.woniunote.com/article/282
上一篇: 西安校区第五期测试开发班全员就业,最高薪资11K,平均月薪6.2K
下一篇: 生命不息,战斗不止,小蜗牛,冲鸭~
提示:登录后添加有效评论可享受积分哦!
最新文章
    最多阅读
      特别推荐
      回到顶部