一、下載Jmeter插件
1.下載鏈接:https://jmeter-plugins.org/install/Install/
2.點擊下圖箭頭標(biāo)記點擊下載

3.將下載jar包復(fù)制到j(luò)meter的 lib/ext目錄,重啟jmeter
二、添加插件
1.在工具欄>>>>Options(選項)>>>Plugins Manager 點擊進入

2.選擇Available Plugins
3.輸入websocket

4.選擇websoket相關(guān)插件,勾選并點擊下面的Apply and restart jmeter,這時manager會自動幫你下載依賴包并安裝到lib目錄下
三、添加WebSocket Sampler
1.新建一個測試計劃
2.添加一個線程組
3.右鍵添Sampler時就能看到websocket的模板
4.常用的就是websocket request-response Sampler(連接+發(fā)送data或者只發(fā)data),其次是WebSocket Open Connection(只連接,不發(fā)送data)
5.添加一個websocket request-response Sampler

說明:
(1)Connection:有兩項,第一項是使用已有連接,就是上一個websocket請求所建立的連接通道,選擇后Server URL全置灰只讀不可操作。第二項是新建連接通道。
(2)Server URL:可以發(fā)送ws協(xié)議和wss協(xié)議(加密的websocket),以上圖的配置所對應(yīng)的連接串如下:
wss://192.18.24.211:8888/testPath
(3)Data:支持文本(包括JSON)和Binary二進制數(shù)據(jù)的發(fā)送。默認(rèn)請求響應(yīng)的超時時間為6S,超過這個時間報錯。
三、使用小技巧
1、Path和Requst data要注意編碼格式
websocket發(fā)送數(shù)據(jù)到后端,與http請求的原理是相通的,所以發(fā)送的數(shù)據(jù)如果含有非常字符,如"/"、"+"、"%"、引號等,就會引起解析錯誤,所以需要特別注意,比如:
如上所示,websocket請求的上一個請求TR-token可以獲取一個token串(通過正則表達(dá)式提取器提取),而這個串的格式可能是這樣的:Ivj6eZRx40+MTx2Zv/G8nA,可以發(fā)現(xiàn)含有"+"、"/"字符,而我們需要把這個串作為Path的一部分來發(fā)送,那么我們就需要對${token}變量進行URL轉(zhuǎn)碼,用到j(luò)meter的函數(shù) __urlencode()
2、可以通過邏輯控制器來模擬群發(fā)消息
(1)通過循環(huán)控制器調(diào)取參數(shù)化文件(CSV)里的用戶信息表來實現(xiàn)群發(fā)消息,如下所示:
(2)或者先通過發(fā)送請求來獲取用戶信息(正則表達(dá)式提?。?,再用ForEach調(diào)取用戶組變量發(fā)送消息,如下所示:
3、以時間戳來查看當(dāng)前聊天記錄應(yīng)注意websocket的response延時
在并發(fā)的情況下,websocket請求延時可能要遠(yuǎn)大于http請求,比如延時2秒以上(從發(fā)送消息到看到聊天面板已經(jīng)過了2秒以上)。所以在jmeter中用時間戳函數(shù)${__time(,)}來表示最新一條聊天記錄的時間是不可靠的。我們應(yīng)該在websocket請求中插入正則表達(dá)式提取器,通過在response中獲取其時間才能確保消息接收時間準(zhǔn)確(即不要用客戶端時間來判斷你的聊天時間)。
(1)先提取websocket反饋的服務(wù)端時間戳
(2)再作為查詢當(dāng)前聊天記錄的時間戳依據(jù)
4、最后說一下jmeter4.0,如果是要做分布式測試,jmeter4.0默認(rèn)是要求RMI傳輸必須SSL加密的,否則jmeter-server就啟動不了,我們可以用簡單的配置來回避這個問題。就是server端和client端的jmeter我們統(tǒng)一做如下配置:
(1)用編輯器打開bin/user.properties文件
(2)找到server.rmi.ssl.disable,將#注釋符去掉,改成 server.rmi.ssl.disable=true
現(xiàn)在可以奔跑了,我直接用以下shell腳本實現(xiàn)在linux下分布式調(diào)用jmeter-server進行測試,并生成html報告:
!/bin/bash
testAPI="websocket-test.jmx" #jmeter測試腳本
Cur_Dir=(dirname "
Cur_Dir/jmeter4.0/bin/
Cur_Dir/jmeter4.0/bin/jmeter -n -t
{testAPI} -R 172.16.1.67,172.16.5.241 -l
(date -d "today" +"%Y%m%d%H%M%S").csv -e -o
(date -d "today" +"%m%d%H%M%S")
另外測試還開啟了jmeter監(jiān)控工具(influxDB+grafana),具體安裝配置方式參見我的另一篇文章《關(guān)于Jmeter長時間壓測的可視化監(jiān)控報告》(區(qū)別是這篇文章用的是windows版的,而我這次測試用的是Linux版的,網(wǎng)上有相關(guān)下載,開源工具)。
添加配置后,監(jiān)控后的效果如下:
補充:除了常用的WebSocket Open Connection和WebSocket request-response 這兩個Sampler,WebSocket Single Read Sampler也比較常用,一般是用在群聊消息已讀回執(zhí)的發(fā)送。比如在微信群里發(fā)一條消息,通過抓包分析,可以看到客戶端是發(fā)出了兩條消息(同時服務(wù)端也回發(fā)了兩條消息),如下所示:
第二條消息表示發(fā)送消息已讀回執(zhí),按以往的方式,我們需要通過正則表達(dá)式提取器提取第一條消息的返回值,然后發(fā)送第二條消息,這樣的效率就不高,我們可以直接用WebSocket Single Read Sampler來模擬消息的已讀回執(zhí):
原文鏈接:https://blog.csdn.net/smooth00/java/article/details/81355110