jmeter命令行運行-分布式測試


上一篇文章我們說到了jmeter命令行運行但是是單節點下的, jmeter底層用java開發,耗內存、cpu,如果項目要求大並發去壓測服務端的話,jmeter單節點難以完成大並發的請求,這時就需要對jmeter進行分布式測試:

1:先說說分布式測試原理

處理過程:

一:調度機master啟動以后,會拷貝本地的jmx文件分發到遠程的slave機器上;

二:slave機器拿到腳本以后啟動命令行模式去執行腳本,對於每台slave機器拿到的腳本都是一樣的,所以如果jmx腳本為50個線程跑3分鍾,那么實際並發就是50*3=150個線程並發跑3分鍾;

三:執行時,slave會把執行獲得的數據結果傳給master機器,master機器會收集所有slave機器的信息並匯總,這樣master機器上就存在一份所有slave機器匯總的數據結果。

 

注意事項:

一:我們注意到master機器啟動后會拷貝jmx文件到slave機器,所以我們不需要在每台slave機器上也上傳一份jmx,只需要在master機器上上傳一份jmx腳本即可。

二:參數化文件:如果使用csv進行參數化,那么需要把參數文件在每台slave上拷一份且路徑需要設置成一樣的。

三:調度機(master)和執行機(slave)最好分開,由於master需要發送信息給slave並且會接收slave回傳回來的測試數據,所以mater自身會有消耗,所以建議單獨用一台機器作為master。

四:保證每台機器的jmeter版本和插件版本相同,避免造成一些意外問題。

五:分布式測試總樣本數 = 線程數 * 循環次數 * 執行機總數, 樣本計數邏輯為:執行機slave執行的測試腳本是由調度機master分發的,故每台執行機執行的測試腳本都是相同的,故而性能測試總樣本數 = 測試腳本樣本數 * 執行機總數,而測試腳本樣本數為線程數 * 循環次數

 

2:說完了原理,現在我們來說如何做jmeter分布式測試

  • 在所有需要做分布式的機器上部署java和jmeter,要求需要保證每台機器上部署的jmeter版本相同插件版本也相同,最好部署在同一路徑下(這樣如果有csv參數化比較方便)

部署jmeter很簡單,只需從官網下載相應版本然后傳到服務器上進行解壓縮就可以了這里給出我的雲盤地址:http://pan.baidu.com/s/1bI3r2I 密碼:f5ll

比如我部署在134.64.14.95、134.64.14.96、134.64.14.97、134.64.14.98四台機器上,每台機器部署路徑為:/home/tester

 

  • 修改slave機器bin目錄下的jmeter.properties配置,我的3台slave機器為:134.64.14.96、134.64.14.97、134.64.14.98

修改3台slave機器jmeter/bin目錄下的jmeter.properties中server_port端口號為機器未被占用的端口號,一般默認為1099,此處我修改為7899(可以使用默認端口或者改成其他端口,只要未被占用就行),remote_hosts為127.0.0.1不需要修改

修改完成保存,我配置的3台機器為:

134.64.14.96機器(remote_hosts:127.0.0.1、server_port:7899)

134.64.14.97機器(remote_hosts:127.0.0.1、server_port:7899)

134.64.14.98機器(remote_hosts:127.0.0.1、server_port:7899)

 

  • 完成slave機器的配置后,此時配置master機器,我的1台master機器為134.64.14.95

注意到由於master機器作為調度機本身會有一定的性能消耗所以我們配置遠程執行機的時候並沒有把master機器配置進去,只配置了3台執行機

修改完成保存,我配置的1台機器為:

134.64.14.95機器(remote_hosts:134.64.14.96:7899,134.64.14.97:7899,134.64.14.98:7899、server_port:注釋掉不用打開)

 

  •  完成了所有機器配置后,我們需要上傳測試腳本,測試時只需要上傳jmx文件到master機器即134.64.14.95機器的jmeter對應目錄即可,其他執行機不需要上傳jmx文件,因為master啟動后會拷貝本地jmx到遠程執行機上

 

  • 現在我們來啟動分布式測試,啟動分布式測試分兩步:

一:首先啟動執行機即slave機器134.64.14.96、134.64.14.97、134.64.14.98,每台slave機器都需要執行以下命令來啟動jmeter-server

命令為:./jmeter-server

 

二:確認3台slave執行機都啟動正確完成后,在啟動master機器134.64.14.95,執行如下命令開啟分布式測試

命令為:./jmeter -n -t baidu_requests_results.jmx -r -l baidu_requests_results.jtl

 

3:測試命令說明

 ./jmeter -n -t baidu_requests_results.jmx -r -l baidu_requests_results.jtl 

n表示無GUI運行
t表示要運行的jmx文件
l指生成的文件名稱
r指遠程將所有agent啟動
 

4:測試結果說明

注意到上面控制台打印的信息中

summary +   5504 in 00:00:02 = 3590.3/s Avg:     1 Min:     0 Max:   174 Err:  5504 (100.00%) Active: 59 Started: 58 Finished: 0
summary + 1224043 in 00:00:30 = 40802.8/s Avg:     0 Min:     0 Max:   188 Err: 1224043 (100.00%) Active: 60 Started: 59 Finished: 0
summary = 1229547 in 00:00:32 = 38989.9/s Avg:     0 Min:     0 Max:   188 Err: 1229547 (100.00%)
解析:
summary為請求數目,指在多少時間內增加了多少請求數目,由此算出后面的3590.3/s、40802.8/s、38989.9/s也就是每秒完成請求數(吞吐量),每隔一段時間打印一行,最后一行可以看到請求總數為8213739,平均吞吐量為45495.4/s(每秒完成請求數)
summary = 8213739 in 00:03:01 = 45495.4/s Avg:     0 Min:     0 Max:   191 Err: 8213739 (100.00%)
另外active:60指活躍線程數,我們用3台機器並發測試,每台運行的腳本都為20個線程3分鍾,所以在線活躍線程數為20*3=60個,運行時間為3分鍾
錯誤率為:可以看出服務器能否承受這么大的並發,這里都是100%報錯是由於同一ip短時間並發請求百度,百度是不允許的,所以會被拒絕發生報錯
 
當然我們除了看控制台的信息以外,性能測試還需要關注:所有測試機器以及被測試機器的服務器指標如:cpu、磁盤io、內存消耗等,以及服務端和客戶端日志信息
對於生成的jtl文件,我們可以進行解析生成我們關注的信息如:吞吐量、響應時間、點擊率、錯誤率等等
對於jtl文件的如何轉換成圖表及解析,在我的博客jmeter系列博文之-jmeter之jtl測試報告中有詳細說明 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM