【问题标题】:Locust - How do I define multiple task sets for the same user?Locust - 如何为同一用户定义多个任务集?
【发布时间】:2020-08-24 11:34:51
【问题描述】:

请考虑以下代码:

class Task1(TaskSet):
    @task
    def task1_method(self):
        pass


class Task2(TaskSet):
    @task
    def task2_method(self):
        pass


class UserBehaviour(TaskSet):
    tasks = [Task1, Task2]


class LoggedInUser(HttpUser):
    host = "http://localhost"
    wait_time = between(1, 5)
    tasks = [UserBehaviour]

当我只用一个用户执行上面的代码时,方法 Task2.Method 永远不会被执行,只有来自 Task1 的方法。

我可以做些什么来确保两个任务的代码都为同一个用户执行?

我想这样做是因为我想将任务分成不同的文件以便更好地组织项目。如果这是不可能的,我怎样才能将任务定义到不同的文件中,以便我可以为每个应用程序模块定义任务?

【问题讨论】:

    标签: python-3.x locust


    【解决方案1】:

    我想我明白了。为了解决这个问题,我不得不在每个任务集的末尾添加一个方法来停止任务集的执行:

      def stop(self):
        self.interrupt()
    

    除此之外,我必须将继承的类更改为SequentialTaskSet,以便所有任务按顺序执行。

    这是完整的代码:

    class Task1(SequentialTaskSet):
        @task
        def task1_method(self):
            pass
        @task
        def stop(self):
            self.interrupt()
    
    
    class Task2(SequentialTaskSet):
        @task
        def task2_method(self):
            pass
        @task
        def stop(self):
            self.interrupt()
    
    
    class UserBehaviour(SequentialTaskSet):
        tasks = [Task1, Task2]
    
    
    class LoggedInUser(HttpUser):
        host = "http://localhost"
        wait_time = between(1, 5)
        tasks = [UserBehaviour]
    

    现在似乎一切正常。

    【讨论】:

      【解决方案2】:

      起初我认为这是一个错误,但实际上它是预期的(虽然我不明白为什么它是这样实现的)

      关于 TaskSet 的一件重要事情是,它们永远不会 停止执行他们的任务,并将执行权交还给他们 父用户/任务集,他们自己。这必须由 开发者通过调用 TaskSet.interrupt() 方法。

      https://docs.locust.io/en/stable/writing-a-locustfile.html#interrupting-a-taskset

      我会通过继承来解决这个问题:定义一个具有常见任务的基本 TaskSet 或 User 类,然后将其子类化,添加特定于用户类型的任务/代码。

      如果您定义了一个基本 User 类,如果您不希望 Locust 也运行该用户,请记住设置 abstract = True

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-06-08
        • 2018-07-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-06
        • 2010-09-09
        相关资源
        最近更新 更多