将参数从蝗虫用户传递到任务集参数的最佳方法是什么,其中任务集已分离到不同的文件中?
What is the best way to pass arguments from a locust user to taskset parameters, where the tasksets have been separated to different files?
entry_point.py
from other_file import UserBehaviour
class ApiUser(HttpUser):
tasks = [UserBehaviour]
def on_start(self):
# log in and return session id and cookie
# example: self.foo = "foo"
other_file.py
from entry_point import ApiUser
class UserBehaviour(TaskSet):
@task
def do_something(self, session_id, session_cookie)
# use session id and session cookie from user instance running the taskset
# example: print(self.ApiUser.foo)
注意:通过文档,我确实发现“User 实例可以通过 TaskSet.user 从 TaskSet 实例中访问”,但是我所有的尝试将用户导入任务集文件导致 "cannot import name 'ApiUser' from 'entry_point'"
错误。如果我使用 from entry_point import *
而不是 from entry_point import ApiUser
,那么我会收到 name 'ApiUser' is not defined
错误。
非常感谢@Cyberwiz 让我走上正轨。我终于设法弄清楚我做错了什么......事实证明,这是两件事。
首先,在 other_file.py 中导入 ApiUser 是不正确的,原因有二:1) 它会产生循环依赖性,以及 2) 即使它最终会起作用,它也会导入 ApiUser class,而不是ApiUser 的实例 class.
其次,我之前收到 module locust.user has no attribute {name}
错误,那是因为我的代码如下所示:
class UserBehaviour(TaskSet):
# do something with user.foo
弄清楚了这一点后,老实说,我不知道为什么我认为上述方法可行。我更改了我的代码以反映下面的示例,现在一切正常:
class UserBehaviour(TaskSet):
@task
def do_something(self):
# do something with self.user.foo
entry_point.py
from other_file import UserBehaviour
class ApiUser(HttpUser):
tasks = [UserBehaviour]
def on_start(self):
# log in and return session id and cookie
# example: self.foo = "foo"
other_file.py
from entry_point import ApiUser
class UserBehaviour(TaskSet):
@task
def do_something(self, session_id, session_cookie)
# use session id and session cookie from user instance running the taskset
# example: print(self.ApiUser.foo)
注意:通过文档,我确实发现“User 实例可以通过 TaskSet.user 从 TaskSet 实例中访问”,但是我所有的尝试将用户导入任务集文件导致 "cannot import name 'ApiUser' from 'entry_point'"
错误。如果我使用 from entry_point import *
而不是 from entry_point import ApiUser
,那么我会收到 name 'ApiUser' is not defined
错误。
非常感谢@Cyberwiz 让我走上正轨。我终于设法弄清楚我做错了什么......事实证明,这是两件事。
首先,在 other_file.py 中导入 ApiUser 是不正确的,原因有二:1) 它会产生循环依赖性,以及 2) 即使它最终会起作用,它也会导入 ApiUser class,而不是ApiUser 的实例 class.
其次,我之前收到 module locust.user has no attribute {name}
错误,那是因为我的代码如下所示:
class UserBehaviour(TaskSet):
# do something with user.foo
弄清楚了这一点后,老实说,我不知道为什么我认为上述方法可行。我更改了我的代码以反映下面的示例,现在一切正常:
class UserBehaviour(TaskSet):
@task
def do_something(self):
# do something with self.user.foo