使用jmeter對websocket進行壓力測試

前段時間本着練習angularJS+requireJS的目的寫了一個基於nodeJS和socket.io的聊天室,github地址爲:https://github.com/towersxu/node-socketIO-angular-require-chatroom。當時沒有考慮性能方面的問題,本着功能實現的目的就好。最近恰好有空,打算測試一下這個聊天室的性能。html

測試工具我使用的是JMeter,版本爲2.11。這個是同事拷貝給個人綠色版本。只要有Java環境就能夠運行(下載地址:apache-jmeter-2.11)。點擊bin目錄下的jmeter.bat就能夠運行了。我這個版本自己是不支持websocket測試的,因而須要下載一個插件叫作JMeterWebSocketSampler-1.0.2-SNAPSHOT.jar,這個插件須要下載6個依賴包,以下圖所示:node

在插件安裝好了後,就可使用jmeter來模擬socket.io的通訊了。首先打開chrome控制檯,查看network。進入含有socket.io的頁面時,咱們能夠看到以下圖所示的幾個連接。git

咱們只須要把這幾個連接用jmeter實現了,就能夠模擬瀏覽器和服務器的通訊了。首先咱們模擬前兩個請求。點擊請求咱們能夠看到這個請求的詳細信息,從header上咱們能夠發現其實這兩個請求仍是HTTP請求,只不過帶的參數不同。第二個請求比第一個請求多帶一個參數叫sid,他的值是第一個請求所相應的。這兩個請求咱們能夠看作是TCP中的1次握手過程(我不懂TCP的三次握手,感受這個應該和它差很少)或者說是一次認證,這個sid就是通訊的惟一標識。下面我要使用jmeter模擬這兩個請求。在線程組的sampler裏面選擇HTTP請求。以下圖所示:github

        第一個請求(注意,上面圖片路徑應該爲/socket.io/?EIO=3&transport=polling   少了個問號==!)web

      第二個請求注意,上面圖片路徑應該爲/socket.io/?EIO=3&transport=polling   少了個問號==!正則表達式

注意第二個請求中的${sid},這個是在第一個請求裏面獲取的,全部須要在第一個請求裏面增長一個後置處理器-->正則表達式提取器。chrome

 如今我到chrome裏面查看第3個請求的詳細信息,咱們能夠發現,第三個請求的URL變成了ws,參數transport也變成了websocket。而且多了一個frames欄目。Frames以下圖所示:apache

如今咱們新建一個Websocket sampler來模擬socket連接。併發送2probe給服務器:瀏覽器

添加一個觀察結果樹,運行就能夠看到請求的結果,相應數據爲3probe服務器

後面咱們繼續模擬socket.io的後續連接,也就是Frams裏面的綠色部分,而白色部分就是服務器的響應。注意,最後要使用循環控制器間隔發送2給服務器保持鏈接。個人整個流程以下(上面下載的jmeter的example文件夾中的room-chat-test-010.jxm):

 固然最後的測試結果就不說了,同時加入300個用戶就掛了。話說有沒有人知道怎麼模擬1秒鐘加入100我的?我想測試加入5000人,分爲50秒加入。求留言,地址爲:http://www.cnblogs.com/towersxu/p/4568254.html 

相關文章
相關標籤/搜索