九、Locust运行与配置

news2024/11/15 4:39:06

1. 配置

1.1 环境变量

也可以通过环境变量设置选项。它们通常与命令行参数相同,但大写并带有前缀LOCUST_

在 Linux/macOS 上:

$ LOCUST_LOCUSTFILE=custom_locustfile.py locust

在 Windows 上:

> set LOCUST_LOCUSTFILE=custom_locustfile.py
> locust

1.2 配置文件

也可以在配置文件 格式的配置文件中设置选项。

Locust默认会查找~/.locust.conf和./locust.conf,你可以使用–config标志指定一个额外的文件。

例子:

# master.conf in current directory
locustfile = locust_files/my_locust_file.py
headless = true
master = true
expect-workers = 5
host = http://target-system
users = 100
spawn-rate = 10
run-time = 10m
> locust --config=master.conf

注意: 配置值按以下顺序读取(重写)。

~/locust.conf -> ./locust.conf -> (file specified using --conf) -> env vars -> cmd args

1.3 所有可用的配置选项

这里有一个所有可用的配置选项的表格,以及它们相应的环境和配置文件的键。

命令行环境变量配置文件描述
-f, --locustfileLOCUST_LOCUSTFILElocustfile可以是一个.py文件,也可以是多个以逗号分隔的.py文件,或者是一个软件包目录。默认为’locustfile’。
-H, –hostLOCUST_HOSThost要加载测试的主机,格式如下:http://10.21.32.33
-u, –usersLOCUST_USERSusersLocust并发用户的峰值数量。主要是与-headless或-autostart一起使用。在测试过程中可以通过键盘输入w, W (产生1, 10个用户)和s, S (停止1, 10个用户)来改变。
-r, –spawn-rateLOCUST_SPAWN_RATEspawn-rate催生用户的速度(每秒用户数)。主要是与-headless或-autostart一起使用。
-t, –run-timeLOCUST_RUN_TIMErun-time在指定的时间后停止,例如(300s、20m、3h、1h30m,等等)。只与-headless或-autostart一起使用。默认为永远运行。
--web-hostLOCUST_WEB_HOSTweb-host绑定网络接口的主机。默认为’*'(所有接口)。
--web-port, -PLOCUST_WEB_PORTweb-port运行网络主机的端口
--headlessLOCUST_HEADLESSheadless禁用网络界面,并立即开始测试。使用-u和-t来控制用户数和运行时间
--autostartLOCUST_AUTOSTARTautostart立即启动测试(就像-headless,但不会禁用网络用户界面)。
--autoquitLOCUST_AUTOQUITautoquit完全退出Locust,在运行结束后X秒。只和-autostart一起使用。默认情况是保持Locust运行,直到你用CTRL+C关闭它。
--web-authLOCUST_WEB_AUTHweb-auth开启网络界面的基本认证。应以下列格式提供:用户名:密码
--tls-certLOCUST_TLS_CERTtls-cert可选的TLS证书路径,用于通过HTTPS提供服务
--tls-keyLOCUST_TLS_KEYtls-key可选的TLS私钥路径,用于通过HTTPS提供服务
--class-pickerLOCUST_USERCLASS_PICKERclass-picker在网页界面上启用选择框,从所有可用的用户类和形状类中进行选择。
--masterLOCUST_MODE_MASTERmaster设置locust以分布式模式运行,并以该进程为主。
--master-bind-hostLOCUST_MASTER_BIND_HOSTmaster-bind-hostlocust master应该绑定的接口(hostname, ip)。只在与-master一起运行时使用。默认为*(所有可用的接口)。
--master-bind-portLOCUST_MASTER_BIND_PORTmaster-bind-portlocust master应该绑定的端口。只在运行-master时使用。默认为5557。
--expect-workersLOCUST_EXPECT_WORKERSexpect-workers在开始测试之前,Master应该期望连接多少个worker(仅当使用-headless/autostart时)。
--expect-workers-max-waitLOCUST_EXPECT_WORKERS_MAX_WAITexpect-workers-max-wait在放弃之前,主站应该等待工人连接多长时间。默认为永远等待
--workerLOCUST_MODE_WORKERworker设置locust在分布式模式下运行,并将此进程作为工作者。
--master-hostLOCUST_MASTER_NODE_HOSTmaster-host用于分布式负载测试的蝗虫主站的主机或 IP 地址。只在与-worker一起运行时使用。默认为127.0.0.1。
--master-portLOCUST_MASTER_NODE_PORTmaster-port连接的端口,该端口被locust master用于分布式负载测试。只在与-worker一起运行时使用。默认为5557。
-T, --tagsLOCUST_TAGStags要包括在测试中的标签列表,因此只有具有任何匹配标签的任务才会被执行。
-E, --exclude-tagsLOCUST_EXCLUDE_TAGSexclude-tags要从测试中排除的标签列表,因此只有没有匹配标签的任务才会被执行。
--csvLOCUST_CSVcsv将当前的请求统计信息以CSV格式存储到文件中。设置这个选项将生成三个文件。[CSV_PREFIX]_stats.csv, [CSV_PREFIX]_stats_history.csv and [CSV_PREFIX]_failures.csv
--csv-full-historyLOCUST_CSV_FULL_HISTORYcsv-full-history将每个统计条目以CSV格式存储到_stats_history.csv文件。你还必须指定’-csv’参数来启用它。
--print-statsLOCUST_PRINT_STATSprint-stats启用在用户界面运行中定期打印请求统计信息的功能
--only-summaryLOCUST_ONLY_SUMMARYonly-summary在-headless运行期间禁止定期打印请求统计信息
--reset-statsLOCUST_RESET_STATSreset-stats一旦产卵完成,就重置统计数据。当以分布式模式运行时,应该在主站和工作站都设置。
--htmlLOCUST_HTMLhtml将HTML报告存储到指定的文件路径
--skip-log-setupLOCUST_SKIP_LOG_SETUPskip-log-setup禁用Locust的日志设置。相反,配置是由Locust测试或Python默认提供的。
--loglevel, -LLOCUST_LOGLEVELloglevel在DEBUG/INFO/WARNING/ERROR/CRITICAL之间选择。默认是INFO。
--logfileLOCUST_LOGFILElogfile日志文件的路径。如果不设置,日志将转到stderr。
--exit-code-on-errorLOCUST_EXIT_CODE_ON_ERRORexit-code-on-error当测试结果包含任何失败或错误时,设置进程退出代码。
-s, --stop-timeoutLOCUST_STOP_TIMEOUTstop-timeout在退出之前,等待模拟用户完成任何执行任务的秒数。默认是立即终止。这个参数只需要在运行Locust分布式时为主进程指定。

