【问题标题】:locust task method can't get the global value when "on_test_start" exist当“on_test_start”存在时,蝗虫任务方法无法获取全局值
【发布时间】:2021-09-13 08:57:56
【问题描述】:

我有一个 locust 脚本中的任务,在运行数百个用户的任务之前,我希望另一个操作可以更改 var "user_var",以便在任务运行时可以使用 "user_var" 的新值。

但不幸的是,当我运行脚本时,结果是不同的。 on_test_start 中的“user_var”已被更改,在任务中,它的值仍然为零。

我打印了var id,它不一样。那么发生了什么,有人可以告诉我吗?谢谢

代码如下

base_url="http://baidu.com"
user_var = 0
print("init  var id:{}".format(id(user_var)))


@events.test_start.add_listener
def on_test_start(environment,**kwargs):
    global  user_var
    user_var = 1
    print("method  var id:{}".format(id(user_var)))
    print("user_var:{}".format(user_var))


class MyService(HttpUser):
    wait_time=between(1,2)
    @task()
    def points_acquire(self):
        print("class var id:{}".format(id(user_var)))
        print("user_var:{}".format(user_var))


if __name__=='__main__':
    run_script=os.path.basename(__file__)
    master_cmd='start locust -f {} --host={} --master '.format(run_script,base_url)
    worker_cmd=' && start locust -f {}  --worker'.format(run_script)
    total_cmd=master_cmd+worker_cmd*1
    os.system(total_cmd)

【问题讨论】:

  • events.test_start 过去不会在 master 上触发。它已修复,可能在 2.0 或其他版本中。

标签: global-variables locust


【解决方案1】:

根据事件的定义:

""" 在开始新的负载测试时触发。它不会再次被解雇,如果数量 用户在测试期间发生变化。运行 locust 分发时,仅触发事件 在主节点上,而不是在每个工作节点上。 """

https://docs.locust.io/en/1.4.0/writing-a-locustfile.html#test-start-and-test-stop

因此,您将变量初始化为 0,并且事件不会在工作节点中触发,因此它保持为 0,在主节点中,事件会触发并更改值。

编辑:这背后的逻辑似乎已经改变,因为我上次检查它可能会工作,如果你更新你的蝗虫版本

【讨论】:

  • 升级到2.2.1后得到了预期的结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多