效能測試進階實踐篇:10分鐘教你使用JMeter進行websocket測試!

博為峰網校發表於2021-10-19

摘要

本次測試案例主要是分享如何使用jmeter進行websocket協議下的聊天介面效能測試。包含websocket外掛的下載安裝、執行緒組及sampler的設定、csv引數化和組建分散式測試的方法、如何通過調整引數來獲得發壓機的最大併發數以及對測試過程的總結。整篇文章只側重介紹進行websocket測試的思路,對具體工具的使用步驟較少著墨,因為網上已有不少相關介紹文章。希望本篇文章可以對其他正準備用jmeter進行websocket測試的讀者提供一些參考。本人水平有限,如有錯誤懇請批評指正,感謝! 加我VX:atstudy-js 回覆“測試”,進入 自動化測試學習交流群~~

正文

最近收到一個任務,需要對公司的即時通訊服務端進行壓測及聊天介面效能測試,這款即時通訊軟體的客戶端是通過websocket協議與服務端通訊的。但我之前只做過http協議的測試,websocket協議還是第一次。

於是我在網上搜尋websocket協議的壓測工具,一番比較後選中了jmeter,選擇jmeter的原因有以下幾點:

1.jmeter是一款免費開源的軟體,有成熟的社群及外掛管理工具,滿足使用者的各種需求。

2.jmeter包含windows、mac、linux多平臺版本,對發壓機支援較好。

3.jmeter支援GUI和CLI兩種操作模式,配置分散式壓測步驟簡單快捷,網上有很多關於jmeter的安裝使用說明,這裡我就不再贅述直接進入websocket的相關測試工作。

一.安裝JMeterWebsocketSampler外掛

jmeter不自帶websocket功能,需要安裝外掛,這個外掛直接安裝最新的就行了,我用的是1.2.8版本。將下載好的jar包放在jmeter目錄下的lib/ext裡,然後開啟jmeter將websocket sampler勾選上再重啟jmeter就安裝好JMeterWebsocketSampler外掛了。

二.新建執行緒組和sampler

這裡我先把發壓機的執行緒數設定為100,所有執行緒立即初始化,執行5分鐘。發壓機支援的最大執行緒數跟發壓機的配置有關,我的機器配置是6核12執行緒,能夠設定的最大執行緒數是160,再多就會執行報錯。但是我的機器執行緒設定超過100後傳送速度也不再增加,想知道自己發壓機剛好到達傳送最大速度時的執行緒數,可以設定ramp-up period,比如設定60秒,120個執行緒,就是平均每秒初始化兩個執行緒,到第60秒時剛好全部初始化完畢。我自己測試從50秒往後傳送速度就不再增加了,所以就設定為100了。

然後新增websocket connection sampler、websocket send sampler、websocket connection close sampler,分別用於建立連線、傳送請求、斷開連線操作。由於是壓測案例,所以我用到了Loop Controller,可以用於控制sampler的迴圈次數,並且客戶端只管傳送,不接收服務端的響應,因為我依靠另一端實際接收到的訊息數判斷髮送是否成功,這樣可以避免等待響應阻塞程式。我的配置如圖所示:

我把infinite勾選上了,表示在5分鐘的壓測時間內讓sampler不限次數地迴圈,這樣可以測出sampler在指定時間內能夠完成的最大次數。

三.CSV引數化

對於jmeter來說,每一個執行緒就是一個使用者,所以設定100個執行緒就需要100個測試使用者的賬號、密碼及傳送資料。新增CSV DATA Set Config步驟,csv的配置我這裡不再贅述,不過需要說明的是測試服務端處理聊天訊息的效能,最好是多組一對一聊天這樣的設定,比如我的就是50個使用者分別給另外50個使用者傳送訊息,這樣符合真實使用場景,也能測出服務端的真實效能。

四.分散式測試

按以上步驟找到每臺壓測機的最大執行緒數後,就可以開始分散式測試了。另找一臺機器作為主控機,確保每臺壓測機與主控機的網路互通。在jemter.properties裡的remote_hosts新增壓測機的ip和埠,server_port是jmeter啟動的埠,壓測機用jmeter-server啟動。如果主控機與壓測機之間的RMI不是SSL連線,記得將server.rmi.ssl.disable=true的註釋解開。server-rmi-localport是用於本機跟其它機器通訊的RMI埠,如果要使壓測機的壓測資料回傳主控機,需要將壓測機及主控機jemter.properties裡的mode=standard註釋解開。

儲存後主控機使用CLI輸入命令jmeter -n -t “Webim Thread Group.jmx” -R x.x.x.x,y.y.y.y -l wbeimlog.jtl -e -o repoort(-R後跟壓測機ip,多臺用逗號分隔)就可以使用主控機對壓測機傳送指令了。壓測機接收到指令後會在CLI介面上顯示如下資訊:

結合壓測機回傳的資料可以逐臺新增壓測機以探測服務端的極限效能。彙總的資料在命令列裡指定的report目錄裡,開啟index.html頁面可以檢視統計資料的餅狀圖,如下圖所示:

根據統計資料可以看到傳送的總次數、成功次數、錯誤情況等資訊,對測試案例進行調整。到此使用jmeter進行websocket效能測試就算完成了。

五.測試過程總結

整個測試的關鍵點有三處:一是調整發壓機引數使併發數達到最大。二是設定每對聊天賬號都是一對一,不等待服務端響應,以便獲得最真實的服務端效能。三是根據壓測機回傳的資料分析出壓測機所需的數量,進而測試出服務端的最大效能。我這邊整個測試工作都處於測試環境進行,取得的測試資料並不能完成代表真實生產環境下的情況,僅可以用作預測生產環境下的效能表現。 加我VX:atstudy-js 回覆“測試”,進入 自動化測試學習交流群~~

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31407649/viewspace-2838185/,如需轉載,請註明出處,否則將追究法律責任。

相關文章