1.4 在没有网络用户界面的情况下运行

你可以通过使用 --headless 标志以及 -u/–users 和 -r/–spawn-rate,在没有网页界面的情况下运行蝗虫。

> locust -f locust_files/my_locust_file.py --headless -u 100 -r 5
[2021-07-24 10:41:10,947] .../INFO/locust.main: No run time limit set, use CTRL+C to interrupt.
[2021-07-24 10:41:10,947] .../INFO/locust.main: Starting Locust 2.14.2
[2021-07-24 10:41:10,949] .../INFO/locust.runners: Ramping to 100 users using a 5.00 spawn rate
Name              # reqs      # fails  |     Avg     Min     Max  Median  |   req/s failures/s
----------------------------------------------------------------------------------------------
GET /hello             1     0(0.00%)  |     115     115     115     115  |    0.00    0.00
GET /world             1     0(0.00%)  |     119     119     119     119  |    0.00    0.00
----------------------------------------------------------------------------------------------
Aggregated             2     0(0.00%)  |     117     115     119     117  |    0.00    0.00

[2021-07-24 10:44:42,484] .../INFO/locust.runners: All users spawned: {"HelloWorldUser": 100} (100 total users)

即使在无头模式下,你也可以在测试运行时改变用户数。按w增加1个用户或按W增加10个。按s删除1个或S删除10个。

1.4.1 为测试设定一个时间限制

要指定一个测试的运行时间,使用-t/–运行时间。

locust -f --headless -u 100 --run-time 1h30m
locust -f --headless -u 100 --run-time 60 # 默认单位为秒

一旦时间到了,Locust就会关闭。时间是从测试开始计算的(而不是从升温结束后计算)。

1.4.2 允许任务在关机时完成其迭代

默认情况下,Locust会立即停止你的任务(甚至不需要等待请求完成)。要给正在运行的任务一些时间来完成它们的迭代,可以使用-s/-stop-timeout。

$ locust --headless --run-time 1h30m --stop-timeout 10s

1.4.3 在没有网络界面下运行分布式

如果你想在没有Web UI的情况下运行Locust分布式,你应该在启动主节点时指定–expect-workers选项,以指定预期连接的工作节点的数量。然后,它将等待,直到有这么多的工作节点连接,才开始测试。

1.4.4 控制蝗虫进程的退出代码

默认情况下,如果有任何失败的样本,蝗虫进程将给出一个退出代码1(使用``-exit-code-on-error`来改变这一行为)。

你也可以通过设置环境实例的process_exit_code来手动控制你测试脚本中的退出代码。当把Locust作为一个自动/计划的测试运行时,例如作为CI管道的一部分,这一点特别有用。

下面是一个例子,如果满足以下任何条件,将退出代码设置为非零。

  • 超过1%的请求失败
  • 平均响应时间超过200毫秒
  • 响应时间的第95百分位数大于800毫秒
import logging
from locust import events

@events.quitting.add_listener
def _(environment, **kw):
    if environment.stats.total.fail_ratio > 0.01:
        logging.error("Test failed due to failure ratio > 1%")
        environment.process_exit_code = 1
    elif environment.stats.total.avg_response_time > 200:
        logging.error("Test failed due to average response time ratio > 200 ms")
        environment.process_exit_code = 1
    elif environment.stats.total.get_response_time_percentile(0.95) > 800:
        logging.error("Test failed due to 95th percentile response time > 800 ms")
        environment.process_exit_code = 1
    else:
        environment.process_exit_code = 0

请注意,这段代码可以进入 locustfile.py 或任何其他被导入 locustfile 的文件中

1.5 同时使用多个Locustfiles

-f/–locustfile选项接受一个单一的locustfiles目录作为选项。
蝗虫将递归搜索该目录中的*.py文件,忽略名为locust.py或以"_"开头的文件

例子:

具有以下文件结构。

├── locustfiles/
│   ├── locustfile1.py
│   ├── locustfile2.py
│   └── more_files/
│       ├── locustfile3.py
│       ├── locust.py
│       ├── _ignoreme.py
> locust -f locustfiles

蝗虫将使用 locustfile1.py, locustfile2.py & more_files/locustfile3.py

此外,-f/–locustfile接受多个以逗号分隔的locustfile。

Example:

$ locust -f locustfiles/locustfile1.py,locustfiles/locustfile2.py,locustfiles/more_files/locustfile3.py

蝗虫将使用 locustfile1.py, locustfile2.py & more_files/locustfile3.py

1.6 使用用户类UI选取器运行Locust

--class-picker你可以选择运行带有标志的 locust 时在 WebUI 中运行哪个 Shape 类和哪个 User 类。没有选择使用所有可用的用户类。

例子:

具有以下文件结构:

├── src/
│   ├── some_file.py
├── locustfiles/
│   ├── locustfile1.py
│   ├── locustfile2.py
│   └── more_files/
│       ├── locustfile3.py
│       ├── locust.py
│       ├── _ignoreme.py
│   └── shape_classes/
│       ├── DoubleWaveShape.py
│       ├── StagesShape.py
> locust -f locustfiles --class-picker

Web 用户界面将显示:

1.7 自定义参数

你可以使用init_command_line_parser事件向Locust添加你自己的命令行参数。

自定义参数也可以在Web UI中显示和编辑。

from locust import HttpUser, task, events


@events.init_command_line_parser.add_listener
def _(parser):
    parser.add_argument("--my-argument", 
                        type=str, env_var="LOCUST_MY_ARGUMENT", 
                        default="", help="It's working")

    # 如果要隐藏web ui,请将“include_in_web_ui”设置为False
    parser.add_argument("--my-ui-invisible-argument", 
                        include_in_web_ui=False, default="I am invisible")


@events.test_start.add_listener
def _(environment, **kw):
    print(f"Custom argument supplied: {environment.parsed_options.my_argument}")


class WebsiteUser(HttpUser):
    @task
    def my_task(self):
        print(f"my_argument={self.environment.parsed_options.my_argument}")
        print(f"my_ui_invisible_argument={self.environment.parsed_options.my_ui_invisible_argument}")

当运行Locust分布式时,自定义参数会在运行开始时自动转发给工作者(但在此之前不会,所以你不能在测试实际开始之前依赖转发的参数)。

1.8 统计设置的定制

蝗虫统计的默认配置被设置在stats.py文件的常量中。它可以通过覆盖这些值来适应特定的要求。要做到这一点,请导入locust.stats模块并覆盖需要的设置。

import locust.stats
locust.stats.CONSOLE_STATS_INTERVAL_SEC = 15

它可以直接在Locust文件中完成,也可以提取到单独的文件中,供所有Locust文件共同使用。

可以修改的统计参数列表是:

参数名字宗旨
STATS_NAME_WIDTH控制台输出中的请求名称列的宽度
STATS_TYPE_WIDTH控制台输出中请求类型的列的宽度
CSV_STATS_INTERVAL_SEC如果配置了这个选项,CSV文件的写入频率的间隔。
CONSOLE_STATS_INTERVAL_SEC将结果写入控制台的频率的时间间隔
CURRENT_RESPONSE_TIME_PERCENTILE_WINDOW计算当前响应时间百分位数时的窗口大小/分辨率–以秒为单位
PERCENTILES_TO_REPORT要计算和报告的响应时间百分位数列表

更多教程,更多实战案例,请阅读:https://edu.csdn.net/course/detail/38449
在这里插入图片描述

更多教程,更多实战案例,请阅读:https://edu.csdn.net/course/detail/38449

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/431195.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL的安装与卸载(Centos7.9环境下,全篇图文手把手安装教程)

前言 在安装MySQL之前,我们先来看看MySQL如何卸载。如果从未安装过MySQL的任何版本,可以直接跳过这部分。 如果已经安装过MySQL,一定要确保自己的环境中的MySQL相关文件删除干净,否则重新安装时可能会出现一些错误 tips&#xf…

问界M9全剧透:华为的「科技豪华」样板间

作者 | 德新 编辑 | 王博 今天在nova 11的发布会上,曝了一个意外——问界M9提前剧透。实际上这车要今年四季度才上市。「本来没打算这么早发出来,前阵子网上有一个很老的设计图在传(实在太丑)。没办法,干脆先讲讲」…

DriveGPT、车企订单背后,为什么毫末每年都能搞出新东西?

作者 | 祥威 编辑 | 德新 4月11日,毫末智行正式发布自动驾驶生成式大模型 DriveGPT,中文名 雪湖海若,可以提升自动驾驶认知能力,最终提升规控效率。 雪湖海若的核心,是将各种驾驶场景作为Token输入到模型中&…

《Netty》从零开始学netty源码(三十九)之PoolSubPage的内存分配

目录 PoolSubPage.allocategetNextAvail方法toHandle方法removeFromPool方法 PoolSubPage.allocate 上一篇我们介绍了PoolSubPage的简单知识,当我们需要PoolSubPage的内存时可调用allocate方法查找可分配二进制的位置,具体的源码过程如下: …

ctfshow web入门命令执行web74-118

1.web74 还是先扫目录 payload: c$anew DirectoryIterator(glob:///*);foreach($a as $f){echo($f->__toString()." ");}exit(0); #扫描根目录有什么文件 c$anew DirectoryIterator(glob:///*);foreach($a as $f){echo($f->getFilename()." ");} …

N32G430学习笔记20--- spi外设单工模式下spi1中断发送和spi2中断数据接收

基本知识 spi主模式下使用硬件NSS(3个条件缺一不可): 设置硬件NSS模式设置NSS电平为低电平使能NSS输出spi主模式下使用软件NSS: 设置软件NSS模式 使能NSS输出 SPI_SS_Output_Enable(SPI1);//NSS 使能 SPI接线方式(MISO 和MOSI反着接) SPI1->SLCK=PB3 <–> SPI2-…

在SPRO为定制表创建节点

确定透明表已创建&#xff0c;允许维护&#xff0c;并且生成维护视图。保证SM30可以正常维护。 2.在已有的节点增加还是新增&#xff0c;如果在以有的节点增加&#xff0c;需要查看已有节点的Enhancement ID 。 查看方法具体请点击。 举个例子&#xff1a;我们想在Z-business C…

每日学术速递4.17

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.DreamPose: Fashion Image-to-Video Synthesis via Stable Diffusion 标题&#xff1a;DreamPose&#xff1a;通过稳定扩散实现时尚图像到视频合成 作者&#xff1a;Johanna Karr…

无聊写个 chatgpt 玩玩!这不得试一试 openai 的聊天和绘画功能

chatgpt 最近很火。使用 chatgpt 问一些问题还是很有用的。比如面试题&#xff0c;面试题的答案。简直不要太爽。 不过闲来无事&#xff0c;也使用 openai 提供的api &#xff0c;写了几个小页面&#xff0c;可以进行聊天&#xff0c;和绘画。 项目放在 github 上了&#xff…

cmake和cmake install学习

cmake 设置cmake的C/C编译标准 set(CMAKE_CXX_STANDARD 17) set(CMAKE_C_STANDARD 11)add_library生成的默认是静态库还是动态库 https://blog.csdn.net/HandsomeHong/article/details/122401900 add_library()命令生成的默认库类型取决于第二个参数。如果第二个参数是STATI…

python-day3

第003天 函数和模块的使用 定义函数 在python中可以使用def关键字来定义函数&#xff0c;和变量一样每个函数也有一个名字&#xff0c;而且命名规则和变量的命名规则是一致的。在函数名后面的圆括号中可以放置传递给函数的参数&#xff0c;程序中函数的参数就是相当于数学上…

企业级信息系统开发学习笔记05 初探Spring AOP

文章目录 一、学习目标二、Spring AOP&#xff08;一&#xff09;AOP基本含义&#xff08;二&#xff09;AOP基本作用&#xff08;三&#xff09;AOP和OOP对比&#xff08;四&#xff09;AOP使用方式&#xff08;五&#xff09;AOP基本概念 三、采用配置方法使用AOP&#xff08…

STM32实验-高级定时器输出指定个数PWM

STM32F103ZET6中有TIM1,TIM8两个高级定时器&#xff0c;每一定时器都有 1、一个16位向上、向下、向上/下自动装载计数器 2、一个16位预分频器和四个独立从输入输出通道 3、每一个通道都可用于输入捕获、输出比较、PWM和单脉冲模式&#xff08;除了基本定时器&#xff0c;高级定…

Cesium-源码修改-gltf增加纹理贴图改变3dtiles外观

一、需求 Cesium支持加载gltf和3dtiles等三维数据模型&#xff0c;实现了很好的封装&#xff0c;往往只需要给一个uri就能加载模型文件&#xff0c;并实现贴图渲染等。但是好的封装带来的问题是如果开发者想要自定义贴图&#xff0c;那该怎么办&#xff1f;不得不从源码入手。 …

条码控件Aspose.BarCode入门教程(6):如何在C# 中生成GS1-128 条码

Aspose.BarCode for .NET 是一个功能强大的API&#xff0c;可以从任意角度生成和识别多种图像类型的一维和二维条形码。开发人员可以轻松添加条形码生成和识别功能&#xff0c;以及在.NET应用程序中将生成的条形码导出为高质量的图像格式。 Aspose API支持流行文件格式处理&am…

三、Golang环境搭建及打包和工具链

一、环境搭建 从https://golang.google.cn/dl/下载安装即可 新建GO_HOME 系统环境变量&#xff0c;指向go的安装目录 在终端输入go dev即可测试有无安装成功 二、包 所有Go程序的程序都会组织成若干组文件&#xff0c;每组文件被称为一个包。每个包的代码都可以作为很小的复用…

webpack 5 实战(1)

一、为什么使用webpack 个人将前端开发分为三个阶段&#xff1a; 1.1 Web1.0 Web1.0前端主要工作&#xff1a; 前端主要编写静态页面对于JavaScript的使用&#xff0c;主要是进行表单验证和动画效果制作 1.2 Web2.0之AJAX 伴随着AJAX的诞生&#xff0c;前端的工作模式也发…

什么牌子的蓝牙耳机音质最好?盘点2023音质最好的蓝牙耳机

近几年&#xff0c;蓝牙耳机在日常生活中的出现频率越来越高&#xff0c;不管是运动、听歌、追剧、玩游戏等等都能看到蓝牙耳机的身影。接下来&#xff0c;我来给大家盘点几款音质好的蓝牙耳机&#xff0c;感兴趣的朋友可以了解一下。 一、南卡小音舱Lite2蓝牙耳机 参考价&…

使用 WSL 在 Windows 上安装 Linux提示无法解析服务器的名称或地址及0x80370114问题解决

开发人员可以通过WSL在windows电脑上安装Linux发行版&#xff0c;并可以直接在电脑上使用Linux应用程序、实用程序和Bash命令行工具等。 先决条件 必须运行 Windows 10 版本 2004 及更高版本&#xff08;内部版本 19041 及更高版本&#xff09;或 Windows 11 才能使用以下命令…

结合企业实践来规范你的Git commit(含插件使用指南)

&#x1f3c6; 文章目标&#xff1a;了解通用的Git commit规范&#xff0c;并在企业的团队内部进行实践。 &#x1f340; 如何规范你的Git commit&#xff08;理论结合企业的实践&#xff09; ✅ 创作者&#xff1a;Jay… &#x1f389; 个人主页&#xff1a;Jay的个人主页 &am…