我個人在性能測試工作中,負載生成工具使用的大多都是jmeter,之前學習python時順帶了解過python開源的性能測試框架locust。
這篇博客,簡單介紹下locust的使用方法,僅供參考。。。
官方文檔:Locust說明文檔
一、認識Locust
1、定義
Locust是一款易於使用的分布式負載測試工具,完全基於事件,即一個locust節點也可以在一個進程中支持數千並發用戶,不使用回調,通過gevent使用輕量級過程(即在自己的進程內運行)。
2、特點
①、不需要編寫笨重的UI或者臃腫的XML代碼,基於協程而不是回調,腳本編寫簡單易讀;
②、有一個基於we簡潔的HTML+JS的UI用戶界面,可以實時顯示相關的測試結果;
③、支持分布式測試,用戶界面基於網絡,因此具有跨平台且易於擴展的特點;
④、所有繁瑣的I / O和協同程序都被委托給gevent,替代其他工具的局限性;
3、locust與jmeter的區別
工具 | 區別 |
jmeter | 需要在UI界面上通過選擇組件來“編寫”腳本,模擬的負載是線程綁定的,意味着模擬的每個用戶,都需要一個單獨的線程。單台負載機可模擬的負載數有限 |
locust | 通過編寫簡單易讀的代碼完成測試腳本,基於事件,同樣配置下,單台負載機可模擬的負載數遠超jmeter |
PS:但locust的局限性在於,目前其本身對測試過程的監控和測試結果展示,不如jmeter全面和詳細,需要進行二次開發才能滿足需求越來越復雜的性能測試需要。
二、安裝Locust
1、支持的python版本:2.7、3.4、3.5、3.6;
2、Windows系統安裝locust
①、直接通過 pip install locustio 命令安裝;
②、通過為pyzmq、gevent和greenlet安裝預先構建的二進制包,然后在這里找到非官方的預制包,下載.whl文件后,使用 pip install name-of-file.whl 命令安裝;
安裝成功后可以輸入 pip show locust 命令查看是否安裝成功,以及通過 locust -help 命令查看幫助信息。
PS:運行大規模測試時,建議在Linux機器上執行此操作,因為gevent在Windows下的性能很差。
三、一個簡單的示例
locust的腳本里,模擬負載的請求和python的requests庫使用方法基本一樣,示例如下:
1 # coding=utf-8
2 import requests 3 from locust import HttpLocust,TaskSet,task 4 from requests.packages.urllib3.exceptions import InsecureRequestWarning 5 # 禁用安全請求警告
6 requests.packages.urllib3.disable_warnings(InsecureRequestWarning) 7
8 class MyBlogs(TaskSet): 9 # 訪問我的博客首頁
10 @task(1) 11 def get_blog(self): 12 # 定義請求頭
13 header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"} 14
15 req = self.client.get("/imyalost", headers=header, verify=False) 16 if req.status_code == 200: 17 print("success") 18 else: 19 print("fails") 20
21 class websitUser(HttpLocust): 22 task_set = MyBlogs 23 min_wait = 3000 # 單位為毫秒
24 max_wait = 6000 # 單位為毫秒
25
26 if __name__ == "__main__": 27 import os 28 os.system("locust -f locusttest.py --host=https://www.cnblogs.com")
腳本說明:
新建一個類MyBlogs(TaskSet),繼承TaskSet,該類下面寫需要請求的接口以及相關信息;
self.client調用get和post方法,和requests一樣;
@task裝飾該方法表示為用戶行為,括號里面參數表示該行為的執行權重:數值越大,執行頻率越高,不設置默認是1;
WebsiteUser()類用於設置生成負載的基本屬性:
屬性 | 說明 |
task_set | 指向定義了用戶行為的類 |
min_wait | 模擬負載的任務之間執行時的最小等待時間,單位為毫秒 |
max_wait | 模擬負載的任務之間執行時的最大等待時間,單位為毫秒 |
PS:默認情況下,時間是在min_wait和max_wait之間隨機選擇,但是可以通過將wait_function設置為任意函數來使用任何用戶定義的時間分布。
四、啟動Locust
1、如果啟動的locust文件名為locustfile.py並位於當前工作目錄中,可以在編譯器中直接運行該文件,或者通過cmd,執行如下命令:
locust --host=https://www.cnblogs.com
2、如果Locust文件位於子目錄下且名稱不是locustfile.py,可以使用-f命令啟動上面的示例locust文件:
locust -f testscript/locusttest.py --host=https://www.cnblogs.com
3、如果要運行分布在多個進程中的Locust,通過指定-master
以下內容來啟動主進程 :
locust -f testscript/locusttest.py --master --host=https://www.cnblogs.com
4、如果要啟動任意數量的從屬進程,可以通過-salve命令來啟動locust文件:
locust -f testscript/locusttest.py --salve --host=https://www.cnblogs.com
5、如果要運行分布式Locust,必須在啟動從機時指定主機(運行分布在單台機器上的Locust時不需要這樣做,因為主機默認為127.0.0.1):
locust -f testscript/locusttest.py --slave --master-host=192.168.0.100 --host=https://cnblogs.com
6、啟動locust文件成功后,編譯器控制台會顯示如下信息:
[2018-10-09 01:01:44,727] IMYalost/INFO/locust.main: Starting web monitor at *:8089
[2018-10-09 01:01:44,729] IMYalost/INFO/locust.main: Starting Locust 0.8
PS:8089是該服務啟動的端口號,如果是本地啟動,可以直接在瀏覽器輸入http://localhost:8089打開UI界面,如果是其他機器搭建locust服務,則輸入該機器的IP+端口即可;
五、locust的UI界面
1、啟動界面
Number of users to simulate:設置模擬的用戶總數
Hatch rate (users spawned/second):每秒啟動的虛擬用戶數
Start swarming:執行locust腳本
2、測試結果界面
PS:點擊STOP可以停止locust腳本運行:
Type:請求類型,即接口的請求方法;
Name:請求路徑;
requests:當前已完成的請求數量;
fails:當前失敗的數量;
Median:響應時間的中間值,即50%的響應時間在這個數值范圍內,單位為毫秒;
Average:平均響應時間,單位為毫秒;
Min:最小響應時間,單位為毫秒;
Max:最大響應時間,單位為毫秒;
Content Size:所有請求的數據量,單位為字節;
reqs/sec:每秒鍾處理請求的數量,即QPS;
3、各模塊說明
New test:點擊該按鈕可對模擬的總虛擬用戶數和每秒啟動的虛擬用戶數進行編輯;
Statistics:類似於jmeter中Listen的聚合報告;
Charts:測試結果變化趨勢的曲線展示圖,分別為每秒完成的請求數(RPS)、響應時間、不同時間的虛擬用戶數;
Failures:失敗請求的展示界面;
Exceptions:異常請求的展示界面;
Download Data:測試數據下載模塊, 提供三種類型的CSV格式的下載,分別是:Statistics、responsetime、exceptions;
以上即為locust的介紹和簡單使用以及說明,更多詳細的內容請參考官方文檔。。。