1. Locust介绍
Locust是一个用于可扩展的,分布式的,性能测试的,开源的,用Python编写框架/工具,它非常容易使用,也非常好学。
它的主要思想就是模拟一群用户将访问你的网站。每个用户的行为由你编写的python代码定义,同时可以从Web界面中实时观察到用户的行为。
Locust完全是事件驱动的,因此在单台机器上能够支持几千并发用户访问。
与其它许多基于事件的应用相比,Locust并不使用回调,而是使用gevent,而gevent是基于协程的,可以用同步的方式来编写异步执行的代码。
每个用户实际上运行在自己的greenlet中。
2, 性能测试工具Jmeter和Locust对比
Jmeter 同样是非常有名的开源性能测试工具,功能也很完善,在本书中介绍了它作为接口测试工具的使用。但实际上,它是一个标准的性能测试工具。关于Jmeter相关的资料也非常丰富,它的官方文档也很完善。
Locust 同样是性能测试工具,虽然官方这样来描述它 “An open source load testing tool.” 。但其它和前面两个工具有着较大的不同。相比前面两个工具,功能上要差上不少,但它也并非优点全无。
Locust 完全基本 Python 编程语言,采用 Pure Python 描述测试脚本,并且 HTTP 请求完全基于 Requests 库。除了 HTTP/HTTPS 协议,Locust 也可以测试其它协议的系统,只需要采用Python调用对应的库进行请求描述即可。
LoadRunner 和 Jmeter 这类采用进程和线程的测试工具,都很难在单机上模拟出较高的并发压力。Locust 的并发机制摒弃了进程和线程,采用协程(gevent)的机制。协程避免了系统级资源调度,由此可以大幅提高单机的并发能力。
3,Locust安装
方式一:pip安装
pip install locust
方式二:从github安装
GitHub项目地址:https://github.com/locustio/locust/
将项目克隆下来,通过Python 执行 setup.py 文件
python setup.py install
安装要求:
install_requires=[“gevent>=1.1.2”, “flask>=0.10.1”, “requests>=2.9.1”, “msgpack-python>=0.4.2”, “six>=1.10.0”, “pyzmq==15.2.0”]
gevent 是在 Python 中实现协程的一个第三方库。协程,又称微线程(Coroutine)。使用gevent可以获得极高的并发性能。
flask 是 Python 的一个 Web 开发框架。
Requests 用来做 HTTP 接口测试。
msgpack-python 是一种快速、紧凑的二进制序列化格式,适用于类似JSON的数据。
six 提供了一些简单的工具用来封装 Python2 和 Python3 之间的差异性。
pyzmq 如果你打算运行 Locust 分布在多个进程/机器,建议你安装pyzmq。
4,Locust用法
(1)基本用法
main.py代码如下:
- from locust import HttpLocust, TaskSet, task
-
- class UserBehavior(TaskSet): ## UserBehavior类继承TaskSet类,用于描述用户行为。
- '''
- TaskSet类定义了每个用户的任务集合,测试任务开始后,每个 Locust 用户会从 TaskSet 中随机挑选一个任务执行,然后随机等待 HttpLocust 类中定义的 min_wait和 max_wait 之间的一段时间,执行下一个任务。
- '''
- @task() ## 使用@task装饰该方法为一个事务。client.get()用于指请求的路径
- def test_01_ph_baisc_info(self):
- resp = self.client.get('/v1/resources/acPowerChargers/PH-NIO-43010001-CS014992/basicInfos', timeout=30)
- assert resp.status_code == 200
-
- @task()
- def test_02_pc_baisc_info(self):
- resp = self.client.get('/v1/resources/dcPowerChargers/PC-SIM-0038725a-859f5c8f/basicInfos', timeout=30)
- assert resp.status_code == 200
-
-
- class PerfUser(HttpLocust):
- '''
- PerfUser类用于设置性能测试。
- task_set :指向一个定义的用户行为类。
- min_wait :执行事务之间用户等待时间的下界(单位:毫秒)。
- max_wait :执行事务之间用户等待时间的上界(单位:毫秒)。
- host: 如果是 Web 服务的测试,host 相当于是提供 URL 前缀的默认值,但是如果在命令行中指定了 --host 选项,则以命令行中指定的为准。如果不是 Web 服务测试,使用默认的 None 就好。
- stop_timeout: 设置 Locust 多少秒后超时,如果为 None ,则不会超时。
- weight: 一个Locust实例被挑选执行的权重,数值越大,执行频率越高。在一个 locustfile.py 文件中可以同时定义多个 HttpLocust 子类,然后分配他们的执行权重
- '''
- task_set = UserBehavior
- weight = 1
- min_wait = 3000
- max_wait = 6000
- stop_timeout = 5
- host = 'https://www.baidu.com'
复制代码运行代码: locust -f main.py --host=http://###douban.com.cn###
参数说明: -h, –help 查看帮助 -H HOST, –host=HOST 指定被测试的主机,采用以格式:http://10.21.32.33 –web-host=WEB_HOST 指定运行 Locust Web 页面的主机,默认为空 “。 -P PORT, –port=PORT, –web-port=PORT 指定 –web-host 的端口,默认是8089 -f LOCUSTFILE, –locustfile=LOCUSTFILE 指定运行 Locust 性能测试文件,默认为: locustfile.py –csv=CSVFILEBASE, –csv-base-name=CSVFILEBASE 以CSV格式存储当前请求测试数据。 –master Locust 分布式模式使用,当前节点为 master 节点。 –slave Locust 分布式模式使用,当前节点为 slave 节点。 –master-host=MASTER_HOST 分布式模式运行,设置 master 节点的主机或 IP 地址,只在与 –slave 节点一起运行时使用,默认为:127.0.0.1. –master-port=MASTER_PORT 分布式模式运行, 设置 master 节点的端口号,只在与 –slave 节点一起运行时使用,默认为:5557。注意,slave 节点也将连接到这个端口+1 上的 master 节点。 –master-bind-host=MASTER_BIND_HOST Interfaces (hostname, ip) that locust master should bind to. Only used when running with –master. Defaults to * (all available interfaces). –master-bind-port=MASTER_BIND_PORT Port that locust master should bind to. Only used when running with –master. Defaults to 5557. Note that Locust will also use this port + 1, so by default the master node will bind to 5557 and 5558. –expect-slaves=EXPECT_SLAVES How many slaves master should expect to connect before starting the test (only when –no-web used). –no-web no-web 模式运行测试,需要 -c 和 -r 配合使用. -c NUM_CLIENTS, –clients=NUM_CLIENTS 指定并发用户数,作用于 –no-web 模式。 -r HATCH_RATE, –hatch-rate=HATCH_RATE 指定每秒启动的用户数,作用于 –no-web 模式。 -t RUN_TIME, –run-time=RUN_TIME 设置运行时间, 例如: (300s, 20m, 3h, 1h30m). 作用于 –no-web 模式。 -L LOGLEVEL, –loglevel=LOGLEVEL 选择 log 级别(DEBUG/INFO/WARNING/ERROR/CRITICAL). 默认是 INFO. –logfile=LOGFILE 日志文件路径。如果没有设置,日志将去 stdout/stderr –print-stats 在控制台中打印数据 –only-summary 只打印摘要统计 –no-reset-stats Do not reset statistics once hatching has been completed。 -l, –list 显示测试类, 配置 -f 参数使用 –show-task-ratio 打印 locust 测试类的任务执行比例,配合 -f 参数使用. –show-task-ratio-json 以 json 格式打印 locust 测试类的任务执行比例,配合 -f 参数使用. -V, –version 查看当前 Locust 工具的版本.
|