一、什麼是壓力測試?
壓力測試(Stress Test),也稱為強度測試、負載測試,屬於效能測試的範疇。
壓力測試是模擬實際應用的軟硬體環境及使用者使用過程的系統負荷,長時間或超大負荷地執行被測軟體系統,來測試被測系統的效能、可靠性、穩定性等。一定負載的情況下,長時間執行被測軟體系統,稱為穩定性測試;超大負荷地執行被測軟體系統稱為極限壓力測試。
二、什麼是分散式測試?
分散式測試是指通過區域網和Internet,把分佈於不同地點、獨立完成特定功能的測試計算機連線起來,以達到測試資源共用、分散操作、集中管理、協同工作、負載均衡、測試過程監控等目的的計算機網路測試。
三、為什麼要使用分散式壓力測試?
普通壓力測試一般是採用單臺機器對目標伺服器產生的壓力,因為受限於CPU、記憶體、網路、IO等因素的影響,通常只能模擬幾十到幾百使用者的並行存取。分散式壓測是利用多臺機器同時向目標伺服器產生壓力,可以模擬幾萬到上億級別使用者的並行存取。
四、主流壓力測試工具對比
(1)Webbench:開源,由Lionbridge公司開發,主要測試每秒鐘請求數和每秒鐘資料傳輸量,同時支援靜態、動態、SSL。部署簡單,靜、動態均可測試。適用於小型網站壓力測試(單例最多可模擬3萬並行)。
(2)Apache bench: 開源, Apache自帶的壓力測試工具,主要用於測試網站每秒鐘處理請求個數。多見用於靜態壓力測試,功能較弱,非專業壓力測試工具。
(3)Tcpcopy: 開源 ,基於底層應用請求複製,可轉發各種線上請求到測試伺服器,具有分散式壓力測試功能,所測試資料與實際生產資料較為接近。主要用於中大型壓力測試,所有基於 tcp的packets均可測試。
(4)Loadrunner :付費/破解版本, 壓力測試界的泰斗,可以建立虛擬使用者,可以模擬使用者真實存取流程從而錄製成指令碼,其測試結果也最為逼真。模擬最為逼真,並可進行獨立的單元測試,但是部署設定較為複雜,需要專業人員才可以。
(5)JMeter: 開源免費, Jmeter 是一款使用Java開發的,開源免費的測試工具, 主要用來做功能測試和效能測試(壓力測試/負載測試).,而且用Jmeter 來測試 Restful API,非常好用。
(6)WeTest :付費, 騰訊出品的線上伺服器壓力工具, 最高可模擬億級並行,可實時檢視效能資料包表,提供專家級效能優化建議。我們通常要分析的效能資料,如TPS,線上使用者數,事務數,網路頻寬,吞吐量,CPU,記憶體,磁碟IO等,報告裡都有。
(7)PTS:付費, 阿里雲出品的PTS(Performance Testing Service)是面向所有技術相關背景人員的雲化效能測試工具,有別於傳統工具的繁複,PTS以網際網路化的互動,面向分散式和雲化的設計,更適合當前的主流技術架構。無論是自研還是適配開源的功能,PTS都可以輕鬆模擬大量使用者存取業務的場景,任務隨時發起,免去搭建和維護成本。更是緊密結合監控類產品提供一站式監控、定位等附加價值,高效檢驗和管理業務效能。
五、Jmeter分散式壓測原理
(1)先了解幾個專業術語
控制器節點(Controller Node),又叫Master:執行 JMeter GUI 的系統,它控制測試。
工作節點(Worker Nodes),又叫Slave:執行jmeter-server的系統,它從 GUI 接收命令並將請求傳送到目標系統。
目標(Target):計劃進行測試的網路伺服器。
(2)原理:控制器節點啟動時將壓測指令碼分發到各個工作節點上,然後通過遠端啟動各個工作節點,共同向目標伺服器傳送請求(產生壓力)。測試結束以後,各個工作節點主動將壓測資料回傳給控制器節點,由控制器節點統一彙總資料,並輸出測試報告。
注意兩點:
(1)master和各個slave機器必須使用同一區域網,儘可能減少網路頻寬的影響。
(2)使用非GUI模式,避免不必要的cpu、記憶體損耗。
(2)master和各個slave的防火牆已關閉或開啟了正確的埠,且埠未被佔用。
(3)master和各個slave上安裝的防毒軟體已關閉。
(4)master和各個slave在同一個子網內,儘量減少網路頻寬的影響,減少時延問題。如果是多網路卡環境需要保證啟動的網路卡都在同一個網段。
(5)確保 JMeter 可以存取伺服器,可以使用ping命令檢視。
(6)已經為 RMI 設定了 SSL或禁用了它。
(7)master和各個slave上安裝Jmeter全部啟動成功。
(8)如果壓測指令碼有依賴的測試資料,測試資料檔案需要複製一份到Worker Nodes上,且檔案路徑必須Controller Node中一致。
(9)如果使用雲伺服器進行壓測,一定要使用內網IP,不能使用公網IP,先使用ping命令檢查網路是否通暢。
(10)壓力測試瓶頸大都在頻寬上面,需要保證slave的頻寬要比Target的頻寬高,不然壓力上不去。
七、阿里雲伺服器上進行分散式壓測
1、使用SpringBoot介面打包,並用jar包方式部署
(1)打包
2、阿里雲linux伺服器下安裝啟動jdk8並設定環境變數
3、部署Java專案到阿里元伺服器,守護行程講解
守護行程也稱精靈程序(Daemon),是執行在後臺的一種特殊程序。它獨立於控制終端並且週期性地執行某種任務或等待處理某些發生的事件。它不受使用者登入登出的影響,它們一直在執行著。
4、阿里雲liunx伺服器上安裝Jmeter
下載:wget https://archive.apache.org/dist/jmeter/binaries/apache-jmeter-5.1.tgz
解壓:tar -zxvf apache-jmeter-5.1.tgz
拓展:
5、Jmeter非GUI介面引數講解
FileZilla是一個免費開源的適合Windows、Mac和Linux的FTP使用者端軟體。FileZilla特點是:免費、跨平臺、易用、下載速度非常快、功能齊全。
6、專案實戰之阿里雲linux伺服器下非GUI介面執行Jmeter壓測指令碼
(1)Jmeter視覺化介面開發壓測指令碼
(2)匯出壓測指令碼linux_users_api.jmx儲存在本地
(3)使用FileZilla工具將本地指令碼上傳到阿里雲伺服器上Jmeter安裝路徑的bin目錄下
(4)執行壓測指令碼,檢視紀錄檔:
7、Jmeter壓測實戰之jtl檔案(壓測結果檔案)生成和檢視
(1)使用FileZilla工具將阿里雲伺服器上的result.jtl檔案下載到本地(直接拖拽到本地桌面)
(2)在本地開啟Jmeter工具,Thread Group—>Add Listener—>Summary Report
(3)點選【Browse】,選擇下載到本地桌面的result.jtl檔案,開啟。
8、Jmeter壓測介面的效能優化
官網檔案說明如下:
翻譯下就是:
(1)使用非GUI模式:jmeter -n -t test.jmx -l test.jtl
(2)儘可能少低使用監聽器,如果在監聽器之前使用-l 標誌,可以刪除或禁用它們。
(3)在負載測試期間不要使用「檢視結果樹」或「聚合報告」監聽器,僅在指令碼編寫階段使用它們來偵錯指令碼。
(4)不要使用大量類似的取樣器,而是在迴圈中使用相同的取樣器,並使用變數(CSV資料集)來改變樣本。[此處包含控制器沒有幫助,因為它將檔案中的所有測試元素新增到測試計劃中。
(5)不要使用功能模式。
(6)使用CSV輸出而不是XML。
(7)只儲存您需要的資料。
(8)使用盡可能少的斷言。
(9)使用效能最好的指令碼語言(請參閱JSR223部分)
(10)如果您的測試需要大量資料(特別是需要亂資料),請在可以使用CSV資料集讀取的檔案中建立測試資料。這避免了在執行時浪費資源。
9、Jmeter壓測生成多維度圖形化壓測報告
(1)進度到bin目錄下,執行上述指令,路徑按自己實際情況來。
(2)將result目錄打包成,result.tar.gz
(3)使用FileZilla工具下載本地解壓
(4)找到index.html檔案後,拖拽到瀏覽器中開啟。
10、Jmeter圖形化壓測報告dashboard講解
11、Jmeter圖形化壓測報告Charts講解
12、阿里雲Jmeter分散式壓測常見問題處理
13、阿里雲Jmeter分散式壓實戰
八、系統架構學習