Jmeter對Web Socket進行壓力測試

一.簡單介紹一下Sample Socket組件的界面

1、WebServer
(1)Server Name or IP:WebSocket發送的目標服務器的地址或者名稱
(2)Port Number:WebSocker服務器監聽的端口號。(一般是HTTP 80端口,可以通過WireShark數據包得到)

2、Timeout: 
(1)Connection – 發送一個連接請求後,Jmeter等待連接完成的最長時間,單位是毫秒。
(2)Response - 對響應消息的最大等待時間。

3、WebSocket Request
(1)Implementation – 只支持RFC6455(v13) ,WebSocket協議標準的最新版。
(2)Protocol – 有ws與wss之分,  ws前綴是WebSocket連接的辨別標識,wss前綴是WebSocket安全連接的辨別標識。根據自己的實際情況填寫
(3)Streaming Connection – 選擇這個TCP session要不要保持,如果勾上標識連接會一直存在,如果沒有勾上,那麼得到第一次響應後該鏈接就會被關閉。(*重要!不勾選的話,請求成功就會斷開連接)
(4)Request data:請求內容,填入將要發送的請求,要跟開發溝通好,這個是什麼格式的消息。

(5)Connection Id: 連接ID (*重要!就是通過這個來區分不同會話)

4.WebSocket Response
(1)Response Pattern – 採樣器將等待含有該標識的消息並繼續通信(或者直到timeout,該連接關閉)
(2)Close Connection Pattern – 如果服務器返回的消息含有這樣的字符,就結束會話。
(3)Message Backlog – 保留返回結果的數量(如果希望只保留最新一條,可以設定爲1)

 

測試方案:

a) 用一臺負載機分別模擬,無學生、50個學生、100個學生、200個學生同時上課的情況。如果結果可以接受,繼續增加上課學生。

b) 用一臺客戶機分別登錄老師和單個真實學生,查看課堂情況。

c) 監控服務器資源佔用情況。(本次教程不涉及)

實現方案:

a) Jmeter 發起Web Socket請求,最基本連接請求外,額外學生髮言一次,並且每25秒循環請求一次保持長連接。 

1.根據剛纔學到的用Chrome可以看到WebSocket會話方法。我獲取學生進入房間WS接口最基本的3個東西 

1) 協議&地址&端口&query參數組成的URL

2) Headers頭信息

2.新建一個Jmeter腳本,添加HTTP信息頭管理器和WebSocket Sampler。然後填入基本信息。

1) 頭信息可以直接從Chrome全複製下來一鍵粘進HTTP信息頭管理器。

2) URL填入這幾個地方。 

3.其實這個時候應該就可以正確建立連接了。但是我們希望學生上課,要傳達這個信息給服務器。就需要傳入請求參數。 
其實不難發現,進入教室就是紅框裏的三個綠色箭頭,也就是說我們要上課,至少要請求3次。之後的綠色箭頭判斷下來請求內容無實際意義,作用之後會提到。

4.將WebSocket Sampler 複製3個,分別把Chrome裏三次請求的請求內容填進去。這樣一個基本的ws腳本就構成了。

5.之前Chrome中有一些紅框外的綠箭頭,之前介紹過WebSocket有一個超時機制,我們可以看到這些請求之間都恰巧間隔25秒(這裏截圖沒截好)。我們需要模擬這個動作,來保證長連接不會斷開。也就是就算什麼都不做,也每隔25秒請求一次。 

6.腳本設計如下

a) 線程組設定線程數50、100、200,循環爲1。
b) 用戶參數前置處理器 生成區分不同學生的id、name、Connection Id。注意勾選"每次迭代更新一次"。
c) 1 2 3 是進入教室的基本請求
d) 4 是學生髮言(手動瀏覽器發言一次,獲取到發言操作的接口請求內容)
e) 循環控制器勾選永遠。
f) 5 在循環控制器下的循環,並設定定時器,間隔25秒。
 

7.最終實現目標