Locust是一个基于Python可扩展的、分布式的、开源的的性能测试工具,Locust采用Python的requests库使得脚本编写大大简化。而对于其它协议Locust提供了接口,只要我们采用相对应的Python编写模式,就能方便地采用Locust实现压力测试。
在模拟并发方面,Locust的优势在于其摒弃了进程和线程,完全基于事件驱动,使用gevent提供的非阻塞IO和coroutine来实现网络层的并发请求,因此即使是单台压力机也能产生很大的并发请求,再加上对分布式运行的支持,理论上来说,Locust能在使用较少压力机的前提下支持极高并发数的测试。
另一方面,其基于Flask开发的网页交互工具,可以方便的提供给开发人员进行远程自测。但是,Locust不支持场景设置、不支持将监控与其结合、不支持录制(可以用其它方式自动产生)、不支持集合点、并且也没有趋势图,这一特性决定了Locust更适合用来测试接口,尤其适合用来测试获取最大TPS,以及模拟大量用户同时在线的测试要求。
3.3.1.Locust安装方法
使用Pip进行安装
pip install -U locustio
pip install -U pyzmq
遇到的问题一:
markupsafe/_speedups.c:12:20: fatal error: Python.h
需要安装python-dev
sudo apt-get install python2.7-dev --fix-missing
解释:
检测安装是否可用:
https://github.com/asciinema/asciinema/issues/71
sudo easy_install --upgrade requests 解决,但是又出现以下错误
执行sudo easy_install --upgrade Werkzeug解决。
3.3.2.Locust常用调用类
HttpLocust继承自Locust,添加了client属性。client属性是HttpSession实例,可以用于生成HTTP请求。HttpSession调用requests包。
task_set指定client执行的类。min_wait和max_wait为两次执行之间的最小和最长等待时间,两次执行之间的最小和最长等待时间,单位:毫秒,即执行各任务之间等待时间。默认为1000。
3.3.3.Locust的简单示例
编写代码:
脚本示例:调用登录方法,并且将返回值打印出来。
- 注意相关的日志信息需要自己输出,比如请示的参数,以及返回值等信息。
- 日志信息与Loadrunner一样,需要执行后才会在指定的位置区域进行显示
from locust import HttpLocust, TaskSet, task
def md5(str):
import hashlib
m = hashlib.md5()
m.update(str)
return m.hexdigest()
class UserBehavior(TaskSet):
def on_start(self):
""" on_start is called when a locust start before any task is scheduled"""
pass
@task(1)
def login(self):
""" post login ,always the first step. """
postLoginBody = {"clientId":"xxxxx",\
"consideringTheReusability":"true",
"password":md5('q123456'),\
"grantType":"password",\
"service":"authorize",\
"version":"1.0.0.150109-PRD",\
"clientSecret":"x82A99D24A874B",\
"username":'qwen126_1@126.com'}
response = self.client.post('/oauth?service=authorize&version=', postLoginBody)
print response.content
def index(self):
pass
def searchDevice(self):
pass
class ApiFosUser(HttpLocust):
task_set = UserBehavior
host = 'http://10.16.40.11:5902'
min_wait = 100
max_wait = 200
启动locust后台
locust -f test1.py --logfile=/srv/7-31.log
将日志输出到其它目录保存,以便查询、分析使用。
运行并实时查看结果