2017-09-03 29 views
1

我是新来的蝗虫,我试图写负载测试。 我想知道定义我想作为可调用函数执行的任务,而不是将它们定义为locust TaskSet类之间的区别。 例如:locust-TaskSet类vs功能任务

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之间的差异? 感谢

回答

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 

下面是相同的设置与嵌套TaskSets:

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的下一个任务,好。

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