python - 如何在 locust 的工作实例中访问环境类上设置的变量
问题描述
我有一个自定义的 locust 分支,我将自定义 UI 字段添加到 locust 的启动和编辑屏幕。我已将字段添加到index.html
. 在web.py
/swarm 方法中,我将来自新 UI 字段的请求结果添加到环境变量中。
现在在我的 locust 文件中,我可以从环境中的事件类中访问这些变量,如下所示:
@events.test_start.add_listener
def test_start(environment):
print(environment.variable1)
print(environment.host)
问题在于它只在 locust 的主实例上运行。我需要 HTTP 用户类的 on_start 方法中的数据。我认为这是可能的,因为在 HHTP 用户类中我可以获得self.environment.host
并且它会正确填充,但如果我这样做self.environment.variable1
,它总是会返回None
.
我将新变量添加到 env 类的顶部,并在块中env.py
设置变量,如下所示:web.py
/swarm
environment.variable1 = request.form["variable1"]
我认为问题是 WebUI 类仅在主实例上产生,但这个问题仍然以某种方式绕过主机。在此先感谢您的帮助。
解决方案
首先,您可以考虑添加自己的 Web 路由并扩展 Web UI 以添加您需要的自定义逻辑和数据,而不是维护自己的 Locust 分支。从维护的角度来看,长期来看可能对您更好。
至于将这些数据提供给工作人员,您可以创建一个他们可以调用的网络路由,您可以在 test start 上执行此操作,或者您可以从主服务器向工作人员发送消息。Locust 文档中的示例:
from locust import events
from locust.runners import MasterRunner, WorkerRunner
# Fired when the worker recieves a message of type 'test_users'
def setup_test_users(environment, msg, **kwargs):
for user in msg.data:
print(f"User {user['name']} recieved")
environment.runner.send_message('acknowledge_users', f"Thanks for the {len(msg.data)} users!")
# Fired when the master recieves a message of type 'acknowledge_users'
def on_acknowledge(msg, **kwargs):
print(msg.data)
@events.init.add_listener
def on_locust_init(environment, **_kwargs):
if not isinstance(environment.runner, MasterRunner):
environment.runner.register_message('test_users', setup_test_users)
if not isinstance(environment.runner, WorkerRunner):
environment.runner.register_message('acknowledge_users', on_acknowledge)
@events.test_start.add_listener
def on_test_start(environment, **_kwargs):
if not isinstance(environment.runner, MasterRunner):
users = [
{"name": "User1"},
{"name": "User2"},
{"name": "User3"},
]
environment.runner.send_message('test_users', users)
推荐阅读
- php - 按分类分类的 Woocommerce 相关产品
- bash - 如何跳过这个循环?
- c# - 由 Hue 组织的颜色选择框
- java - 如何在java中将所有字母替换为下划线并忽略它们之间的空格
- c# - 如何在没有代码的情况下将选定的 TreeView 项传递给 RelayCommand
- ios - 如何创建循环动画?
- python - Python:Sqlalchemy.exc.OperationalError:
- automaton - 我如何在 UPPAAL 中重置我的自动机
- vba - 使用查找/替换后 Excel 日期格式更改
- python-3.x - 有选择地禁用 matplotlib 图上的 mplcursors