使用Jmeter的Websocket:获取性能数字
問題:
我最近遇到了一個問題,該問題需要針對多個用戶測試SockJs / Stomp Spring Websocket代理的性能。 由于WebSocket本質上是異步的,因此它比常規的http / https請求-響應測試更加棘手。
解:
好了,無需解釋為什么Jmeter是執行這種測試的很好的工具,但是需要一個插件使用stomp協議與Jmeter建立與服務器的websocket連接。
在這里,我發現此插件非常有用,因為它確實處理了與服務器層建立Stomp協議連接的樣板代碼。
但是這個插件有一個局限性,一旦它創建了連接并訂閱了一個websocket主題,它便進入睡眠狀態,一旦它出來,它將在睡眠時間內打印所有接收到的消息并結束其執行。
這通常不適用于交互式應用程序,在這些應用程序中,我們的Websocket會根據其他用戶的各種活動/當前用戶執行的活動不斷接收通知,而不會停止其他屏幕功能。
因此,我們需要對上述插件進行更改,以便websocket繼續監聽消息,而我們的應用程序繼續執行其他各種活動。
實現方法非常簡單:
a)更改SockJsSampler.java文件,以最后刪除websocket的休眠和關閉。 它基本上是181和182行。
b)編寫一個擴展AbstractJavaSamplerClient.java的新Java類。 該類負責偵聽進入您的網絡套接字的消息。
c)現在我們有2個Sampleres(一個用于websocket,一個用于從websocket監聽,它們可以通過隊列連接。在我的情況下,我使用ArrayBlockingQueue) 。
d)修改SockJsSampler以將消息放入此ArrayBlockingQueue中 。 這可以在handleframe方法中的插件的SockJsWebsocketSubscriptionHandler類中完成。
因此,想法是在線程組執行開始時創建一次Websocket連接,并繼續用傳入消息填充隊列,并且在測試計劃的各個點上,使用在(b)點中創建的新示例作為Jmeter Java Request Sampler來讀取消息從隊列中驗證數據。
關于在websocket上接收消息所花費的時間,我們可以開始捕獲自定義采樣器啟動時的時間,并減去接收到其預期消息時的時間。 使用SampleResult API的result.sampleStart()和result.sampleEnd()可以更輕松地完成此操作,當您從AbstractJavaSamplerClient擴展此類時,該方法將在runTest方法中繼承。
注意 :如果要運行多于1個線程的線程組來模擬多個用戶,則可能必須為每個線程設置1個ArrayBlockingQueue ,以便不同線程的偵聽器無法讀取消息。 這很重要,因為我們需要記住,我們只有1個websocket連接,所有線程都共享。 如果您打算讓所有線程都擁有自己的websocket連接,那么您不必擔心這一點。
翻譯自: https://www.javacodegeeks.com/2019/08/websockets-jmeter-getting-performance-numbers.html
總結
以上是生活随笔為你收集整理的使用Jmeter的Websocket:获取性能数字的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 入手鸿蒙设备却不会连接?手把手教你学会n
- 下一篇: Kogito,ergo规则—第2部分:规