3.1.3 使用Locust完成性能测试
上面讲了这么多Locust的优点,那么如何开始使用Locust呢?首先要保证个人计算机上已安装3.x系列的某个Python版本并且已经配置好,然后通过代码清单3-2所示的命令安装Locust。
代码清单3-2
Locust提供了很多开源的依赖库,下面看看具体都有哪些。从网站下载Locust的代码,将代码复制到本地后,打开setup.py文件,其内容如代码清单3-3所示。
代码清单3-3
Locust使用了以下开源的依赖库。
Gevent:一个基于协程的Python网络库,其本身是对greenlet的高级封装,greenlet则封装了libevent事件循环的高层并发API。Locust利用Gevent实现了协程机制。
Flask:一个使用Python编写的轻量级Web应用框架。Locust利用Flask实现了UI的控制台设置。
requests:Locust使用requests库实现了对HTTP的封装。
msgpack:一种快速、紧凑的二进制序列化格式,适用于类似于JSON格式的数据。
six:用于提供一些简单的工具来封装 Python 2和Python 3之间的差异性。
Pyzmq:用来支持Locust的分布式运行。
Locust的优势这么明显,那么如何开始使用Locust进行性能测试呢?Locust是纯Python驱动的性能测试框架,因此只要使用Python完成接口测试脚本的编写,就可以快速将接口测试脚本转换成Locust支持的性能测试脚本并完成性能测试工作了。下面以访问Battle系统的首页为例,建立Locust性能测试脚本,如代码清单3-4所示。
代码清单3-4
在上述代码中,IndexTask类继承自TaskSet类,主要用来描述虚拟用户的行为,里面包含不同任务对应的不同测试用例。index()方法表示测试用例,可通过@task装饰器将其描述成任务。在测试用例中,通过client.get()方法完成HTTP下GET请求的访问,传入的参数是相对路径。测试脚本访问的是Battle系统的首页,因此这里传入的参数是“'/'”。WebSiteUser类用于设置测试场景。该类的成员如下。
tasks:指向定义的用户行为类。
min_wait:执行事务之间用户等待时间的下限(单位是毫秒)。
max_wait:执行事务之间用户等待时间的上限(单位是毫秒)。
host:指定要访问的根网址。
Locust提供了两种启动性能场景的方法。第一种是通过Web UI启动性能场景。首先通过Flask启动一个Web程序,然后通过UI设置启动测试。输入代码清单3-5所示的启动命令(可在命令行窗口中输入)。
代码清单3-5
其中两个选项的作用如下。
-f用于指定测试脚本。
--host用于指定被测应用的URL。
输入启动命令后,若出现以下信息,则表示启动成功。
在浏览器中输入http://127.0.0.1:8089,访问Locust的场景设置UI。图3-5显示了当前场景下所要测试的URL。
图3-5中部分选项的含义如下。
图3-5 Locust场景的设置
Number of users(peak concurrency):想要模拟的用户数。
Spawn rate(users started/second): 每秒启动的虚拟用户数。
单击Start swarming按钮,即可进入图3-6所示的运行界面,然后就可以开始测试了。
图3-6 Locust中的运行界面