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

如何進行WebSocket協議的壓測

通過Apache JMeter和對應的插件編寫腳本,并在PTS中上傳這些腳本、插件JAR包和其他相關文件,即可發起壓測。 本文以JMeter WebSocket Samplers插件為例,主要介紹如何在本地使用Apache JMeter編寫、調試壓測腳本,以實現WebSocket協議的業務場景壓測。

前提條件

已有正在運行的WebSocket服務。本示例使用Python搭建一個簡易的WebSocket服務來做演示。

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()

使用python server.py運行服務端程序。

背景信息

WebSocket的插件較多,本文僅以JMeter WebSocket Samplers為例。JMeter WebSocket Samplers具有以下特性:

  • 提供了六種WebSocket Sampler,這些Sampler不會新建額外的線程,節省資源。

  • 支持WSS (WebSocket over TLS)。

  • JMeter的SSLManager能設置WSS,包括客戶端證書。

  • 支持二進制的WebSocket數據幀。

  • 支持二進制響應的斷言。

  • View Results Tree里可以查看二進制結果。

  • 支持使用JMeter的Header Manager設置WebSocket Upgrade Request上額外的HTTP Header。

  • 支持使用JMeter的Cookie Manager設置升級協議的請求里的Cookie。

  • 支持代理。

  • 支持過濾數據幀。

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

操作步驟如下:

步驟一:安裝插件JMeter WebSocket Samplers

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

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

    重要

    在PTS中發起壓測時,此處下載的插件.jar包需要上傳到PTS。請參見步驟五:上傳腳本、插件JAR包和其他文件至PTS進行壓測

  3. 重啟JMeter。

    重啟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,可看到以下新增的采樣器選項,具體說明如下。

      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連接

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

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

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

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

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

步驟二:創建腳本

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

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

  2. 在線程組中依次添加采樣器(Sampler),并進行配置。右鍵單擊Thread Group,選擇Add > Sampler > WebSocket Open Connection。當前的Sampler將建立WebSocket連接。

    image

    相關的配置如下:

    配置項

    示例值

    說明

    協議

    WS

    協議可以是WS或WSS(Secure WebSocket)。使用WSS進行加密連接。

    Server name or IP

    echo.example.com

    域名或IP

    Port

    8080

    端口

    Path

    -

    可為空

    Connection timeout(ms)

    20000

    建連的超時時間

    Read timeout(ms)

    6000

    等待服務器響應的超時時間

  3. 右鍵單擊Thread Group,選擇Add > Sampler > WebSocket Ping/Pong。該Sampler用來測試Ping/Pong功能。

    image

    相關配置如下:

    Pong(讀)超時(ms):6000

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

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

    image

    相關配置如下:

    配置項

    示例值

    說明

    Connection

    use existing connection

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

    數據類型

    文本

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

    Request data

    PTS

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

    Response (read) timeout (ms)

    6000

    響應超時時間

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

    image

    相關配置如下:

    配置項

    示例值

    說明

    Connection

    use existing connection

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

    數據類型

    文本

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

    Request data

    PTS

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

    Response (read) timeout (ms)

    6000

    響應超時時間

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

    image相關配置如下:

    配置項

    示例值

    說明

    Connection

    use existing connection

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

    數據類型

    文本

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

    Response (read) timeout (ms)

    6000

    響應超時時間

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

    image

    相關配置如下:

    配置項

    示例值

    說明

    Close Status

    二進制

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

    Response (read) timeout (ms)

    6000

    響應超時時間

    此采樣器將關閉現有的WebSocket連接,由于是協商關閉,顯示原因為“1000:sampler requested close”。

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

  9. 右鍵單擊Thread Group,選擇Add > Listener > View Results Tree,在線程組中添加監聽器View Results Tree。接收服務端的消息響應需要使用這個Sampler。

步驟三:運行腳本

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

通過View Results Tree監聽器查看腳本是否運行正常。在左側導航樹中,選擇View Results Tree,檢查所有Sampler是否都配置正確并符合預期。在該監聽器中,如果Sampler前面有綠色對勾表示運行正常。

如出現運行異常的Sampler,請參見步驟二:創建腳本進行調試。

部分示例結果如下:

  1. WebSocket request-response Sampler

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

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

  2. WebSocket Single Read Sampler

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

步驟四:導出腳本

當本地腳本調試成功后,選擇頂部菜單欄的File > Save Test Plan as,將腳本文件保存至本地。

步驟五:上傳腳本、插件JAR包和其他文件至PTS進行壓測

您需準備以下文件,上傳到PTS:

  1. 導出的JMeter腳本(.jmx文件)。

  2. JMeter WebSocket Samplers的JAR包。

  3. (可選)腳本中使用的其他數據文件。

關于在PTS中壓測的操作步驟,請參見創建JMeter場景