当 "on_test_start" 存在时,蝗虫任务方法无法获取全局值

locust task method can't get the global value when "on_test_start" exist

我在 Locust 脚本中有一个任务,在任务 运行 数百个用户之前,我希望另一个操作可以更改变量“user_var”,以便“user_var”当任务 运行.

时可以使用 s 的新值

但不幸的是,当我运行脚本时,结果是不同的。 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)

根据事件的定义:

""" Fired when a new load test is started. It's not fired again if the number of users change during a test. When running locust distributed the event is only fired on the master node and not on each worker node. """

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

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

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