locust 分布式压测
1、启动
3.2 分布式模式
适用于大规模测试。支持多台机器协同工作,能够模拟大量并发用户,包括 master 和 worker 节点,worker节点产生负载, master 节点主要负责协调和收集来自多个 worker 节点的数据。
运行方法:
-
启动 master:
locust -f locust-test1.py --master -
# Master命令 locust -f locustfile.py --master --expect-workers=100 --users=4000 --spawn-rate=100# 测试单worker能支持的最大用户数 locust -f locustfile.py --headless --users=100 --spawn-rate=10 --run-time=1m # 逐步增加,找到最佳比例 # 测试不同worker数量的性能# 启动 master,不处理请求,只负责协调
locust -f locustfile.py --master --host=http://your-target-server.com# 或者使用 headless 模式
locust -f locustfile.py --master --headless --users 1000 --spawn-rate 100 --host=http://your-target-server.com -
启动 worker:
# worker机器同样需要安装locust locust -f locust-test1.py --worker --master-host=<master_ip>
worker运行后,master侧命令行会有worker已连接的打印,可以看到当前master下面连接的worker数量。
# 每台slave机器的合理worker数量 cpu_cores_per_slave =8 # 假设每台slave是8核CPU recommended_workers_per_slave = cpu_cores_per_slave * 2 # 通常为CPU核心数的1-3倍 # 10台slave的总worker数量 total_recommended_workers = 10 * recommended_workers_per_slave # 10 * 16 = 160
# 10台slave,每台8核16G,保守配置
WORKERS_PER_SLAVE=12
TOTAL_WORKERS=120 (10台总计)
USERS_PER_WORKER=33 # 4000 / 120
单台启动slave worker的shell脚本:
start_worker.sh
#!/bin/bash
MASTER_HOST="MASTER_IP"
NUM_WORKERS=150
LOG_DIR="/var/log/locust"
mkdir -p $LOG_DIR
# 启动workers
for i in $(seq 1 $NUM_WORKERS); do
nohup locust -f locustfile.py \
--worker \
--master-host=$MASTER_HOST \
--logfile="$LOG_DIR/worker_$i.log" 2>&1 &
done
echo "Started $NUM_WORKERS workers"
在浏览器中打开 http://<master_ip>:8089,配置测试参数并启动测试:

