You need to enable JavaScript to run this app. 如何在Locust的worker实例中访问environment类上设置的自定义变量
优惠活动
大模型
产品
解决方案
定价
更多

如何在Locust的worker实例中访问environment类上设置的自定义变量

问题根因

Locust 分布式运行时,master 节点仅会默认同步内置核心配置(如 host、总用户数、孵化速率等)给连接的 worker 节点,你自定义新增的 environment 变量不在默认同步列表中,因此 worker 节点上的 environment 实例不会自动拿到 variable1 的值,始终返回 None。

解决方法

方案1:利用Locust自定义消息机制同步变量(推荐)

  • 首先在 master 节点的 test_start 事件监听器里,给所有连接的 worker 广播自定义变量:
from locust import events
from locust.runners import MasterRunner

@events.test_start.add_listener
def on_test_start(environment, **kwargs):
    # 仅在master节点执行广播
    if isinstance(environment.runner, MasterRunner):
        # 自定义消息类型,payload携带你要同步的变量
        environment.runner.send_message(
            "sync_custom_vars", 
            {"variable1": environment.variable1}
        )
  • 然后在所有节点(master+worker都要注册)监听这个自定义消息,把收到的变量赋值到本地 environment:
@events.init.add_listener
def on_locust_init(environment, **kwargs):
    # 注册自定义消息的处理函数
    environment.runner.register_message(
        "sync_custom_vars", 
        lambda msg, **kwargs: setattr(environment, "variable1", msg.data["variable1"])
    )
  • 之后你在 User 类的 on_start 方法里就可以正常取值了:
from locust import HttpUser, task

class MyUser(HttpUser):
    def on_start(self):
        print(self.environment.variable1) # 此时worker节点也能正常拿到值
    
    @task
    def test_task(self):
        self.client.get("/")

方案2:修改Locust内置参数同步逻辑(适配自定义分支场景)

你正在维护自定义的Locust分支,也可以直接修改master给worker发送启动测试请求的代码,把自定义变量加到同步参数里:

  • 找到 runners.py 中 MasterRunner 发送 start 消息的代码段,把你的 variable1 加到发送的 payload 中
  • 再找到 worker 节点处理 start 消息的代码段,把收到的 variable1 赋值到本地的 environment 实例即可
注意事项
  • 如果你的自定义字段可能为空,要在表单提交和消息传递时做好默认值处理,避免赋值报错
  • 如果有多个自定义变量,直接在消息 payload 里加多个键值对即可

内容的提问来源于stack exchange,提问作者Thomas Woeste

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 18:21:02