python+locust性能测试

locust是一个易于使用的,分布式的,用户负载测试工具。用于web站点(或其他系统)的负载测试,然后算出系统能够处理多少并发用户。

locust

Locust(俗称 蝗虫), 一个轻量级的开源压测工具,用Python编写。用于web站点(或其他系统)的负载测试,然后算出系统能够处理多少并发用户。

ocust的思想是:在测试期间,一大群"蝗虫"会攻击你的网站,每一个"蝗虫"的行为都是由你自己定义的,同时,可以在一个web界面上实时的监控这群进程。这会帮助你更好的"进行战斗",在真正的用户进入之前,就找出代码中的瓶颈。

安装

1
pip install locustio

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# coding=utf-8
import requests
from locust import HttpLocust,TaskSet,task
from requests.packages.urllib3.exceptions import InsecureRequestWarning
# 禁用安全请求警告
requests.packages.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("/imyalost", headers=header, verify=False)
if req.status_code == 200:
print("success")
else:
print("fails")

class websitUser(HttpLocust):
task_set = MyBlogs
min_wait = 3000 # 单位为毫秒
max_wait = 6000 # 单位为毫秒

if __name__ == "__main__":
import os
os.system("locust -f locusttest.py --host=https://www.cnblogs.com")

运行

  1. 如果启动的locust文件名为locustfile.py并位于当前工作目录中,可以在编译器中直接运行该文件,或者通过cmd,执行如下命令:

    1
    locust --host=https://www.cnblogs.com 
  2. 如果Locust文件位于子目录下且名称不是locustfile.py,可以使用-f命令启动上面的示例locust文件:

    1
    locust -f testscript/locusttest.py --host=https://www.cnblogs.com 
  3. 如果要运行分布在多个进程中的Locust,通过指定-master以下内容来启动主进程 :

    1
    locust -f testscript/locusttest.py --master --host=https://www.cnblogs.com 
  4. 如果要启动任意数量的从属进程,可以通过-salve命令来启动locust文件:

    1
    locust -f testscript/locusttest.py --salve --host=https://www.cnblogs.com 
  5. 如果要运行分布式Locust,必须在启动从机时指定主机(运行分布在单台机器上的Locust时不需要这样做,因为主机默认为127.0.0.1):

    1
    locust -f testscript/locusttest.py --slave --master-host=192.168.0.100 --host=https://cnblogs.com 
  6. 启动locust文件成功后,编译器控制台会显示如下信息:

    1
    2
    3
     [2018-10-09 01:01:44,727] IMYalost/INFO/locust.main: Starting web monitor at *:8089

    [2018-10-09 01:01:44,729] IMYalost/INFO/locust.main: Starting Locust 0.8

locust的UI界面

image-20230502140304254

1
2
3
4
5
Number of users to simulate:设置模拟的用户总数

Hatch rate (users spawned/second):每秒启动的虚拟用户数

Start swarming:执行locust脚本

测试结果界面

image-20230502140342683

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Type:请求类型,即接口的请求方法;

Name:请求路径;

requests:当前已完成的请求数量;

fails:当前失败的数量;

Median:响应时间的中间值,即50%的响应时间在这个数值范围内,单位为毫秒;

Average:平均响应时间,单位为毫秒;

Min:最小响应时间,单位为毫秒;

Max:最大响应时间,单位为毫秒;

Content Size:所有请求的数据量,单位为字节;

reqs/sec:每秒钟处理请求的数量,即QPS;

模块说明

image-20230502140438998

1
2
3
4
5
6
7
8
9
10
11
New test:点击该按钮可对模拟的总虚拟用户数和每秒启动的虚拟用户数进行编辑;

Statistics:类似于jmeter中Listen的聚合报告;

Charts:测试结果变化趋势的曲线展示图,分别为每秒完成的请求数(RPS)、响应时间、不同时间的虚拟用户数;

Failures:失败请求的展示界面;

Exceptions:异常请求的展示界面;

Download Data:测试数据下载模块, 提供三种类型的CSV格式的下载,分别是:Statistics、responsetime、exceptions;