分布式性能测试-小试牛刀
Locust 分布式负载生成概述
Locust 支持分布式负载生成,以模拟更高的并发负载。你可以通过以下方式来配置和使用分布式模式:
1. 基本概念
- Master 实例:管理整个负载测试,运行 Locust 的 Web 界面,并协调各个 Worker 的任务。
- Worker 实例:实际运行用户模拟负载,向 Master 实例报告统计数据。Worker 实例不会运行 Web 界面。
2. 单机模式
在单台机器上启动多个进程:
-
启动一个主进程并指定进程数:
locust --processes 4
-
启动一个主进程并自动检测逻辑核心数:
locust --processes -1
3. 多台机器模式
在一台机器上启动 Master 实例,然后在每个 Worker 机器上启动 Worker 实例:
-
启动 Master 实例:
locust -f my_locustfile.py --master
-
启动 Worker 实例(在每台 Worker 机器上):
locust -f - --worker --master-host <your master> --processes 4
f -
参数表示从 Master 上获取 locustfile 文件。<your master>
是 Master 实例的地址。
4. 使用 locust-swarm
locust-swarm
插件简化了分布式负载生成的启动过程,并解决了防火墙/网络访问的问题:
-
安装
locust-swarm
:pip install locust-swarm
-
启动分布式负载生成:
swarm -f my_locustfile.py --loadgen-list worker-server1,worker-server2 <any other regular locust parameters>
-loadgen-list
指定了 Worker 服务器的地址列表。
5. 分布式负载生成选项
-master-host <hostname or ip>
:指定 Master 节点的主机名或IP(默认为localhost
)。-master-port <port number>
:指定 Master 节点的端口(默认为5557
)。-master-bind-host <ip>
:指定 Master 节点绑定的网络接口(默认为 ``)。-master-bind-port <port number>
:指定 Master 节点监听的端口(默认为5557
)。-expect-workers <number of workers>
:在启动 Master 节点时,等待指定数量的 Worker 节点连接。
6. 节点间通信
可以通过消息钩子在 Master 和 Worker 节点间进行通信:
from locust import events
from locust.runners import MasterRunner, WorkerRunner
# Worker 收到 'test_users' 消息时触发
def setup_test_users(environment, msg, **kwargs):
for user in msg.data:
print(f"User {user['name']} received")
environment.runner.send_message('acknowledge_users', f"Thanks f