最近公司要求要壓測幾個主要的借口,並且要輸出最終的壓測報告,因為壓測報告要給甲方爸爸們看,讓他們相信我們的服務是杠杠的,嘿嘿~。其實甲方爸爸們主要是想看服務器參數以及接口的負載能力(tps),於是我就壓測了幾個接口,發現了一些問題,針對有問題的接口做了一些優化。
其實做一下壓測是挺好的,可以發現很多測試環境不會出現的問題,比如可能緩存沒命中,直接穿透到db等等。壓測出來的結果,看到單機(4核8G)tps低於1000的,我們都進行了優化,tps怎么也要超過1000吧。因為一直都是使用jmeter來做壓測,下面我們就來簡單說一下jmeter壓測的流程和一些注意事項。
一、壓測流程。
-
在windows下面通過gui打開jmeter,創建測試計划以及壓測腳本test.jmx,注意,動態配置的參數,可以使用變量來控制,以方面在linux下用命令行進行壓測的時候,動態修改參數,如下圖:
圖來自:https://www.cnblogs.com/ailiailan/archive/2019/09/17/11519976.html
-
把test.jmx腳本文件放到linux服務器,使用以下命令進行壓測(壓測不建議使用gui模式運行,gui模式會占用一定的系統資源)。
jmeter -n -t test.jmx -J threadNum=10 -J threadCount=2 -l result.jtl
-n表示以no gui模式運行;
-t指定腳本文件,這里是 test.jmx
-J選項傳遞動態參數,對應創建jmx腳本的時候設置的相關參數
-l是指定結果監聽器(比如聚合報告之類的)文件,這里是result.jtl
3.壓測過程中輸出的大概如下,可參考圖中的備注理解每個字段的意思:
圖來自:https://www.bbsmax.com/A/Vx5MRkZ3dN
4.壓測結果如果要生成html形式的報告,使用以下命令可以將result.jtl文件生成html的形式。
jmeter -g result.jtl -o ./html
-g指定生成結果文件,這里是result.jtl;
-o指定生成的html結果文件目錄,注意是目錄,這里是html目錄,最終生成的html相關文件會放到html目錄下面;
如果result.jtl比較大的話,轉換的過程可能有點慢,要等一下。生成的html要傳到window端,用瀏覽器打開即可,生成的html相關文件如下:
用瀏覽器打開如下:
5.生成的result.jtl,可以傳到windows本地,使用jmeter查看相關的結果,使用jmeter新建一個測試計划,然后在該測試計划下面創建對應的監聽器之后,點擊監聽器右邊的瀏覽按鈕,選中result.jtl,打開就可以看到對應的result.jtl的結果,大概如下圖:
圖中的Thoughput就是tps
下面對聚合報告中的字段進行解讀:
Label:請求的名稱,就是我們在進行測試的httprequest sampler的名稱
Samples:總共發給服務器的請求數量,如果模擬10個用戶,每個用戶迭代10次,那么總的請求數為:10*10 =100次;
Average:默認情況下是單個 Request 的平均響應時間,當使用了 Transaction Controller 時,以Transaction 為單位顯示平均響應時間 ,單位是毫秒
Median: 50%用戶的請求的響應時間,中位數
90%Line:90%的請求的響應時間
95%Line:95%的請求的響應時間
99%Line:99%的請求的響應時間
Min:最小的響應時間
Max:最大的響應時間
Error%:錯誤率=錯誤的請求的數量/請求的總數
Throughput: 默認情況下表示每秒完成的請求數(Request per Second),當使用了 Transaction Controller 時,也可以表示類似 LoadRunner 的 Transaction per Second 數
Received KB/sec: 每秒從服務器端接收到的數據量,即:收到的千字節每秒的吞吐量測試
Sent KB/sec: 每秒從客戶端發出的的數據量,即:發送的千字節每秒的吞吐量測試
ps.
1.jmeter在linux下的安裝和配置教程,這里就不贅述了,網上很多教程
2.jmeter壓測腳本的編寫,網上也很多教程~
二、注意事項:
1.有時候壓測機(運行jmeter的機器)也會成為瓶頸,比如通過https進行壓測的時候,壓測機的cpu就直接100%了,如果是http的話就沒問題,https是多了證書的加解密驗證過程,挺耗cpu的。這時候可以通過幾台機進行壓測,jmeter原生支持分布式進行壓測。
2.盡量使用no gui的模式進行壓測,同時壓測機(運行jmeter的機器)要和接口服務器分開,jmeter進行壓測的時候,也是很耗資源的。
3.測試之后,如果某些接口tps很低,可以通過jprofile,jstack,jvisualVM之類的工具進行調優,接口response body很大的,可以考慮壓縮之后再返回(比如tomcat,undertow等容器內部自帶壓縮機制)。
參考:
https://www.cnblogs.com/ailiailan/archive/2019/09/17/11519976.html
歡迎關注微信公眾號“ismallboy”,請掃碼並關注以下公眾號,並在公眾號下面回復“jmeter”,獲得本文最新內容。