日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

如何進行WebSocket協議的壓測

性能測試PTS的JMeter壓測功能依賴Apache JMeter生成的腳本。本文以JMeter WebSocket Samplers插件為例,介紹如何在本地使用Apache JMeter編寫、調試壓測腳本,并在PTS中完成WebSocket協議的壓測場景。

方案概覽

使用Apache JMeter生成WebSocket壓測腳本并在PTS中完成壓測,共需以下五步:

1. 安裝插件JMeter WebSocket Samplers

  1. 下載JMeter WebSocket Samplers,建議下載最新版本(本示例中使用 JMeterWebSocketSamplers-1.2.10.jar)。

  2. 將下載的插件.jar包存放在<JMeter安裝目錄>/lib/ext路徑下。

    重要

    在PTS中發起壓測時,此處下載的插件.jar包需要上傳到PTS。

  3. 重啟Apache JMeter,并按照以下步驟確認插件是否安裝成功。

    1. 右鍵單擊Test Plan,選擇Add > Config Element,可看到新增的配件元件選項WebSocket Binary Frame FilterWebSocket Ping/Pong Frame FilterWebSocket Text Frame Filterimage

    2. 右鍵單擊Test Plan,選擇 Add > Assertions,可看到新增的斷言選項 Binary Response Assertionimage

    3. 右鍵單擊Test Plan,選擇Add > listener > View Results Tree,在編輯頁面左下方的下拉列表中,可看到新增的選項Binary

      image

    4. 右鍵單擊Test Plan,選擇Add > Threads(Users) > Thread Group,右鍵單擊Thread Group,選擇Add > Sampler,可看到以下新增的采樣器選項。

      image

      重要
      • 因為WebSocket是長連接流式通訊,所以可能存在發送一個請求收到多條響應的情況。收到的響應會以先后順序排在一個響應隊列中。當執行一個有讀操作的Sampler時,就從隊列頭部取出一個響應;每當收到一個響應時,就將其放到隊列尾部。

      • WebSocket Single Read Sampler是一個只讀Sampler,它只從隊列頭部讀取一個響應,如果讀不到就等待,直至超時。

      • WebSocket Single Write Sampler是一個只寫Sampler,它只向連接通道發送一個請求且不等待響應。

      • WebSocket Request Response Sampler是一個讀寫Sampler,它向連接通道發送一個請求,然后從響應隊列頭部讀取一個響應,如果讀不到就等待,直至超時。

      • 如果放置的讀Sampler和寫Sampler數量不合適,可能會出現讀到的數據錯位的現象。

    關于本文沒有涉及的代理、過濾、分片等信息,請參見 JMeter WebSocket Samplers 插件介紹

2. 創建腳本

