1. 河豚號 > 生活百科 >

websocket測試方式(linux入門基礎(chǔ))

項目背景

最近有一個超級表格的項目測試,支持多人實時協(xié)作編輯表格。項目選用了WebSocket這種基于 TCP 的全雙工通訊協(xié)議,它可以實現(xiàn)服務(wù)端和客戶端之間的主動數(shù)據(jù)推送,具有資源占用少、實時性高等特點,消息推送模式包括:單對單、單對多(全體廣播)。

我們的項目使用WebSocket協(xié)議提交、廣播增量數(shù)據(jù),并廣播提示其他用戶拉取全量數(shù)據(jù)以達到同步的目的。

 

實戰(zhàn)篇丨最強輔助Jmeter,測試WebSocket協(xié)議應(yīng)用

 

在性能測試中需要模擬多個用戶協(xié)同編輯一個文檔的場景,選用Jmeter作為測試工具。

Jmeter插件

在Jmeter中測試WebSocket協(xié)議接口,需要先安裝WebSocket插件和依賴包;

需添加的插件為:

jmeter-websocket-samplers-1.2.1.jar

依賴包:jetty-http

jetty-io

jetty-util

websocket-api

websocket-client

websocket-common

把插件放到Jmeter的libext,依賴包放到Jmeter的lib目錄,打開Jmeter即可看到WebSocket相關(guān)的取樣器。

 

實戰(zhàn)篇丨最強輔助Jmeter,測試WebSocket協(xié)議應(yīng)用

 

這幾種取樣器的作用如下表所示:

 

實戰(zhàn)篇丨最強輔助Jmeter,測試WebSocket協(xié)議應(yīng)用

 

常用的取樣器是WebSocket Open Connection和WebSocket request-response Sampler,前者用來建立連接不發(fā)送數(shù)據(jù),后者建立連接并發(fā)送data或者只發(fā)data。

創(chuàng)建腳本

在編寫腳本前先通過瀏覽器查看建立連接的過程,首先打開一個文檔時通過HTTP升級機制,使用HTTP的Upgrade和Connection協(xié)議頭的方式將連接升級為WebSocket。

 

實戰(zhàn)篇丨最強輔助Jmeter,測試WebSocket協(xié)議應(yīng)用

 

返回的狀態(tài)碼為101則說明WebSocket連接建立成功,協(xié)議已經(jīng)變?yōu)榱薟ebSocket,如下圖所示,瀏覽器先后發(fā)送三個數(shù)據(jù)幀,包括CONNECT建立連接、SUBSCRIBE訂閱文檔、SEND類型為CLIENT_READY消息,客戶端收到的數(shù)據(jù)包括服務(wù)端返回的響應(yīng)和每25s一個的心跳幀。

 

實戰(zhàn)篇丨最強輔助Jmeter,測試WebSocket協(xié)議應(yīng)用

 

后續(xù)通過WebSocket協(xié)議提交、廣播、拉取各種類型的增量數(shù)據(jù)。

了解了這些之后就可以開始在測試場景中添加和配置WebSocket的sampler編寫腳本。

1.右鍵單擊測試計劃,選擇添加->線程->線程組,將一個線程組添加到測試計劃。

2.在線程組添加WebSocket request-response Sampler建立連接,選擇建立新連接,并發(fā)送請求數(shù)據(jù)如下:

 

實戰(zhàn)篇丨最強輔助Jmeter,測試WebSocket協(xié)議應(yīng)用

 

說明:

(1)Connection:有兩個選項,第一項是使用已有連接,就是上一個WebSocket請求所建立的連接通道,選擇后Server URL全置灰只讀不可操作。第二項是新建連接通道。

(2)Server URL:可以發(fā)送ws協(xié)議和加密的WebSocket,即wss協(xié)議。Server Name Or IP處填寫WebSocket服務(wù)器的地址,Port和Path依照實際填寫即可。

(3)Request data:支持文本(包括JSON)和Binary二進制數(shù)據(jù)的發(fā)送,可以將瀏覽器中查看到的數(shù)據(jù)根據(jù)需求參數(shù)化之后填寫。默認請求響應(yīng)的超時時間為6S,超過這個時間報錯。

因為要通過收到返回包含CONNECTED字樣的報文來判斷是否發(fā)送后續(xù)的消息。需要把收到的服務(wù)端返回的其他數(shù)據(jù)幀過濾掉,再用斷言進行判斷。

右鍵單擊WebSocket request-response Sampler添加->配置元件->WebSocket Text Frame Filter,配置條件過濾掉不需要的數(shù)據(jù)幀,如心跳幀等。

 

實戰(zhàn)篇丨最強輔助Jmeter,測試WebSocket協(xié)議應(yīng)用

 

右鍵添加->斷言->響應(yīng)斷言,添加斷言對建立連接的響應(yīng)幀進行判斷。

 

實戰(zhàn)篇丨最強輔助Jmeter,測試WebSocket協(xié)議應(yīng)用

 

第一個建立連接的請求成功后,后續(xù)WebSocket request-response Sampler的連接類型選擇使用已存在的連接,下面的Server URL全置灰只讀不可操作。

 

實戰(zhàn)篇丨最強輔助Jmeter,測試WebSocket協(xié)議應(yīng)用

 

添加后續(xù)的SUBSCRIBE訂閱文檔,通過固定請求數(shù)據(jù)中的文檔id可以使所有用戶打開同一個文檔,添加SEND類型為CLIENT_READY消息請求后,就完成了基本的打開文檔建立連接的操作,之后可以添加循環(huán)控制器并用類似的方法添加發(fā)送編輯文檔的請求。

運行腳本

腳本完成之后配置線程組的線程數(shù),循環(huán)次數(shù)或執(zhí)行時間,即可模擬并發(fā)用戶同時編輯文檔,添加結(jié)果樹、聚合報告等監(jiān)聽器后可以查看測試的運行情況:

 

實戰(zhàn)篇丨最強輔助Jmeter,測試WebSocket協(xié)議應(yīng)用

 

從瀏覽器也可以驗證收到了其他并發(fā)用戶廣播的數(shù)據(jù)。

 

實戰(zhàn)篇丨最強輔助Jmeter,測試WebSocket協(xié)議應(yīng)用

 

除了多用戶協(xié)同編輯用一個文檔的場景,性能測試的過程中還覆蓋了協(xié)同用戶保存同一文檔、不同文檔同時保存等場景,確保測試場景的充分性。

本文由網(wǎng)上采集發(fā)布,不代表我們立場,轉(zhuǎn)載聯(lián)系作者并注明出處:http://m.zltfw.cn/shbk/37600.html

聯(lián)系我們

在線咨詢:點擊這里給我發(fā)消息

微信號:15705946153

工作日:9:30-18:30,節(jié)假日休息