jmeter命令行运行-分布式测试
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: 0summary + 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測試報告中有詳細說明?
轉載于:https://www.cnblogs.com/AmilyWilly/p/9010181.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的jmeter命令行运行-分布式测试的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦到很多老鼠是什么意思
- 下一篇: 已婚女人梦到捡钱是什么征兆