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 , --locustfile | LOCUST_LOCUSTFILE | locustfile | 可以是一个.py文件,也可以是多个以逗号分隔的.py文件,或者是一个软件包目录。默认为’locustfile’。 |
-H, –host | LOCUST_HOST | host | 要加载测试的主机,格式如下:http://10.21.32.33 |
-u, –users | LOCUST_USERS | users | Locust并发用户的峰值数量。主要是与-headless或-autostart一起使用。在测试过程中可以通过键盘输入w, W (产生1, 10个用户)和s, S (停止1, 10个用户)来改变。 |
-r, –spawn-rate | LOCUST_SPAWN_RATE | spawn-rate | 催生用户的速度(每秒用户数)。主要是与-headless或-autostart一起使用。 |
-t, –run-time | LOCUST_RUN_TIME | run-time | 在指定的时间后停止,例如(300s、20m、3h、1h30m,等等)。只与-headless或-autostart一起使用。默认为永远运行。 |
--web-host | LOCUST_WEB_HOST | web-host | 绑定网络接口的主机。默认为’*'(所有接口)。 |
--web-port , -P | LOCUST_WEB_PORT | web-port | 运行网络主机的端口 |
--headless | LOCUST_HEADLESS | headless | 禁用网络界面,并立即开始测试。使用-u和-t来控制用户数和运行时间 |
--autostart | LOCUST_AUTOSTART | autostart | 立即启动测试(就像-headless,但不会禁用网络用户界面)。 |
--autoquit | LOCUST_AUTOQUIT | autoquit | 完全退出Locust,在运行结束后X秒。只和-autostart一起使用。默认情况是保持Locust运行,直到你用CTRL+C关闭它。 |
--web-auth | LOCUST_WEB_AUTH | web-auth | 开启网络界面的基本认证。应以下列格式提供:用户名:密码 |
--tls-cert | LOCUST_TLS_CERT | tls-cert | 可选的TLS证书路径,用于通过HTTPS提供服务 |
--tls-key | LOCUST_TLS_KEY | tls-key | 可选的TLS私钥路径,用于通过HTTPS提供服务 |
--class-picker | LOCUST_USERCLASS_PICKER | class-picker | 在网页界面上启用选择框,从所有可用的用户类和形状类中进行选择。 |
--master | LOCUST_MODE_MASTER | master | 设置locust以分布式模式运行,并以该进程为主。 |
--master-bind-host | LOCUST_MASTER_BIND_HOST | master-bind-host | locust master应该绑定的接口(hostname, ip)。只在与-master一起运行时使用。默认为*(所有可用的接口)。 |
--master-bind-port | LOCUST_MASTER_BIND_PORT | master-bind-port | locust master应该绑定的端口。只在运行-master时使用。默认为5557。 |
--expect-workers | LOCUST_EXPECT_WORKERS | expect-workers | 在开始测试之前,Master应该期望连接多少个worker(仅当使用-headless/autostart时)。 |
--expect-workers-max-wait | LOCUST_EXPECT_WORKERS_MAX_WAIT | expect-workers-max-wait | 在放弃之前,主站应该等待工人连接多长时间。默认为永远等待 |
--worker | LOCUST_MODE_WORKER | worker | 设置locust在分布式模式下运行,并将此进程作为工作者。 |
--master-host | LOCUST_MASTER_NODE_HOST | master-host | 用于分布式负载测试的蝗虫主站的主机或 IP 地址。只在与-worker一起运行时使用。默认为127.0.0.1。 |
--master-port | LOCUST_MASTER_NODE_PORT | master-port | 连接的端口,该端口被locust master用于分布式负载测试。只在与-worker一起运行时使用。默认为5557。 |
-T , --tags | LOCUST_TAGS | tags | 要包括在测试中的标签列表,因此只有具有任何匹配标签的任务才会被执行。 |
-E , --exclude-tags | LOCUST_EXCLUDE_TAGS | exclude-tags | 要从测试中排除的标签列表,因此只有没有匹配标签的任务才会被执行。 |
--csv | LOCUST_CSV | csv | 将当前的请求统计信息以CSV格式存储到文件中。设置这个选项将生成三个文件。[CSV_PREFIX]_stats.csv, [CSV_PREFIX]_stats_history.csv and [CSV_PREFIX]_failures.csv |
--csv-full-history | LOCUST_CSV_FULL_HISTORY | csv-full-history | 将每个统计条目以CSV格式存储到_stats_history.csv文件。你还必须指定’-csv’参数来启用它。 |
--print-stats | LOCUST_PRINT_STATS | print-stats | 启用在用户界面运行中定期打印请求统计信息的功能 |
--only-summary | LOCUST_ONLY_SUMMARY | only-summary | 在-headless运行期间禁止定期打印请求统计信息 |
--reset-stats | LOCUST_RESET_STATS | reset-stats | 一旦产卵完成,就重置统计数据。当以分布式模式运行时,应该在主站和工作站都设置。 |
--html | LOCUST_HTML | html | 将HTML报告存储到指定的文件路径 |
--skip-log-setup | LOCUST_SKIP_LOG_SETUP | skip-log-setup | 禁用Locust的日志设置。相反,配置是由Locust测试或Python默认提供的。 |
--loglevel , -L | LOCUST_LOGLEVEL | loglevel | 在DEBUG/INFO/WARNING/ERROR/CRITICAL之间选择。默认是INFO。 |
--logfile | LOCUST_LOGFILE | logfile | 日志文件的路径。如果不设置,日志将转到stderr。 |
--exit-code-on-error | LOCUST_EXIT_CODE_ON_ERROR | exit-code-on-error | 当测试结果包含任何失败或错误时,设置进程退出代码。 |
-s , --stop-timeout | LOCUST_STOP_TIMEOUT | stop-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 用户界面将显示:
![](https://i-blog.csdnimg.cn/blog_migrate/00569c07cc48661a6a2583212f637ccb.png)
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