『動善時』JMeter基礎 — 50、使用JMeter測試WebSocket接口


因為我之前對WebSocket接口也不是很了解,所以本篇文章先簡單的概括的說明一下WebSocket的相關概念。在文章的后半部分,進行測試WebSocket接口的步驟說明。

1、什么是WebSocket接口

WebSocket是一種網絡通信協議。

我們在上網過程中經常用到的是HTTP和HTTPS協議,HTTP協議和HTTPS協議的通信過程,通常是客戶端通過瀏覽器發出一個請求,服務器按受請求后進行處理並返回結果給客戶端,客戶端接收響應的結果。

這種機制對於信息變化不是特別頻繁的應用,可以良好支撐。但對於實時信息要求高、海量並發的應用來說,顯得捉襟見肘。尤其在移動互聯網蓬勃發展的趨勢下,高並發與用戶實時響,應是Web應用經常面臨的問題。比如金融證券的實時信息、社交網絡的實時消息推送、網絡直播等。

Websocket通信協議出現前我們實現推送技術,用的都是輪詢,在特定的時間間隔,瀏覽器自動發出請求,將服務器的消息主動的拉回來。這種情況下,我們需要不斷的向服務器發送請求,這樣會占用很多的帶寬和服務器資源,並且服務器不能主動向客戶端推送數據。在這種情況下需要一種高效節能的雙向通信機制,來保證數據的實時傳輸,於是基於HTML5規范的WebSocket網絡通信協議應運而生。

WebSocket是類似Socket的TCP長連接通訊模式。一旦WebSocket連接建立后,后續數據都以幀序列的形式傳輸。在客戶端斷開WebSocket連接或Server端中斷連接前,不需要客戶端和服務端重新發起連接請求。在海量並發,及客戶端與服務器交互負載流量大的情況下,極大的節省了網絡帶寬資源的消耗,有明顯的性能優勢,且客戶端發送和接受消息是在同一個持久連接上發起,實時性優勢明顯。

2、為什么需要WebSocket

初次接觸 WebSocket的人,都會問同樣的問題:我們已經有了HTTP協議,為什么還需要另一個協議?它能帶來什么好處?

答案很簡單,因為HTTP協議有一個缺陷:通信只能由客戶端發起。

舉例來說,我們想了解今天的天氣,只能是客戶端向服務器發出請求,服務器返回查詢結果。HTTP協議做不到服務器主動向客戶端推送信息。

這種單向請求的特點,注定了如果服務器有連續的狀態變化,客戶端要獲知就非常麻煩。我們只能使用"輪詢",每隔一段時候,就發出一個詢問,了解服務器有沒有新的信息。輪詢的效率低,非常浪費資源。因此,工程師們一直在思考,有沒有更好的方法,WebSocket就是這樣發明的。

WebSocket的最大特點就是,服務器可以主動向客戶端推送信息,客戶端也可以主動向服務器發送信息,是真正的雙向平等對話,屬於服務器推送技術的一種。

WebSocket是雙向的,在客戶端和服務器通信的場景中使用的全雙工協議,與HTTP不同,它以ws://wss://開頭。它是一個有狀態協議,這意味着客戶端和服務器之間的連接將保持活動狀態,直到被任何一方(客戶端或服務器)終止,WebSocket連接才從兩端終止。

3、測試WebService接口前的准備

在JMeter中測試WebSocket協議的接口,需要先安裝WebSocket插件和依賴包。

打開JMeter中的插件管理器:選項 —> Plugins Manager

提示:沒有安裝JMeter插件管理器的,請點擊后面文章鏈接:【JMeter插件管理器的安裝與使用】

打開JMeter插件管理器后,點擊Available Plugins選項頁,在搜索框中輸入WebSocket,然后選擇安裝WebSocket Sampler by Maciej Zaleski插件。

image

我們可以從上圖中看到在插件的說明中,該插件包含websocket-api.jarwebsocket-common.jarwebsocket-client.jarjetty-http.jarjetty-io.jarjetty-util.jar這6個JAR包。

