Jmeter分佈式壓測

一、什麼是壓力測試?
壓力測試(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、內存損耗。

 
六、Jmeter分佈式壓測前的準備工作
(1)確保master和各個slave上使用相同版本的JMeter 和 Java。混合版本將無法正常工作。

(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)啟動jar包

 

 

2、阿里雲linux服務器下安裝啟動jdk8並配置環境變量

 

 

3、部署Java項目到阿里元服務器,守護進程講解

 

守護進程也稱精靈進程(Daemon),是運行在後台的一種特殊進程。它獨立於控制終端並且周期性地執行某種任務或等待處理某些發生的事件。它不受用戶登錄註銷的影響,它們一直在運行着。

 

4、阿里雲liunx服務器上安裝Jmeter

下載:wget //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分佈式壓實戰

 

 

八、系統架構學習