locust压测工具使用
介绍
Locust是一款开源的性能测试工具,可以帮助您模拟大量用户访问Web服务器,跟踪和报告每个用户的响应时间。它使用Python编程语言编写,允许使用Python脚本编写测试脚本。Locust可以轻松扩展,以支持任何自定义断言,响应转换,模拟,分布式执行或第三方服务整合等。
Locust可以帮助您模拟用户负载,测试Web站点和服务的性能和可靠性。它可以帮助您发现在高负载下出现的延迟问题,并对其进行解决。Locust也可以帮助您找出低性能或不可靠的Web站点或应用程序,并为您提供一种可以使用的模拟负载环境来进行压力测试的方法。
Locust拥有一个强大的Python API,可以让您编写自定义的模拟用户行为,而不需要具有任何管理测试的知识。它的用户界面友好,可以帮助您快速实施重复性的压力测试并获得有用的报告。
官网地址: https://locust.io/
介绍使用: https://docs.locust.io/en/stable/
Locust和Jmeter对比
Locust 和 JMeter 都可以用来进行压力测试。但二者有一些明显的区别:
- Locust 更容易上手。它使用 Python 作为脚本语言,在用户定义的用例上提供了非常友好的界面,而 JMeter 则需要手动编写 XML 脚本来运行测试。
- Locust 可以模拟多个用户同时发起请求,而 JMeter 只能同时发起一个请求。
- Locust 在性能测试和负载测试方面更易于实施,更容易调试,可以更轻松地构建任务和用户脚本。
- Locust 可以将测试结果实时传输到web界面以及图表。
- JMeter 可以根据不同的参数进行设置,可以很容易地模拟不同的用户行为,而 Locust 仅支持模拟特定的用户行为。
- JMeter 可以有效地处理大量请求,而 Locust 在处理大量请求时会出现一些性能问题。
- JMeter 可以在一台机器上设置压力测试,而 Locust 则需要分布式部署以支持大量的用户请求。
- JMeter 允许基于多种协议(例如 JDBC、HTTP、FTP 和 SOAP)进行压力测试,而 Locust 仅限于 HTTP 协议。
- JMeter 只能将测试结果保存到文本文件中,需要用户自行解析数据。
安装
github地址: https://github.com/locustio/locust
使用pip3命令安装如下:
pip3 install locust
如果linux安装失败,缺少 gcc 命令。
可以参考解决方案,安装 python 调试包。
sudo yum install python-devel
sudo yum install python3-devel
参数
在运行前,我们了解下 locust 的执行参数,locust在 1.x 版本和 2.x 版本参数有些不一样。所以学习的时候,大家使用 locust --version 命令看下工具版本号。
可以使用 locust --help 命令输出命令行参数,如下是一些常用的执行参数:
参数 | 描述 | 单位 |
---|---|---|
-u NUM_USERS, --users NUM_USERS | 并发用户的峰值数量 | 数字单位 |
-r SPAWN_RATE, --spawn-rate SPAWN_RAT | 以(每秒用户数)生成用户的速率。主要与 --headless 或 --autostart 一起使用 | 数字单位 |
-t RUN_TIME, --run-time RUN_TIME | 在指定的时间量(例如,20m、3h、1h30m等)。仅与--headless 或 --autostart启动。默认为永远运行。 | 数字单位 |
-H HOST, --host HOST | 接口域名地址 | 字符串 |
-f LOCUSTFILE | 脚本文件 | 绝对地址 |
--config CONFIG | 配置文件 | 绝对地址 |
介绍完工具参数,另外我们看下压测结果相关参数。
参数 | 描述 |
---|---|
Type | 请求的类型,如GET/POST |
Name | 请求的路径 |
request | 已发出请求数量 |
fails | 请求失败的数量 |
Median | 响应时间的中间值(单位:毫秒) |
Average | 平均响应时间(单位:毫秒) |
Min | 请求的最小响应时间(单位:毫秒) |
Max | 请求的最大响应时间(单位:毫秒) |
reqs/sec | 每秒钟请求的个数 |
运行
locust 执行分为有页面的无页面的方式,大家可以根据需要选择不同的方式。
有页面
有页面的方式是 locust 工具的一大特性,可以实时查看压测情况,这点要比 jmeter 好一些,比较合适小白使用。
使用命令如下:
locust -f locust_test.py --host=http://10.30.30.85:9200 --web-host=127.0.0.1 --web-port=8088
启动命令后,会在当前电脑的浏览器打开一个 web 页面,端口是 8088,如果端口被占用需要手动kill掉端口。
无页面
无页面也称为无头,在命令行增加 --headless 参数,特别之处在于不会打开 web 页面,执行结果输出在终点页面上。适合短时间压测或者有其他收集测试结果的平台,不需要 web 平台查看数据。
locust -f locust_test.py --headless --host=http://10.30.30.85:9200
脚本
locust 的另外一个特点是编写测试脚本可以使用python文件替代,相比 jmeter 编写 jmx 文件会自由一些,正因为 locust 是基于 python 语言开发的,所以非常适合已经掌握 python 语言的同学。
demo代码如下:
# coding=utf-8
import os
import requests
from requests.packages.urllib3.exceptions import InsecureRequestWarning
# 禁用安全请求警告
from locust import HttpUser, TaskSet, task
class DramaFinishTask(TaskSet):
# 前置处理
def on_start(self):
print("开始调用")
# 后置处理
def on_stop(self):
print("停止调用")
# 权重,执行比例
@task(1)
# 待测试的方法
def test(self):
# 请求的接口url
req = self.client.head("/xxxxx", verify=False)
if req.status_code == 200:
print("success")
else:
print("fails")
class DramaFinish(HttpUser):
tasks = [DramaFinishTask]
min_wait = 100
max_wait = 800
# 设置每次请求间隔时间
# wait_time = between(1, 1)
wait_time = constant(1)
上面代码可以看到,locust 的脚本编写通过继承 HttpUser 属性并且编写测试方法,self.client 的使用和 python requests 库比较相似。最终执行是通过 locust -f 执行脚本运行。
分布式
locust 同样也支持分布式压测,尤其当一台发压机能力不足的情况下,可以联动多台机器一起压测,master 和 slave 的方式压测 。
在主控机器执行master命令
locust -f locust_test.py --web-host=10.30.130.91 --web-port=9088 --master
在 slave 命令执行如下命令
locust -f locust_test.py --worker --master-host=10.30.130.91
如果有多个 slave 工作的话,会展示多个 slave client编号。
结语
本文主要介绍下 Locust 工具的初级使用,如果对 jmeter 有一定掌握的同学,学习起来会非常容易。
另外就是很多同学会问,jmeter 不是可以压测吗? 为什么还要学些 Locust 工具呢? 那我从几个维度回答下。
- 对自己: 1、多掌握一门工具,在找工作上有一定优势,最起码简历中可以多写点。 2、每个工具都有自己的优点,可以对性能测试了解更深。
- 对公司: 1、可以快速的完成工作,团队中可能大部分同学都是用 Locust 工具,如果你能提前掌握会更好的融入工作。 2、Locust 可以更好开发成压测平台,在工作上提高压测效率。
当然 Locust 也不是新工具,在业内使用的比较普遍,本文就介绍到这里了,祝各位元宵节快乐~,新一年工作顺利、身体安康。
相关推荐
相关文章
- SAP UI5 应用的标准 Theme 和自定义 Theme 的加载讨论
- 分层次的电路设计方法
- Postgresql中return setof函数的使用方法与实例
- Postgresql源码(100)Portal与事务的关系(顶层事务与子事务)
- feign打印日志的方法
- 第十四届蓝桥杯集训——练习解题阶段(无序阶段)-基础练习 查找整数
- 第十四届蓝桥杯集训——练习解题阶段(无序阶段)-基础练习 数列特征
- 第十四届蓝桥杯集训——练习解题阶段(无序阶段)-基础练习 字母图形
- 文献阅读02: CD39抑制改变肿瘤微环境
- 第十四届蓝桥杯集训——练习解题阶段(无序阶段)-基础练习 01字串
- 第十四届蓝桥杯集训——练习解题阶段(无序阶段)-基础练习 Fibonacci数列
- 特殊特性与FMEA之间的关系是什么?
- PHP 操作 Excel - phpoffice/phpspreadsheet 扩展包
- PHP生成二维码 endroid/qr-code 扩展包
- 如何利用六西格玛解决生产现场问题?
- Metaverse 和 NFT 市场 2023-2024 年的趋势
- TP6.0 一对多模型关联 hasMany
- TP6.0 一对一模型关联 belongsTo 相对关联(反向关联)
- Goland的一些实用技巧
- TP6.0 一对一模型关联 hasOne