1

我正在与蝗虫一起工作,并且正在模仿用户的行为。但是我在访问父类变量时遇到了麻烦。知道如何通过吗?

class User(TaskSet):
  some_user = ''

  def on_start(self):
    self.get_user()

  def get_user(self):
    some_user = self.client.get...#gets user

  @task
  class UpdatingUser(TaskSet):
    def updating(self):
      path = "/posts/" + User.some_user

当我到达 User.some_user 时,我从未拥有过该用户。

4

2 回答 2

1

您尚未提供所有代码,但问题可能是在某处get_user()设置some_user实例属性self.some_user = foo,如.

这只会some_userUser然而的特定实例设置(所以对于 Bob、Lisa、Beto、User53 等),而不是为User类本身设置。使用 访问some_userself,如在 中self.some_user,您将其设置为执行这些语句的特定实例,而不是类。在updating()您访问的是class 属性 User.some_user,而不是特定的实例属性,例如usr53.some_user. 为了更新类属性,默认情况下对于所有实例都是不变的User,你应该用User.some_user = fooin设置它get_user()

现在path = "/posts/" + User.some_user,它正在尝试访问可能从未设置过的类属性。因为像这样的嵌套类UpdatingUser不能访问User调用它们的嵌套类 ()的实例,所以UpdatingUser不能访问任何some_user带有. 所以解决方案是设置类属性而不是上一段中描述的实例属性。selfUserget_user()

于 2015-11-25T06:24:43.260 回答
0

这个答案有点晚了,但是,如果有人有这个问题,TaskSet有一个parent属性,可以用来访问父级的实例变量。以下是我用于基本一次性登录的内容:

class UserBehaviour(TaskSet):
    def on_start(self):
        self.token = self.login()
        self.headers = {'Authorization': 'Bearer ' + self.token}

    def login(self):
        with self.client.post("/login", catch_response = True) as response:
            return response.json()['token']

    @task
    class UserTask1(TaskSet):
        @task
        def get_data(self):
            self.client.get("/data", headers = self.parent.headers)

class WebsiteUser(HttpLocust):
    task_set = UserBehaviour
于 2019-05-22T16:22:34.887 回答