Locust 介紹篇


Locust介紹:

Locust作為基於Python語言的性能測試框架。

其優點在於他的並發量可以實現單機10倍於LoadRunner和Jmeter工具。他的工作原理為協程並發,也就是gevent庫。

Locust的缺點也顯而易見,他沒有友好的性能監控頁面,沒有任何關聯,參數化,檢查點之類的定義。他僅僅就是一個輕量級的框架,但是正因為如此,我們可以通過python成千上萬的庫支持,定制自己任何想要的東西!

 

安裝

通過pip 安裝locust

pip install locustio

 

樣例

簡單的Locust框架樣例:

Locust每生成一個實例都代表一個虛擬的用戶,用來發送請求到進行負載測試的系統。

該用戶的行為由task_set屬性定義,該屬性應指向一個 TaskSet類。

這個類通常應該由某些類繼承並且重新定義。

例如:

 1 from locust import Locust, TaskSet, task
 2  
 3 class WebsiteTasks(TaskSet):
 4     def on_start(self):
 5        pass 
 6 
 7     @task(1)
 8     def index(self):
 9        pass   
10    
11     @task(5)
12     def about(self):
13       pass
14 
15 class WebsiteUser(Locust):
16     task_set = WebsiteTasks
17     min_wait = 5000
18     max_wait = 15000

 

 

例如,當測試HTTP系統時,使用的HttpLocust類

 1 from locust import HttpLocust, TaskSet, task
 2 
 3 class MyTaskSet(TaskSet):
 4     @task(2)
 5     def index(self):
 6         self.client.get("/")
 7 
 8     @task(1)
 9     def about(self):
10         self.client.get("/about/")
11 
12 class MyLocust(HttpLocust):
13     task_set = MyTaskSet //測試集
14     min_wait = 5000 //單個請求下次發起的最小等待時間
15     max_wait = 15000 //單個請求下次發起的最大等待時間
    host = 'xxx' //指定測試目標地址

 

WebsiteTasks(TaskSet): 繼承TaskSet類,該類中主要為用戶自己設定的測試集

           TaskSet類中 :on_start是優先方法,他會優先於下面所有task方法。

                   :同樣 on_stop是結尾方法,會在結束時執行

           @task裝飾器,task中的數字是測試中,該測試方法在測試集中的權重

HttpLocust 和 Locust繼承類中:

  1.task_set 選擇需要的測試集,

  2.min and max wait取最大和最小等待區間值,取值為隨機

  3.host為指定測試目標地址

 

啟動

直接啟動:

locust --host=http://example.com

有文件路徑時:

locust -f locust_files/my_locust_file.py --host=http://example.com

 例子:

locust -f test.py --host=127.0.0.1

 

 

需要多機並發操作時,主機啟動:

locust -f locust_files/my_locust_file.py --master --host=http://example.com

輔助機器啟動:

locust -f locust_files/my_locust_file.py --slave --host=http://example.com

 

注意點:

啟動時,有的同學打開web后8089端口,頁面打不開,可以使用以下方式打開:

locust -f locustfile.py --web-host=127.0.0.1

無網頁啟動:

locust -f locustfile.py --no-web -r 5 -c 1 -t 5m

r表示總用戶數,c表示每秒增加用戶數,t表示執行時間

 

打開測試頁面

打開測試頁面,Locust默認的地址通常為:http://127.0.0.1:8089

設定總人數和每秒增加人數,然后點擊開始

 

結尾:

引用debug-talk一段對整個Locust比較准確的概述和總結:

Locust類中,具有一個client屬性,它對應着虛擬用戶作為客戶端所具備的請求能力,也就是我們常說的請求方法。通常情況下,我們不會直接使用Locust類,因為其client屬性沒有綁定任何方法。因此在使用Locust時,需要先繼承Locust類,然后在繼承子類中的client屬性中綁定客戶端的實現類。

對於常見的HTTP(S)協議,Locust已經實現了HttpLocust類,其client屬性綁定了HttpSession類,而HttpSession又繼承自requests.Session。因此在測試HTTP(S)Locust腳本中,我們可以通過client屬性來使用Python requests庫的所有方法,包括GET/POST/HEAD/PUT/DELETE/PATCH等,調用方式也與requests完全一致。另外,由於requests.Session的使用,因此client的方法調用之間就自動具有了狀態記憶的功能。常見的場景就是,在登錄系統后可以維持登錄狀態的Session,從而后續HTTP請求操作都能帶上登錄態

而對於HTTP(S)以外的協議,我們同樣可以使用Locust進行測試,只是需要我們自行實現客戶端。在客戶端的具體實現上,可通過注冊事件的方式,在請求成功時觸發events.request_success,在請求失敗時觸發events.request_failure即可。然后創建一個繼承自Locust類的類,對其設置一個client屬性並與我們實現的客戶端進行綁定。后續,我們就可以像使用HttpLocust類一樣,測試其它協議類型的系統。

原理就是這樣簡單!

 

 
 
 


免責聲明!

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



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