python的自带性能压测工具locust

Locust 的 特征

  • 用 Python 编写测试方案

    • 不需要在 UI 界面上傻乎乎的点击,只需正常的写写代码就可以了。
    • Locust 基于协程而不是回调,这样会让您的代码类似于正常的 Python 阻塞代码那样同步执行。
  • 分布式 & 可扩展

    • 支持模拟数十万的用户行为(还是非常给力的)
    • Locust 支持分布在多台计算机上的运行负载测试(可以多台机器并行开搞)。
    • 由于基于事件,因此即使一个蝗虫节点也可以在单个过程中处理数千个用户。
    • 不过即使您模拟了这么多用户,也并非所有人都是这种频率的使用您的系统,通常,用户会有思考的时候,会想一想下一步该怎么做。
      • 需要明白 每秒请求数 不等于 在线用户数
  • 统计结果基于 Web 界面

    • Locust 有一个简单的用户界面,可实时显示相关的测试详细信息。
    • 统计结果界面是基于网页的,而网页是天生跨平台的,所以 Locust 是跨平台且易于扩展的(Locust 作者的这种思维还是很不错的)。
  • 可以测试任何网页 / 应用 / 系统

    • 即使 Locust 是面向 Web 的,它也可以测试几乎所有项目
    • 只需用 python 编写想要测试的方案,然后放"蝗虫"去怼需要测试的项目就可以了,非常简单!
      • 虽然官方是这么宣传的,但是如果你对 python 了解的不怎么样,那可能就没有那么简单啊;就像商家把兰博基尼的操作宣传的再简单,我没钱买也是白搭(老铁,我太难了!)
      • 如果你对编程是懵逼的状态,那还是回去用 jmeter 吧,优雅不优雅的先不说,最起码你可以用它来干活;
  • 容易被入侵

    • Locust 放出去的蝗虫很小,很容易被入侵,开发团队是一只打算保持这种状态的。
    • 事件 I/O 和协程的所有繁重工作都委托给 gevent
    • 团队是看到 jmeter 等其它测试工具,处理的太 low,太死板了,所以才写的 locust;

Locust 是完全基于 Python

http 请求完全是基于 requests 库;

Locust 支持 http、https 协议,还支持测试其他协议,websocket 等;

只要采用 Python 调用对应的库就可以了。

  • http/https 采用 requests;
  • websocket 采用 websocket ;

一,locust的安装

直接使pip命令安装即可:

 pip install locust

二,简单的案列

#引用时需要注意版本号,如果是新版本的2.5版本,引入的是HttpUser库
from locust import HttpUser, TaskSet, task
import json
#定义一个类,该类继承于TaskSet
class Demo(TaskSet):
    #修饰符表示任务权重
    @task(1)
    def SBC_test(self):
        url = '测试接口path'
        header = {"Host": 'viapi.sbc-proxy.viapi.aliyuncs.com', "X-Ca-Request-Id": "12",
                  "Content-Type": "application/json",
                  "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36"
                  }
        data = {"url": "地址"}
        data_json = json.dumps(data)
        #需要使用locust自带的client,如果使用requests库的请求方式的话,运行报告的时候没数据
        res = self.client.post(url=url, headers=header, data=data_json)
        print(res.json())
        if res.status_code == 200:
            print('success')
        else:
            print('fail:{}'.format(res.status_code))
class websitUser(HttpUser):
    #tasks指向定义了用户行为的类
    tasks= [Demo]
    #最小和最大等待时间
    min_wait = 1000
    max_wait = 5000

三,启动locust

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

#-f后面跟的是需要启动的文件路径
locust -f SBC_load.py

启动成功后,控制台出现下面的提示:

[2021-12-01 11:25:28,178] L-PC1DNYKA-1053/INFO/locust.main: Starting web interface at http://0.0.0.0:8089 (accepting connections from a
ll network interfaces)
[2021-12-01 11:25:28,189] L-PC1DNYKA-1053/INFO/locust.main: Starting Locust 2.5.0

PS:8089是该服务启动的端口号,如果是本地启动,可以直接在浏览器输入http://localhost:8089打开UI界面,如果是其他机器搭建locust服务,则输入该机器的IP+端口即可;

四,locust的UI界面:

1,locust的启动界面

 

 

Number of users to simulate:设置模拟的用户总数

Hatch rate (users spawned/second):每秒启动的虚拟用户数
Host :需要压测的网址,压接口时可以不用填写

Start swarming:执行locust脚本

2,locust的测试页面

PS:点击STOP可以停止locust脚本运行:

 

 

Type:请求类型,即接口的请求方法;

Name:请求路径;

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

fails:当前失败的数量;

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

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

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

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

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

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

3、各模块说明

New test:点击该按钮可对模拟的总虚拟用户数和每秒启动的虚拟用户数进行编辑;

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

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

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

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

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

posted @ 2021-12-01 11:33  zhcr1  阅读(692)  评论(0)    收藏  举报