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, --locustfile LOCUST_LOCUSTFILE locustfile 要导入的Python模块文件,例如'../other.py'。默认为locustfile。
    -H, --host LOCUST_HOST host 负载测试主机地址,例如'https://www.baidu.com'。
    -u, --users LOCUST_USERS users 并发用户数。主要与--headless一起使用。您可以在测试期间使用"w"和"W"(增加1或10个用户)以及"s"和"S"(停止1或10个用户)来更改。
    -r, --spawn-rate LOCUST_SPAWN_RATE spawn-rate 每秒产生用户的速率。主要与--headless一起使用。
    --hatch-rate LOCUST_HATCH_RATE hatch-rate 启动虚拟用户的速率。
    -t, --run-time LOCUST_RUN_TIME run-time 在指定的时间段后停止测试,例如(300s、20m、3h、1h30m等)。仅与--headless一起使用。默认为永久运行。
    --web-host LOCUST_WEB_HOST web-host 绑定Web界面的主机。默认为'*'(所有接口)。
    --web-port, -P LOCUST_WEB_PORT web-port 运行Web主机的端口地址。默认为8089。
    --headless LOCUST_HEADLESS headless 禁用Web界面,立即开始负载测试。需要指定-u-t
    --autostart LOCUST_AUTOSTART autostart 立即开始测试(不禁用Web UI)。使用-u-t控制用户数和运行时间。
    --autoquit LOCUST_AUTOQUIT autoquit 在测试运行完成后 X 秒后完全退出 Locust。仅与--autostart一起使用。默认为保持Locust运行,直到使用 CTRL+C 关闭。
    --headful LOCUST_HEADFUL headful 启用Headful模式。
    --web-auth LOCUST_WEB_AUTH web-auth 使用基本身份验证打开Web界面。格式为username:password。
    --tls-cert LOCUST_TLS_CERT tls-cert 用于HTTPS服务的TLS证书的路径。
    --tls-key LOCUST_TLS_KEY tls-key 用于HTTPS服务的TLS私钥的路径。
    --master LOCUST_MODE_MASTER master 以Master模式运行,用于分布式负载测试。
    --master-bind-host LOCUST_MASTER_BIND_HOST master-bind-host Master节点绑定的主机名或IP地址。仅在与--master一起使用。默认为'*'(所有可用接口)。
    --master-bind-port LOCUST_MASTER_BIND_PORT master-bind-port Master节点绑定的端口。仅在与--master一起使用。默认为5557。
    --expect-workers LOCUST_EXPECT_WORKERS expect-workers 预期的分布式客户端数量。仅在与--headless一起使用时生效。
    --expect-workers-max-wait LOCUST_EXPECT_WORKERS_MAX_WAIT expect-workers-max-wait 等待Worker连接的最长时间。默认为永远等待。
    --worker LOCUST_MODE_WORKER worker 以Worker模式运行,用于分布式负载测试。
    --master-host LOCUST_MASTER_NODE_HOST master-host Master节点的主机名或IP地址。仅在与--worker一起使用。默认为127.0.0.1。
    --master-port LOCUST_MASTER_NODE_PORT master-port Master节点使用的端口。仅在与--worker一起使用。默认为5557。
    -T, --tags LOCUST_TAGS tags 测试中要包含的标签列表,仅执行具有任何匹配标签的任务。
    -E, --exclude-tags LOCUST_EXCLUDE_TAGS exclude-tags 要从测试中排除的标签列表,仅执行没有匹配标签的任务。
    --csv LOCUST_CSV csv 将请求统计信息以CSV格式存储到文件中。
    --csv-full-history LOCUST_CSV_FULL_HISTORY csv-full-history 将每个统计信息条目以CSV格式存储到_stats_history.csv文件中。
    --print-stats LOCUST_PRINT_STATS print-stats 在控制台中周期性打印统计信息。
    --only-summary LOCUST_ONLY_SUMMARY only-summary 仅打印摘要统计信息。
    --reset-stats LOCUST_RESET_STATS reset-stats 完成后重置统计信息。在分布式模式下,应在Master和Worker上设置。
    --html LOCUST_HTML html 将HTML报告存储到指定的文件路径。
    --skip-log-setup LOCUST_SKIP_LOG_SETUP skip-log-setup 禁用Locust的日志记录设置。
    --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 在测试结果包含任何失败或错误时设置退出代码。默认为1。
    -s, --stop-timeout LOCUST_STOP_TIMEOUT stop-timeout 退出之前等待模拟用户完成的任务的秒数。仅在运行Locust分布式时设置在主进程上。

    有关更多详细信息,包括如何使用文件或环境变量设置选项,请参阅文档:https://docs.locust.io/en/stable/configuration.html

    5. 参考

    1. 官方文档:http://docs.locust.io/en/stable/installation.html

    2. Locust性能测试之快速入门: https://www.cnblogs.com/xyztank/articles/16932194.html

 

posted @ 2025-05-29 12:18  不带R的墨菲特  阅读(123)  评论(1)    收藏  举报