4

我是 locust 的新手,我正在尝试编写负载测试。我想知道将我想要执行的任务定义为可调用函数而不是将它们定义为 locust TaskSet 类之间有什么区别。例如:

class MyTaskSet(TaskSet):
    @task(2)
    def index(self):
       self.client.get("/")

   @task(1)
      def about(self):
        self.client.get("/about/")

class MyLocust(HttpLocust):
    task_set = MyTaskSet

或者:

class about(TaskSet)
   @task
   def about(self):
        self.client.get("/about/")
        self.interrupter()

class index(TaskSet)
    @task
    def index(self)
        self.client.get("/")
        self.interrupter()

class MyTaskSet(TaskSet)
     tasks = {index:2 , about: 1}

class MyLocust(HttpLocust):
    task_set = MyTaskSet

上面2个有什么区别?谢谢

4

1 回答 1

4

TL;博士

两者在负载分配方面存在巨大差异。

详细解释

想象一下以下设置,其中一项任务比另一项慢得多:

class MyTaskSet(TaskSet):
    @task(2)
    def fast(self):
        self.locust.client.get("/api",name="fast_check")

    @task(1)
    def slow(self):
        time.sleep(1)
        self.locust.client.get("/api",name="slow_check")

class MyLocust(HttpLocust):
    task_set = MyTaskSet

下面是嵌套任务集的相同设置:

class Fast(TaskSet):
    @task(1)
    def fast(self):
        self.locust.client.get("/api",name="fast_check")

class Slow(TaskSet):
    @task(1)
    def slow(self):
        time.sleep(1)
        self.locust.client.get("/api",name="slow_check")


class MyTaskSet(TaskSet):
    tasks = {Fast:2 , Slow: 1}


class MyLocust(HttpLocust):
    task_set = MyTaskSet

当您运行这两个脚本时,您会注意到对于第一个设置,负载大致分布在您权衡任务时。1/3 的 HTTP 调用转到slow_check任务,2/3 转到fast_check任务。

但是,在第二个设置中,更多的 HTTP 调用会转到fast_check。根据 1/3-2/3 的权重,看起来好像 Locust(= 用户)被分配给 TaskSet,但由于 Locust 完成得更快,它可以更快地从 Fast TaskSet 安排下一个任务出色地。

我不确定这是错误还是功能,因为文档中没有具体提及。

于 2017-09-04T12:21:16.763 回答