一、運行Jmeter
(1) 去官方網站下載jmeter(版本為3.3)並解壓。點擊bin/jmeter.bat啟動jmeter
(2) 新建線程組。
(3) 在線程組中新建WebSocket Sample
二、WebSocket Sampler簡介
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:填入將要發送的請求,要跟開發溝通好,這個是什么格式的消息。
4.WebSocket Response
(1)Response Pattern – 采樣器將等待含有該標識的消息並繼續通信(或者直到timeout,該連接關閉)
(2)Close Connection Pattern – 如果服務器返回的消息含有這樣的字符,就結束會話。
(3)Message Backlog – 定義服務器返回消息保留的最大長度。
三、試驗
按照網上的例子,可以用http://www.websocket.org/echo.html這個網站做一些試驗,網站會將收到的數據(你的request數據)在服務器響應中原樣返回。
將網站提供的host等信息填入即可與網站通信,下面是我的實驗,用於理解Jmeter中websocket sampler
1、streaming選項的影響
(1)不勾選streaming
test plan設置如下:
不勾選streaming connection結果如下:
可以看出發送的Ground control to Major Tom被返回,這個實驗是成功的,從result tree的sampler result中Execution FLow中可以看出測試的結果與上面我們的設置之間的關系:用了5000毫秒的時間等待服務器的連接,用了20000毫秒的時間等待服務器的消息,且在接受到第一條消息后,關閉了這個websocket會話。
(2)勾上streaming connection
可以看到在結束測試的時候,勾上streaming那個小勾后,測試結束時streaming connection還是開着的。
(3)發送兩條消息
只發送一條消息可能看不出什么區別,將Websocket sampler復制一下,發送兩條信息。這樣就可以看出第二條消息發送時是直接用的第一條消息打開的連接,服務器的響應被歸類到一次會話的響應窗口。
(4)、參照參考文檔設置一個測試(添加一個loop controller,設置循環次數為3)
結果如下:
循環中的sampler都勾選了streaming,最后一個sampler沒有勾選此選項,結果中可以看出:在loop controller中的sampler使用的是一個連接,在loop外面的這個sampler會打開一個新的連接,可以得出一個結論,實際上,當勾選了streaming connection時,不僅會在結束會話后保留連接,而且勾選了的sampler會在有可用連接是直接使用,而沒有勾選的sampler即使存在可用連接也會重新打開一個新的連接。因此,如果是要在一個會話中發送多條消息,請勾選這個streaming
connection。
2、如何人為的結束一段對話
這就要用到之前提到過的response pattern和close pattern,先給出三個請求在沒有設置response pattern和close pattern的運行結果以便於比較
然后在第一個sampler中設置response pattern和close pattern如下(由於只建立一次連接,所以只會讀取第一個sampler中的pattern設置信息)
這樣在第二個請求的響應返回不符合father這個標識,又符合了close pattern時,就會斷開連接了,此時第三個websocket勾選了streaming使用上一個連接,但實際上卻連接不上這個遠程終端時就會報錯了。(response響應在這種情況下不能設置為空,如果先檢測到返回的內容符合response pattern,就不會再去判斷是否符合close pattern了)
3、Message Backlog的設置
上面的試驗使用的都是默認的3,因此如果試驗中的三個socket都是是在一個會話中通信,點擊第三個是可以看到最近的三個服務器響應的。當這個選項設置為1時,就只能看到最近的一條響應信息了