這里將演示如何在測試場景中添加并配置Sampler。以下為簡單示例,您可以根據業務需要進行調整。

  1. 右鍵單擊Test Plan,選Add > Thread (Users) > Thread Group,將一個線程組添加到測試計劃中。

  2. Thread Group中依次添加以下采樣器(Sampler),并進行配置。

    Sampler名稱

    說明

    WebSocket Open Connection

    建立一個WebSocket連接

    WebSocket Ping/Pong

    控制幀,發送Ping并接收Pong

    WebSocket request-response Sampler

    發送和接收文本或二進制WebSocket幀

    WebSocket Single Write Sampler

    發送文本或二進制WebSocket幀

    WebSocket Single Read Sampler

    接收文本或二進制WebSocket幀

    WebSocket Close

    關閉WebSocket連接

    1. 右鍵單擊Thread Group,選擇Add > Sampler > WebSocket Open Connection

      image

      說明

      Server URL配置請替換成您的待測服務配置。這里使用Python搭建一個簡易的WebSocket服務來做演示。這是一個Echo服務,因此發送到此服務的所有消息都將回顯給客戶端。

      server.py示例代碼

      import asyncio
      import websockets
      
      async def echo(websocket, path):
          async for message in websocket:
              message = "Your message: {}".format(message)
              await websocket.send(message)
      
      asyncio.get_event_loop().run_until_complete(websockets.serve(echo, '0.0.0.0', 8080))
      asyncio.get_event_loop().run_forever()
    2. 右鍵單擊Thread Group,選擇Add > Sampler > WebSocket Ping/Pong

      image

      說明

      Pong(read)timeout(ms):6000

      Pong(讀)超時表示如果JMeter在6000ms內沒有收到Pong消息,則Sampler將失效。此Sampler會復用已有連接。

    3. 右鍵單擊Thread Group,選擇Add > Sampler > WebSocket request-response Samplerimage

      配置項

      示例值

      說明

      Connection

      use existing connection

      創建新的連接或復用已有連接。

      數據類型

      Text

      指定數據類型、請求數據和響應超時值。

      Request data

      PTS

      請求數據,這里以文本為例

      Response (read) timeout (ms)

      6000

      響應超時時間

    4. 右鍵單擊Thread Group,選擇Add > Sampler > WebSocket Single Write Sampler。此請求是非阻塞的,只是將數據發送到服務端不需要等待響應。image

      配置項

      示例值

      說明

      Connection

      use existing connection

      創建新的連接或復用已有連接。

      數據類型

      Text

      指定數據類型。

      Request data

      PTS bang bang bang

      請求數據,這里以文本為例。

    5. 右鍵單擊 Thread Group,選擇Add > Sampler > WebSocket Single Read Sampler。接收服務端的消息響應需要使用這個Sampler。image

      配置項

      示例值

      說明

      Connection

      use existing connection

      創建新的連接或復用已有連接。

      數據類型

      文本

      指定數據類型。

      Response (read) timeout (ms)

      6000

      響應超時時間。

    6. 右鍵單擊Thread Group,選擇Add > Sampler > WebSocket Close。此采樣器將關閉現有的WebSocket連接,由于是協商關閉,響應消息為:1000:sampler requested closeimage

      配置項

      示例值

      說明

      Close Status

      1000

      關閉連接時定義的狀態碼,數據幀的頭兩個字節

      Response (read) timeout (ms)

      6000

      響應超時時間

  3. 可選)如果您需要在通信中添加Token等Header,單擊Thread Group,選擇Add > ConfigElement > HttpHeaderManager,在線程組中添加配置元件HttpHeaderManager,并添加對應的Header。具體詳情,請參見JMeter官方文檔

  4. 右鍵單擊Thread Group,選擇Add > Listener > View Results Tree,在線程組中添加監聽器View Results Tree

3. 調試腳本

腳本編輯完成后,單擊頁面頂部的開始按鈕,運行腳本。

通過View Results Tree監聽器查看腳本是否運行正常。在該監聽器中,如果Sampler前面有綠色對勾表示運行正常。如出現運行異常的Sampler,請參見2. 創建腳本進行調試。

部分示例結果如下:

  1. WebSocket request-response Sampler

    根據腳本配置,Request信息如下:image

    根據腳本配置,Text格式的Response data如下:image

  2. WebSocket Single Read Sampler

    根據腳本配置,Text格式的Response data如下:image

4. 導出腳本

當本地腳本調試成功后,選擇頂部菜單欄的File > Save Test Plan as,將腳本文件保存至本地,并命名為wsTest.jmx

5. 創建JMeter壓測場景并啟動壓測

  1. 登錄PTS控制臺,選擇性能測試 > 創建場景,然后單擊JMeter壓測

  2. 配置場景

    1. 輸入場景名,并上傳導出的wsTest.jmx文件。

    2. 腳本上傳成功后,PTS將自動進行插件補全。如果補全失敗,您可單擊上傳文件,添加下載的JMeter WebSocket Samplers的JAR包(本文使用JMeterWebSocketSamplers-1.2.10.jar)和其他數據文件,例如CSV格式的參數文件等。image

  3. 施壓配置

    最大虛擬用戶數配置為10,壓測時長和遞增時長配置2分鐘。其他配置保持默認即可。發起壓測涉及費用問題,建議您合理選擇施壓量級,如需了解更多信息,請參見計費概述壓力模式與量級配置image

  4. 調試并啟動壓測

    1. 調試場景可驗證配置是否合理,避免壓測失敗,建議您先調試場景。

    2. 單擊保存去壓測,在溫馨提示頁面,選擇立即執行并勾選確認本次壓測已獲得準許并遵守當地法律,然后單擊啟動壓測

說明

關于在PTS中進行JMeter壓測的更多信息,請參見創建JMeter場景

分析壓測結果

壓測結束后,系統會自動獲取壓測數據,例如壓測場景指標、業務詳情數據、監控詳情數據和API采樣日志等,生成壓測報告。更多信息,請參見查看JMeter壓測報告