2017-09-03 63 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的下一個任務,好。

我不確定這是一個錯誤還是一個功能,因爲它在文檔中沒有具體提及。