這些JAR包可以使JMeter中的取樣器,發送支持WebSocket協議的請求。

如下圖所示:

image

提示:安裝完WebSocket Sampler by Maciej Zaleski插件后需要重啟JMeter。

4、WebSocket Sampler組件界面詳解

WebSocket Sampler組件添加方式:選中“線程組”右鍵 —> 添加 —> 取樣器 —> WebSocket Sampler

界面如下圖所示:

image

針對界面中各選項說明:

  • 名稱WebSocket Sampler組件的自定義名稱,見名知意最好。
  • 注釋:即添加一些備注信息,對該WebSocket Sampler組件的簡短說明,以便后期回顧時查看。

(1)WebServer

  1. Server Name or IP:發送請求的目標服務器的IP地址或者域名。
  2. Port Number:服務器地址后的端口號,有則填寫,沒有不用填寫。

(2)Timeout (milliseconds)

  1. Connection:鏈接建立的最大超時時間,單位毫秒。如果達到超時時間設置后鏈接未建立,則sampler失敗。
  2. Response :對響應消息的最大等待時間,單位毫秒。到達設定時間后WebSocket鏈接關閉。

(3)WebSocket Request

  1. Implementation:只支持RFC6455(v13) ,WebSocket協議標准的最新版。
  2. Protocol:有wswss之分。ws前綴是WebSocket連接的辨別標識,wss前綴是WebSocket安全連接的辨別標識。根據自己需要訪問接口的實際情況填寫。
  3. Content encoding:內容編碼。有中文推薦編寫UTF-8。
  4. Connection Id:連接ID。
  5. Path:訪問接口的路徑。
  6. Ignore SSL certificate errors:忽略SSL證書錯誤。
  7. Streaming connection:選擇TCP session要不要保持,如果勾上標識連接會一直存在,如果沒有勾上,那么第一次響應后該鏈接就會被關閉。

(4)同請求一起發送參數

  • 可以填寫key-value形式的參數。(發送了好像不太好使,請求參數還是填寫在下面的Request data中吧)
  • Request data:填入同請求一起發送參數,與HTTP采樣器類似,結合被測接口說明文檔來進行配置。

(5)Web Socket Response:接口響應相關設置

  1. Response pattern:采樣器將等待含有該標識的消息並繼續通信(或者直到timeout,該連接關閉)
  2. Close connection pattern:如果服務器返回的消息含有填寫的字符,就結束會話。
  3. Proxy Server (currently not supported by Jetty):編輯代理服務器信息代(當前不支持Jetty)
    Server Name or IP:服務器IP地址或域名。
    Port Number:端口號。
    Username:用戶名。
    Password:密碼。
  4. Message Backlog:定義服務器返回消息保留的最大長度。

5、使用JMeter測試WebSocket接口示例

我們請求一個WebSocket接口為例,進行演示。

訪問地址:echo.websocket.org

(1)測試計划內包含的元件

添加元件操作步驟

  1. 創建測試計划。
  2. 創建線程組:選中“測試計划”右鍵 —> 添加 —> 線程(用戶) —> 線程組
  3. 在線程組中,添加取樣器WebSocket Sampler組件:選中“線程組”右鍵 —> 添加 —> 取樣器 —> WebSocket Sampler
  4. 在線程組中,添加監聽器“察看結果樹”組件:選中“線程組”右鍵 —> 添加 —> 監聽器 —> 察看結果樹

最終測試計划中的元件如下:

image

點擊運行按鈕,會提示你先保存該腳本,腳本保存完成后會直接自動運行該腳本。

(2)WebSocket Sampler組件內容

就和編輯HTTP請求一樣,編寫必要的請求信息和請求數據即可。

編輯WebSocket接口內容,如下圖所示:

image

(3)運行查看結果

結果如下圖所示:

image

說明使用JMeter成功發送WebSocket請求並且得到了響應。

參考:


免責聲明!

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



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