3.3 无头模式(Headless Mode)
适用于持续集成(CI)环境或不需要图形界面的场景。可以自动执行测试,并将结果输出到控制台或文件中。
运行方法:
使用命令行参数配置和启动测试:
locust -f locust-test1.py --headless -u 100 -r 10 -H http://192.168.0.210:5000 --run-time 1m --csv=results
参数说明:
--headless:无头模式运行。-u或--users:模拟的用户数。-r或--spawn-rate:每秒启动的用户数。--run-time:测试运行时间,例如1m表示 1 分钟。--csv:将测试结果输出到 CSV 文件。
3.4 总结
- 单机模式 适用于简单的小规模测试。
- 分布式模式 适用于大规模测试,通过多个 worker 节点协同工作来模拟大量并发用户。
- 无头模式 适用于自动化测试和持续集成环境,可以在没有图形界面的情况下运行测试并输出结果
4. locust运行参数说明
命令行选项 环境变量 配置文件字段 描述说明 -f, --locustfileLOCUST_LOCUSTFILElocustfile要导入的Python模块文件,例如'../other.py'。默认为locustfile。 -H, --hostLOCUST_HOSThost负载测试主机地址,例如'https://www.baidu.com'。 -u, --usersLOCUST_USERSusers并发用户数。主要与 --headless一起使用。您可以在测试期间使用"w"和"W"(增加1或10个用户)以及"s"和"S"(停止1或10个用户)来更改。-r, --spawn-rateLOCUST_SPAWN_RATEspawn-rate每秒产生用户的速率。主要与 --headless一起使用。--hatch-rateLOCUST_HATCH_RATEhatch-rate启动虚拟用户的速率。 -t, --run-timeLOCUST_RUN_TIMErun-time在指定的时间段后停止测试,例如(300s、20m、3h、1h30m等)。仅与 --headless一起使用。默认为永久运行。--web-hostLOCUST_WEB_HOSTweb-host绑定Web界面的主机。默认为'*'(所有接口)。 --web-port, -PLOCUST_WEB_PORTweb-port运行Web主机的端口地址。默认为8089。 --headlessLOCUST_HEADLESSheadless禁用Web界面,立即开始负载测试。需要指定 -u和-t。--autostartLOCUST_AUTOSTARTautostart立即开始测试(不禁用Web UI)。使用 -u和-t控制用户数和运行时间。--autoquitLOCUST_AUTOQUITautoquit在测试运行完成后 X 秒后完全退出 Locust。仅与 --autostart一起使用。默认为保持Locust运行,直到使用 CTRL+C 关闭。--headfulLOCUST_HEADFULheadful启用Headful模式。 --web-authLOCUST_WEB_AUTHweb-auth使用基本身份验证打开Web界面。格式为username:password。 --tls-certLOCUST_TLS_CERTtls-cert用于HTTPS服务的TLS证书的路径。 --tls-keyLOCUST_TLS_KEYtls-key用于HTTPS服务的TLS私钥的路径。 --masterLOCUST_MODE_MASTERmaster以Master模式运行,用于分布式负载测试。 --master-bind-hostLOCUST_MASTER_BIND_HOSTmaster-bind-hostMaster节点绑定的主机名或IP地址。仅在与 --master一起使用。默认为'*'(所有可用接口)。--master-bind-portLOCUST_MASTER_BIND_PORTmaster-bind-portMaster节点绑定的端口。仅在与 --master一起使用。默认为5557。--expect-workersLOCUST_EXPECT_WORKERSexpect-workers预期的分布式客户端数量。仅在与 --headless一起使用时生效。--expect-workers-max-waitLOCUST_EXPECT_WORKERS_MAX_WAITexpect-workers-max-wait等待Worker连接的最长时间。默认为永远等待。 --workerLOCUST_MODE_WORKERworker以Worker模式运行,用于分布式负载测试。 --master-hostLOCUST_MASTER_NODE_HOSTmaster-hostMaster节点的主机名或IP地址。仅在与 --worker一起使用。默认为127.0.0.1。--master-portLOCUST_MASTER_NODE_PORTmaster-portMaster节点使用的端口。仅在与 --worker一起使用。默认为5557。-T, --tagsLOCUST_TAGStags测试中要包含的标签列表,仅执行具有任何匹配标签的任务。 -E, --exclude-tagsLOCUST_EXCLUDE_TAGSexclude-tags要从测试中排除的标签列表,仅执行没有匹配标签的任务。 --csvLOCUST_CSVcsv将请求统计信息以CSV格式存储到文件中。 --csv-full-historyLOCUST_CSV_FULL_HISTORYcsv-full-history将每个统计信息条目以CSV格式存储到_stats_history.csv文件中。 --print-statsLOCUST_PRINT_STATSprint-stats在控制台中周期性打印统计信息。 --only-summaryLOCUST_ONLY_SUMMARYonly-summary仅打印摘要统计信息。 --reset-statsLOCUST_RESET_STATSreset-stats完成后重置统计信息。在分布式模式下,应在Master和Worker上设置。 --htmlLOCUST_HTMLhtml将HTML报告存储到指定的文件路径。 --skip-log-setupLOCUST_SKIP_LOG_SETUPskip-log-setup禁用Locust的日志记录设置。 --loglevel, -LLOCUST_LOGLEVELloglevel日志级别,选择DEBUG/INFO/WARNING/ERROR/CRITICAL。默认为INFO。 --logfileLOCUST_LOGFILElogfile日志文件的路径。如果未设置,日志将输出到stderr。 --exit-code-on-errorLOCUST_EXIT_CODE_ON_ERRORexit-code-on-error在测试结果包含任何失败或错误时设置退出代码。默认为1。 -s, --stop-timeoutLOCUST_STOP_TIMEOUTstop-timeout退出之前等待模拟用户完成的任务的秒数。仅在运行Locust分布式时设置在主进程上。 有关更多详细信息,包括如何使用文件或环境变量设置选项,请参阅文档:https://docs.locust.io/en/stable/configuration.html
5. 参考


浙公网安备 33010602011771号