Locust介绍
1.简介
讨论性能测试工具,首先我们一定会想到LoadRunner和Jmeter。LoadRunner是HP公司研发的商业性能测试工具,其功能强大,使用复杂,市场面使用较广。Jmeter是基于Java开发的开源性能测试工具,功能丰富,我们往往习惯将它作为接口测试的工具,但实际上它也能满足绝大多数的的性能测试需求,也具有很大的市场占有率。
相比于上面的两款工具,Locust只能算一个“小弟”,它面世的时间并不算长,甚至连笔者在写这本书时百度百科都没有相应的词条,但这并不影响它的发展,对于开源爱好者或者Python爱好者,这都是一款非常值得探索的工具。
Locust翻译为中文是“蝗虫”的意思,图X-X中展现了浩浩荡荡蝗虫大军过境时的场景。而Locust工具像蝗虫般对系统发起成千上万的请求,以测试系统能否在高并发下正常运行。
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工具监控访问首页的请求,如下图。
除了请求的地址外,我们还可以看到这是一个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的性能测试正是基于此页面启动的。
(1)Number of users to simulate:表示设置的模拟用户数量,即多少用户运行。
(2)Hatch rate:表示每秒产生的虚拟用户数,即虚拟用户增长的速度。
点击“Start swarming”,开始执行。
3.测试数据
在执行过程中,Locust实时的更新了一些图表来展示测试数据。
(1)Statistics:概要统计,以表格的形式展示各项数值,包括请求成功数、失败数、响应时间的中间值、平均值、最小值、最大值、响应大小、每秒响应数。
(2)Charts:以图表的形式展示指标的变化轨迹,包括每秒的总请求数、请求平均响应时间、虚拟用户数,清晰直观,易于分析。
(3)Failures:失败请求的详细信息。
(4)Exceptions:运行过程中的异常信息,可用于脚本的调试,使性能测试正常执行。这里脚本正确没有异常信息输出。
(5)Download Data:下载测试数据文件,以便于进行综合的对比分析。
为了答谢大家对蜗牛学院的支持,蜗牛学院将会定期对大家免费发放干货,敬请关注蜗牛学院的官方微信。