一胞锰、下載Jmeter插件
1.下載鏈接:https://jmeter-plugins.org/install/Install/
2.點(diǎn)擊下圖箭頭標(biāo)記點(diǎn)擊下載
3.將下載jar包復(fù)制到j(luò)meter的 lib/ext目錄,重啟jmeter
二崖面、添加插件
1.在工具欄>>>>Options(選項(xiàng))>>>Plugins Manager 點(diǎn)擊進(jìn)入
2.選擇Available Plugins
3.輸入websocket
4.選擇websoket相關(guān)插件唾糯,勾選并點(diǎn)擊下面的Apply and restart jmeter,這時(shí)manager會(huì)自動(dòng)幫你下載依賴包并安裝到lib目錄下
三辟躏、添加WebSocket Sampler
1.新建一個(gè)測(cè)試計(jì)劃
2.添加一個(gè)線程組
3.右鍵添Sampler時(shí)就能看到websocket的模板
4.常用的就是websocket request-response Sampler(連接+發(fā)送data或者只發(fā)data)辆憔,其次是WebSocket Open Connection(只連接渣蜗,不發(fā)送data)
5.添加一個(gè)websocket request-response Sampler
說(shuō)明:
(1)Connection:有兩項(xiàng),第一項(xiàng)是使用已有連接鹏漆,就是上一個(gè)websocket請(qǐng)求所建立的連接通道巩梢,選擇后Server URL全置灰只讀不可操作创泄。第二項(xiàng)是新建連接通道艺玲。
(2)Server URL:可以發(fā)送ws協(xié)議和wss協(xié)議(加密的websocket)括蝠,以上圖的配置所對(duì)應(yīng)的連接串如下:
wss://192.18.24.211:8888/testPath
(3)Data:支持文本(包括JSON)和Binary二進(jìn)制數(shù)據(jù)的發(fā)送。默認(rèn)請(qǐng)求響應(yīng)的超時(shí)時(shí)間為6S饭聚,超過(guò)這個(gè)時(shí)間報(bào)錯(cuò)忌警。
三、使用小技巧
1秒梳、Path和Requst data要注意編碼格式
websocket發(fā)送數(shù)據(jù)到后端法绵,與http請(qǐng)求的原理是相通的,所以發(fā)送的數(shù)據(jù)如果含有非常字符酪碘,如"/"朋譬、"+"、"%"兴垦、引號(hào)等徙赢,就會(huì)引起解析錯(cuò)誤,所以需要特別注意探越,比如:
如上所示狡赐,websocket請(qǐng)求的上一個(gè)請(qǐng)求TR-token可以獲取一個(gè)token串(通過(guò)正則表達(dá)式提取器提取)钦幔,而這個(gè)串的格式可能是這樣的:Ivj6eZRx40+MTx2Zv/G8nA枕屉,可以發(fā)現(xiàn)含有"+"、"/"字符鲤氢,而我們需要把這個(gè)串作為Path的一部分來(lái)發(fā)送搀擂,那么我們就需要對(duì)${token}變量進(jìn)行URL轉(zhuǎn)碼,用到j(luò)meter的函數(shù) __urlencode()
2卷玉、可以通過(guò)邏輯控制器來(lái)模擬群發(fā)消息
(1)通過(guò)循環(huán)控制器調(diào)取參數(shù)化文件(CSV)里的用戶信息表來(lái)實(shí)現(xiàn)群發(fā)消息哥倔,如下所示:
(2)或者先通過(guò)發(fā)送請(qǐng)求來(lái)獲取用戶信息(正則表達(dá)式提取)揍庄,再用ForEach調(diào)取用戶組變量發(fā)送消息咆蒿,如下所示:
3、以時(shí)間戳來(lái)查看當(dāng)前聊天記錄應(yīng)注意websocket的response延時(shí)
在并發(fā)的情況下蚂子,websocket請(qǐng)求延時(shí)可能要遠(yuǎn)大于http請(qǐng)求沃测,比如延時(shí)2秒以上(從發(fā)送消息到看到聊天面板已經(jīng)過(guò)了2秒以上)。所以在jmeter中用時(shí)間戳函數(shù)${__time(,)}來(lái)表示最新一條聊天記錄的時(shí)間是不可靠的食茎。我們應(yīng)該在websocket請(qǐng)求中插入正則表達(dá)式提取器蒂破,通過(guò)在response中獲取其時(shí)間才能確保消息接收時(shí)間準(zhǔn)確(即不要用客戶端時(shí)間來(lái)判斷你的聊天時(shí)間)。
(1)先提取websocket反饋的服務(wù)端時(shí)間戳
(2)再作為查詢當(dāng)前聊天記錄的時(shí)間戳依據(jù)
4别渔、最后說(shuō)一下jmeter4.0附迷,如果是要做分布式測(cè)試惧互,jmeter4.0默認(rèn)是要求RMI傳輸必須SSL加密的,否則jmeter-server就啟動(dòng)不了喇伯,我們可以用簡(jiǎn)單的配置來(lái)回避這個(gè)問(wèn)題喊儡。就是server端和client端的jmeter我們統(tǒng)一做如下配置:
(1)用編輯器打開(kāi)bin/user.properties文件
(2)找到server.rmi.ssl.disable,將#注釋符去掉稻据,改成 server.rmi.ssl.disable=true
現(xiàn)在可以奔跑了艾猜,我直接用以下shell腳本實(shí)現(xiàn)在linux下分布式調(diào)用jmeter-server進(jìn)行測(cè)試,并生成html報(bào)告:
!/bin/bash
testAPI="websocket-test.jmx" #jmeter測(cè)試腳本
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")
另外測(cè)試還開(kāi)啟了jmeter監(jiān)控工具(influxDB+grafana)捻悯,具體安裝配置方式參見(jiàn)我的另一篇文章《關(guān)于Jmeter長(zhǎng)時(shí)間壓測(cè)的可視化監(jiān)控報(bào)告》(區(qū)別是這篇文章用的是windows版的匆赃,而我這次測(cè)試用的是Linux版的,網(wǎng)上有相關(guān)下載今缚,開(kāi)源工具)算柳。
添加配置后,監(jiān)控后的效果如下:
補(bǔ)充:除了常用的WebSocket Open Connection和WebSocket request-response 這兩個(gè)Sampler姓言,WebSocket Single Read Sampler也比較常用瞬项,一般是用在群聊消息已讀回執(zhí)的發(fā)送。比如在微信群里發(fā)一條消息事期,通過(guò)抓包分析滥壕,可以看到客戶端是發(fā)出了兩條消息(同時(shí)服務(wù)端也回發(fā)了兩條消息),如下所示:
第二條消息表示發(fā)送消息已讀回執(zhí)兽泣,按以往的方式绎橘,我們需要通過(guò)正則表達(dá)式提取器提取第一條消息的返回值,然后發(fā)送第二條消息唠倦,這樣的效率就不高称鳞,我們可以直接用WebSocket Single Read Sampler來(lái)模擬消息的已讀回執(zhí):
原文鏈接:https://blog.csdn.net/smooth00/java/article/details/81355110