前言
一直以來都是使用的工具壓測系統接口,常用JMETER ,后面學習python,發現還能用腳本去測試系統性能,迫不及待試了一次,記錄下
實施
安裝python環境是自然要的,加上配置環境變量啥的,這些網上一大把,這里就不詳述了。
要用到的python庫locust (官方文檔:Locust說明文檔)
一、認識Locust
1、定義
Locust是一款易於使用的分布式負載測試工具,完全基於事件,即一個locust節點也可以在一個進程中支持數千並發用戶,不使用回調,通過gevent使用輕量級過程(即在自己的進程內運行)。
# gevent是第三方庫,通過greenlet實現協程。greenlet是python的並行處理的一個庫。 python 有一個非常有名的庫叫做 stackless ,用來做並發處理, 主要是弄了個叫做tasklet的微線程的東西, 而greenlet 跟stackless的最大區別是greenlet需要你自己來處理線程切換, 就是說,你需要自己指定現在執行哪個greenlet再執行哪個greenlet。
2、特點
①、不需要編寫笨重的UI或者臃腫的XML代碼,基於協程而不是回調,腳本編寫簡單易讀;
②、有一個基於web簡潔的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 命令安裝;
②、安裝成功后可以輸入 pip show locust 命令查看是否安裝成功,以及通過 locust -help 命令查看幫助信息。
PS:運行大規模測試時,建議在Linux機器上執行此操作,因為gevent在Windows下的性能很差。
三、一個簡單的示例
locust里面請求是基於requests的,每個方法請求和requests差不多,請求參數、方法、響應對象和requests一樣的使用,之前學過requests庫的,這里就非常簡單了
- requests.get 對應client.get
- requests.post 對應client.post
1 from locust import HttpLocust,TaskSet,task 2 3 class Demo(TaskSet): 4 '''例子''' 5 @task(1) 6 def baidu(self): 7 url = '/huahuage/p/12917114.html' 8 header = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"} 9 req = self.client.get(url, headers=header, verify=False) 10 11 if req.status_code == 200: 12 print("success") 13 else: 14 print("fails") 15 16 class websitUser(HttpLocust): 17 task_set = Demo 18 min_wait = 3000 19 max_wait = 6000 20 21 if __name__=="__main__": 22 import os 23 os.system("locust -f demo.py --host=https://www.cnblogs.com")
腳本說明:
新建一個類Demo(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的介紹和簡單使用以及說明,更多詳細的內容請參考官方文檔。。。
(轉載)部分內容原文地址:https://www.cnblogs.com/imyalost/p/9758189.html