1. 程式人生 > >Jmeter中Websocket協議支援包的使用

Jmeter中Websocket協議支援包的使用

參考的來源是國外一篇文章,已經整理成pdf格式(http://yunpan.cn/cFzwiyeQDKdh3 (提取碼:9bcf))

一、新增Jmeter對WebSocket協議的支援外掛

1、到https://github.com/maciejzaleski/JMeter-WebSocketSampler下載Jmeter的WebSocket協議的支援外掛:JMeterWebSocketSampler-1.0.2-SNAPSHOT.jar,並直接將這個jar包放到Jmeter軟體的\lib\ext\目錄下。
1、jetty-http-9.1.2.v20140210.jar 2、jetty-io-9.1.2.v20140210.jar 3、jetty-util-9.1.2.v20140210.jar 4、websocket-api-9.1.1.v20140108.jar 5、websocket-client-9.1.1.v20140108.jar 6、websocket-common-9.1.1.v20140108.jar
3、以上jar包都準備好並放到Jmeter目錄的\lib\ext\目錄下後,重啟Jmeter之後可以在sampler中看到websocket sampler這一項。

二、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時,就只能看到最近的一條響應資訊了