性能測試工具Locust的使用----TaskSet類~~task任務嵌套


內容來自網絡

http://blog.sina.com.cn/s/blog_a7ace3d80102w9r0.html

 

TaskSet類

正如字面意思,TaskSet類定義了每個用戶的任務集合,測試任務開始后,每個Locust用戶會從TaskSet中隨機挑選(如果定義了任務間的權重關系,那么就是按照權重關系隨機挑選)一個任務執行,然后隨機等待Locust類中定義的min_wait和max_wait(如果TaskSet類中也定義了min_wait或者max_wait,按照TaskSet中的為准)之間的一段時間,執行下一個任務。 

定義TaskSet中的任務有多種方式,比如使用@task修飾符、使用tasks屬性。 

 1 from locust import Locust, TaskSet, task
 2 
 3 class UserTask(TaskSet):
 4     @task(1)
 5     def job1(self):
 6         print 'This is job 1'
 7 
 8     @task(2)
 9     def job2(self):
10         print 'This is job 2'
11 
12 class User(Locust):
13     task_set = UserTask

TaskSet的定義是可以嵌套的,因為考慮到現實中有很多任務其實也是有嵌套結構的,比如:

 1 from locust import Locust, TaskSet, task
 2 
 3 class UserTask(TaskSet):
 4     @task(2)
 5     class stay(TaskSet):
 6         @task(3)
 7         def readBook(self):
 8             print 'I am reading a book.'
 9 
10         @task(7)
11         def listenMusic(self):
12             print 'I am listening to music.'
13 
14         @task(1)
15         def logOut(self):
16             self.interrupt()
17 
18     @task(1)
19     def leave(self):
20         print 'I don not like this page.'
21 
22 class User(Locust):
23     task_set = UserTask

上面的例子中,要么用戶不喜歡這個網頁直接離開,要么喜歡就留下來,留下來的話,可以選擇看書、聽音樂、或者離開。

在stay這個類中,對interrupt()方法的調用是非常重要的,這可以讓一個用戶跳出stay這個類有機會執行leave這個任務,否則他一旦進入stay任務就會一直在看書或者聽音樂而難以自拔。

除了使用@task修飾符完成嵌套,也可以使用tasks屬性,效果是一樣的:

 1 from locust import Locust, TaskSet, task
 2 
 3 class stay(TaskSet):
 4     @task(3)
 5     def readBook(self):
 6         print 'I am reading a book.'
 7 
 8     @task(7)
 9     def listenMusic(self):
10         print 'I am listening to music.'
11 
12     @task(1)
13     def logOut(self):
14         self.interrupt()
15 
16 class UserTask(TaskSet):
17     tasks = {stay:2}
18 
19     @task(1)
20     def leave(self):
21         print 'I don not like this page.'
22 
23 class User(Locust):
24     task_set = UserTask

TaskSet類還有其他的有用方法:

  • on_start()函數 
    定義每個locust用戶進入TaskSet之后開始做的第一件事。
  • locust屬性 
    指向每個TaskSet所屬的loucst用戶實例。
  • parent屬性 
    指向每個TaskSet所屬的父類TaskSet,用在TaskSet有嵌套的情況,如果調用parent的TaskSet是最頂層的,則返回它所屬的locust用戶實例。
  • client屬性 
    指向TaskSet所屬的父HttpLocust類的client屬性,self.client與self.locust.client效果是一樣的。如果TaskSet所屬的父類是個Locust類,則沒有這個client屬性。 
  • interrupt(reschedule=True) 
    頂層的TaskSet(即被綁定到某個Locust類的task_set的第一層TaskSet)不能調用這個方法。reschedule置為True時,從被嵌套任務出來馬上選擇新任務執行,如果置為False,從被嵌套任務出來后,隨機等待min_wait和max_wait之間的一段時間,再選擇新任務執行。
  • schedule_task(task_callable, args=None, kwargs=None, first=False) 
    將一個可調用的對象task_callable添加進Locust對象(注意是針對某個Locust實例,而不是所有的Locust實例)的任務選擇隊列,其中args和kwargs是傳遞給可調用對象的參數,如果first置為True,則將其加到隊首。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM