locust-TaskSet类vs函数任务

时间:2017-09-03 09:35:30

标签: 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有什么区别? 感谢

1 个答案:

答案 0 :(得分:0)

<强> TL; DR

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

详细说明

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

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

以下是嵌套TaskSet的相同设置:

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安排下一个任务。好。

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