我我的在性能測試工做中,負載生成工具使用的大多都是jmeter,以前學習python時順帶了解過python開源的性能測試框架locust。html
這篇博客,簡單介紹下locust的使用方法,僅供參考。。。python
官方文檔:Locust說明文檔web
1、認識Locust瀏覽器
一、定義安全
Locust是一款易於使用的分佈式負載測試工具,徹底基於事件,即一個locust節點也能夠在一個進程中支持數千併發用戶,不使用回調,經過gevent使用輕量級過程(即在本身的進程內運行)。網絡
二、特色併發
①、不須要編寫笨重的UI或者臃腫的XML代碼,基於協程而不是回調,腳本編寫簡單易讀;框架
②、有一個基於we簡潔的HTML+JS的UI用戶界面,能夠實時顯示相關的測試結果;分佈式
③、支持分佈式測試,用戶界面基於網絡,所以具備跨平臺且易於擴展的特色;函數
④、全部繁瑣的I / O和協同程序都被委託給gevent,替代其餘工具的侷限性;
三、locust與jmeter的區別
工具 | 區別 |
jmeter | 須要在UI界面上經過選擇組件來「編寫」腳本,模擬的負載是線程綁定的,意味着模擬的每一個用戶,都須要一個單獨的線程。單臺負載機可模擬的負載數有限 |
locust | 經過編寫簡單易讀的代碼完成測試腳本,基於事件,一樣配置下,單臺負載機可模擬的負載數遠超jmeter |
PS:但locust的侷限性在於,目前其自己對測試過程的監控和測試結果展現,不如jmeter全面和詳細,須要進行二次開發才能知足需求愈來愈複雜的性能測試須要。
2、安裝Locust
一、支持的python版本:2.七、3.四、3.五、3.6;
二、Windows系統安裝locust
①、直接經過 pip install locustio 命令安裝;
②、經過爲pyzmq、gevent和greenlet安裝預先構建的二進制包,而後在這裏找到非官方的預製包,下載.whl文件後,使用 pip install name-of-file.whl 命令安裝;
安裝成功後能夠輸入 pip show locust 命令查看是否安裝成功,以及經過 locust -help 命令查看幫助信息。
PS:運行大規模測試時,建議在Linux機器上執行此操做,由於gevent在Windows下的性能不好。
3、一個簡單的示例
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設置爲任意函數來使用任何用戶定義的時間分佈。
4、啓動Locust
一、若是啓動的locust文件名爲locustfile.py並位於當前工做目錄中,能夠在編譯器中直接運行該文件,或者經過cmd,執行以下命令:
locust --host=https://www.cnblogs.com
二、若是Locust文件位於子目錄下且名稱不是locustfile.py,可使用-f命令啓動上面的示例locust文件:
locust -f testscript/locusttest.py --host=https://www.cnblogs.com
三、若是要運行分佈在多個進程中的Locust,經過指定-master
如下內容來啓動主進程 :
locust -f testscript/locusttest.py --master --host=https://www.cnblogs.com
四、若是要啓動任意數量的從屬進程,能夠經過-salve命令來啓動locust文件:
locust -f testscript/locusttest.py --salve --host=https://www.cnblogs.com
五、若是要運行分佈式Locust,必須在啓動從機時指定主機(運行分佈在單臺機器上的Locust時不須要這樣作,由於主機默認爲127.0.0.1):
locust -f testscript/locusttest.py --slave --master-host=192.168.0.100 --host=https://cnblogs.com
六、啓動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+端口便可;
5、locust的UI界面
一、啓動界面
Number of users to simulate:設置模擬的用戶總數
Hatch rate (users spawned/second):每秒啓動的虛擬用戶數
Start swarming:執行locust腳本
二、測試結果界面
PS:點擊STOP能夠中止locust腳本運行:
Type:請求類型,即接口的請求方法;
Name:請求路徑;
requests:當前已完成的請求數量;
fails:當前失敗的數量;
Median:響應時間的中間值,即50%的響應時間在這個數值範圍內,單位爲毫秒;
Average:平均響應時間,單位爲毫秒;
Min:最小響應時間,單位爲毫秒;
Max:最大響應時間,單位爲毫秒;
Content Size:全部請求的數據量,單位爲字節;
reqs/sec:每秒鐘處理請求的數量,即QPS;
三、各模塊說明
New test:點擊該按鈕可對模擬的總虛擬用戶數和每秒啓動的虛擬用戶數進行編輯;
Statistics:相似於jmeter中Listen的聚合報告;
Charts:測試結果變化趨勢的曲線展現圖,分別爲每秒完成的請求數(RPS)、響應時間、不一樣時間的虛擬用戶數;
Failures:失敗請求的展現界面;
Exceptions:異常請求的展現界面;
Download Data:測試數據下載模塊, 提供三種類型的CSV格式的下載,分別是:Statistics、responsetime、exceptions;
以上即爲locust的介紹和簡單使用以及說明,更多詳細的內容請參考官方文檔。。。