将参数从蝗虫用户传递到任务集参数的最佳方法是什么,其中任务集已分离到不同的文件中?

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 错误。

非常感谢@Cyber​​wiz 让我走上正轨。我终于设法弄清楚我做错了什么......事实证明,这是两件事。

首先,在 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