**
locust基础使用
**
前言:
最近接到一个需求,压测一个接口稳定性,瞬间脑海浮现了jmeter,然后接着看了是那个接口,瞬间分析了下接口里身份验证的加密算法,加上由于时间有限加上jmeter的BeanShell PreProcessor不是很熟悉,就想python貌似也有locust可以满足基本的性能测试,于是改写之前自动化代码调整使用locust,顺便记录下locust相关基础使用;
正文:
使用locust做压力测试,首先我们还是先谈环境,办公环境ubuntu16,系统上python环境有python2.7、python3.5、python3.6,(看其他博客有博主称locust只支持python2,事实上并不是如此,我先后在python3.6&python3.7运行过)
1、环境准备:
locust有六个依赖的python模块:gevent、flask、requests、msgpack、six、pyzmq
本地安装有python环境的,可以配置对应环境变量,使用pip在线安装是不错的方法;(我记得也可以使用whl包安装,自行选择即可)
# gevent
pip3 install gevent
#在Python中实现协程的第三方库。协程又叫微线程Corouine。使用gevent可以获取极高的并发能力;
#flask
pip3 install -U Flask
#Python的一个web开发框架
#requests
pip3 install requests
#大家很熟悉的requests库,发送http&https请求
#msgpack
pip3 install msgpack
#一种快速、紧凑的二进制序列化格式,使用与类似json的数据;
#msgpack-python已经废弃。参考官网。https://pypi.org/project/msgpack/
#six
pip3 install six
#提供了一些简单的工具封装Python2和Python3 之间的差异;
#https://pypi.org/project/six/
#pyzmq
pip3 install pyzmq
#安装这个第三方库,可以把Locust运行在多个进程或多个机器(分布式)
#安装结束了之后我们就开启Locust之旅了。
2、具体安装:
官网提示,locustio替代locust
pip3 install locustio
大部分人到这里一般都不会看了,非常nice,我也是这样做的,然后进行了环境检查;(声明下:我是直接在物理机环境安装的,我觉得这是一个失误的开始,反正我记得在虚拟环境pip 安装后没有任何幺蛾子)
环境检查:
pip3 show locustio
#检查locustio是否安装
locust --help
#检查locust是否可用
#物理机安装这里除了幺蛾子
提示locust 不是内部命令,简单判断下要不是没有环境变量,要不就是没装,
二话不说加了环境变量
(我加的包安装目录哈,再次检查提示一样的错误,难道没装locust,想起之前是locustio有区别?)
然后再次安装pip3 install locust,再次看没有啥用;
其实locust命令没活过来是加的环境变量不对,在python安装目录下有一个bin目录,安装locustio后在
bin目录就会有locust可执行文件,去引用site-packages依赖包中对应模块;
正确做法如下(可以先pip3 uninstall locust 和 locustio ):
创建一个python工程。
在该工程的虚环境中加入所有的依赖包(以上的包)
pip3 install gevent
pip3 install -U Flask
pip3 install requests
pip3 install msgpack
pip3 install six
pip3 install pyzmq
pip3 install locustio
#环境检查
pip3 show locustio
Name: locustio
Version: 0.13.5
Summary: Website load testing framework
Home-page: https://locust.io/
Author: Jonatan Heyman, Carl Bystrom, Joakim Hamrén, Hugo Heyman
Author-email: UNKNOWN
License: MIT
Location: /usr/local/lib/python3.6/site-packages
Requires: six, msgpack-python, pyzmq, flask, gevent, geventhttpclient-wheels, ConfigArgParse, requests
Required-by: locust
#拎出来:Requires: six, msgpack-python, pyzmq, flask, gevent,
geventhttpclient-wheels, ConfigArgParse, requests
是不是感觉不对了;上边说的依赖6个,现在有8个,
所以再安装下依赖环境吧,虽然msgpack-python貌似被弃用,但是你安装的包依赖它顺手吧;
所以继续:
pip3 install msgpack-python #提示已经安装,看来在安装msgpack的时候就安装这个了?
pip3 install geventhttpclient-wheels #也已经安装,所以在安装gevent的时候就把这个也安装了。
pip3 install ConfigArgParse #这个也已经安装过。
3、编写代码:
不方便贴公司代码,江湖规矩贴通用代码吧;
# coding=utf-8
import requests
from locust import HttpLocust,TaskSet,task
import urllib3
from urllib3.exceptions import InsecureRequestWarning
# # 禁用安全请求警告
urllib3.disable_warnings(InsecureRequestWarning)
class MyBlogs(TaskSet):
# 访问我的博客首页
@task(1)
def get_blog(self):
# 定义请求头
header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"}
req = self.client.get("/dong-c", headers=header, verify=False)
if req.status_code == 200:
print("success")
else:
print("fails")
class websitUser(HttpLocust):
task_set = MyBlogs
wait_time = between(3, 6)
if __name__ == "__main__":
import os
os.system("locust -f PerformTools.py --host=https://www.cnblogs.com")
可以看到 locust已经启动成功,且开启的端口为8089.
[2020-05-10 15:57:54,008] dongcxxxxxxxxxxxx-xxx.local/INFO/locust.main: Starting web monitor at *:8089
[2020-05-10 15:57:54,008] dongcxxxxxxxxxxxx-xxx.local/INFO/locust.main: Starting Locust 0.13.5
运行停止后有结果:
Name # reqs # fails Avg Min Max | Median req/s failures/s
--------------------------------------------------------------------------------------------------------------------------------------------
GET /dong-c 522 0(0.00%) 4281 273 15399 | 4100 6.42 0.00
--------------------------------------------------------------------------------------------------------------------------------------------
Aggregated 522 0(0.00%) 4281 273 15399 | 4100 6.42 0.00
Percentage of the requests completed within given times
Name # reqs 50% 66% 75% 80% 90% 95% 98% 99% 99.9% 99.99% 100%
------------------------------------------------------------------------------------------------------------------------------------------------------
GET /dong-c 522 4100 5000 5700 6100 7300 8500 10000 11000 15000 15000 15000
------------------------------------------------------------------------------------------------------------------------------------------------------
Aggregated 522 4100 5000 5700 6100 7300 8500 10000 11000 15000 15000 15000
填入信息:
Number of users to simulate:设置模拟的用户总数
Hatch rate (users spawned/second):每秒启动的虚拟用户数
Start swarming:执行locust脚本
顺便贴一下安全警告的错误解决:
import urllib3
from urllib3.exceptions import InsecureRequestWarning
# 禁用安全请求警告
urllib3.disable_warnings(InsecureRequestWarning)