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

如何進(jìn)行WebSocket協(xié)議的壓測(cè)

通過Apache JMeter和對(duì)應(yīng)的插件編寫腳本,并在PTS中上傳這些腳本、插件JAR包和其他相關(guān)文件,即可發(fā)起壓測(cè)。 本文以JMeter WebSocket Samplers插件為例,主要介紹如何在本地使用Apache JMeter編寫、調(diào)試壓測(cè)腳本,以實(shí)現(xiàn)WebSocket協(xié)議的業(yè)務(wù)場(chǎng)景壓測(cè)。

前提條件

已有正在運(yùn)行的WebSocket服務(wù)。本示例使用Python搭建一個(gè)簡(jiǎn)易的WebSocket服務(wù)來(lái)做演示。

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運(yùn)行服務(wù)端程序。

背景信息

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

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

  • 支持WSS (WebSocket over TLS)。

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

  • 支持二進(jìn)制的WebSocket數(shù)據(jù)幀。

  • 支持二進(jìn)制響應(yīng)的斷言。

  • View Results Tree里可以查看二進(jìn)制結(jié)果。

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

  • 支持使用JMeter的Cookie Manager設(shè)置升級(jí)協(xié)議的請(qǐng)求里的Cookie。

  • 支持代理。

  • 支持過濾數(shù)據(jù)幀。

關(guān)于本文沒有涉及的代理、過濾、分片等信息,請(qǐng)參見 JMeter WebSocket Samplers 插件介紹

操作步驟如下:

步驟一:安裝插件JMeter WebSocket Samplers

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

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

    重要

    在PTS中發(fā)起壓測(cè)時(shí),此處下載的插件.jar包需要上傳到PTS。請(qǐng)參見步驟五:上傳腳本、插件JAR包和其他文件至PTS進(jìn)行壓測(cè)

  3. 重啟JMeter。

    重啟JMeter之后,按照以下步驟查看插件是否安裝成功:

    1. 右鍵單擊左側(cè)導(dǎo)航樹中的Test Plan,選擇Add > Config Element,可看到新增的配件元件選項(xiàng)WebSocket Binary Frame Filter、WebSocket Ping/Pong Frame FilterWebSocket Text Frame Filter。image

    2. 右鍵單擊左側(cè)導(dǎo)航樹中的Test Plan,選擇 Add > Assertions,可看到新增的斷言選項(xiàng) Binary Response Assertion。image

    3. 右鍵單擊左側(cè)導(dǎo)航樹中的Test Plan,選擇Add > listener > View Results Tree,在編輯頁(yè)面左下方的下拉列表中,可看到新增的選項(xiàng)Binary。

      image

    4. 右鍵單擊左側(cè)導(dǎo)航樹中的Test Plan,選擇Add > Threads(Users) > Thread Group,右鍵單擊Thread Group,選擇Add > Sampler,可看到以下新增的采樣器選項(xiàng),具體說明如下。

      Sampler名稱

      說明

      WebSocket Open Connection

      建立一個(gè)WebSocket連接

      WebSocket Ping/Pong

      控制幀,發(fā)送Ping并接收Pong

      WebSocket request-response Sampler

      發(fā)送和接收文本或二進(jìn)制WebSocket幀

      WebSocket Single Write Sampler

      發(fā)送文本或二進(jìn)制WebSocket幀

      WebSocket Single Read Sampler

      接收文本或二進(jìn)制WebSocket幀

      WebSocket Close

      關(guān)閉WebSocket連接

      重要
      • 因?yàn)閃ebSocket是長(zhǎng)連接流式通訊,所以可能存在發(fā)送一個(gè)請(qǐng)求收到多條響應(yīng)的情況。收到的響應(yīng)會(huì)以先后順序排在一個(gè)響應(yīng)隊(duì)列中。當(dāng)執(zhí)行一個(gè)有讀操作的Sampler時(shí),就從隊(duì)列頭部取出一個(gè)響應(yīng);每當(dāng)收到一個(gè)響應(yīng)時(shí),就將其放到隊(duì)列尾部。

      • WebSocket Single Read Sampler是一個(gè)只讀Sampler,它只從隊(duì)列頭部讀取一個(gè)響應(yīng),如果讀不到就等待,直至超時(shí)。

      • WebSocket Single Write Sampler是一個(gè)只寫Sampler,它只向連接通道發(fā)送一個(gè)請(qǐng)求且不等待響應(yīng)。

      • WebSocket Request Response Sampler是一個(gè)讀寫Sampler,它向連接通道發(fā)送一個(gè)請(qǐng)求,然后從響應(yīng)隊(duì)列頭部讀取一個(gè)響應(yīng),如果讀不到就等待,直至超時(shí)。

      • 如果放置的讀Sampler和寫Sampler數(shù)量不合適,可能會(huì)出現(xiàn)讀到的數(shù)據(jù)錯(cuò)位的現(xiàn)象。

步驟二:創(chuàng)建腳本

這里將演示如何在測(cè)試場(chǎng)景中添加并配置Sampler。以下為簡(jiǎn)單示例,您可以根據(jù)業(yè)務(wù)需要進(jìn)行調(diào)整。

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

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

    image

    相關(guān)的配置如下:

    配置項(xiàng)

    示例值

    說明

    協(xié)議

    WS

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

    Server name or IP

    echo.example.com

    域名或IP

    Port

    8080

    端口

    Path

    -

    可為空

    Connection timeout(ms)

    20000

    建連的超時(shí)時(shí)間

    Read timeout(ms)

    6000

    等待服務(wù)器響應(yīng)的超時(shí)時(shí)間

  3. 右鍵單擊Thread Group,選擇Add > Sampler > WebSocket Ping/Pong。該Sampler用來(lái)測(cè)試Ping/Pong功能。

    image

    相關(guān)配置如下:

    Pong(讀)超時(shí)(ms):6000

    Pong(讀)超時(shí)表示如果JMeter在6秒內(nèi)沒有收到Pong消息,則Sampler將失效。此Sampler會(huì)復(fù)用已有連接。

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

    image

    相關(guān)配置如下:

    配置項(xiàng)

    示例值

    說明

    Connection

    use existing connection

    創(chuàng)建新的連接或復(fù)用已有連接。

    數(shù)據(jù)類型

    文本

    指定數(shù)據(jù)類型、請(qǐng)求數(shù)據(jù)和響應(yīng)超時(shí)值。

    Request data

    PTS

    請(qǐng)求數(shù)據(jù),這里以文本為例

    Response (read) timeout (ms)

    6000

    響應(yīng)超時(shí)時(shí)間

  5. 右鍵單擊Thread Group,選擇Add > Sampler > WebSocket Single Write Sampler。此請(qǐng)求是非阻塞的,只是將數(shù)據(jù)發(fā)送到服務(wù)端不需要等待響應(yīng)。

    image

    相關(guān)配置如下:

    配置項(xiàng)

    示例值

    說明

    Connection

    use existing connection

    創(chuàng)建新的連接或復(fù)用已有連接

    數(shù)據(jù)類型

    文本

    指定數(shù)據(jù)類型、請(qǐng)求數(shù)據(jù)和響應(yīng)超時(shí)值

    Request data

    PTS

    請(qǐng)求數(shù)據(jù),這里以文本為例

    Response (read) timeout (ms)

    6000

    響應(yīng)超時(shí)時(shí)間

  6. 右鍵單擊 Thread Group,選擇Add > Sampler > WebSocket Single Read Sampler。接收服務(wù)端的消息響應(yīng)需要使用這個(gè)Sampler。

    image相關(guān)配置如下:

    配置項(xiàng)

    示例值

    說明

    Connection

    use existing connection

    創(chuàng)建新的連接或復(fù)用已有連接

    數(shù)據(jù)類型

    文本

    指定數(shù)據(jù)類型、請(qǐng)求數(shù)據(jù)和響應(yīng)超時(shí)值

    Response (read) timeout (ms)

    6000

    響應(yīng)超時(shí)時(shí)間

  7. 右鍵單擊Thread Group,選擇Add > Sampler > WebSocket Close。接收服務(wù)端的消息響應(yīng)需要使用這個(gè)Sampler。

    image

    相關(guān)配置如下:

    配置項(xiàng)

    示例值

    說明

    Close Status

    二進(jìn)制

    關(guān)閉連接時(shí)定義的狀態(tài)碼,數(shù)據(jù)幀的頭兩個(gè)字節(jié)

    Response (read) timeout (ms)

    6000

    響應(yīng)超時(shí)時(shí)間

    此采樣器將關(guān)閉現(xiàn)有的WebSocket連接,由于是協(xié)商關(guān)閉,顯示原因?yàn)椤?000:sampler requested close”。

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

  9. 右鍵單擊Thread Group,選擇Add > Listener > View Results Tree,在線程組中添加監(jiān)聽器View Results Tree。接收服務(wù)端的消息響應(yīng)需要使用這個(gè)Sampler。

步驟三:運(yùn)行腳本

腳本編輯完成后,單擊頁(yè)面頂部的開始按鈕,運(yùn)行腳本。

通過View Results Tree監(jiān)聽器查看腳本是否運(yùn)行正常。在左側(cè)導(dǎo)航樹中,選擇View Results Tree,檢查所有Sampler是否都配置正確并符合預(yù)期。在該監(jiān)聽器中,如果Sampler前面有綠色對(duì)勾表示運(yùn)行正常。

如出現(xiàn)運(yùn)行異常的Sampler,請(qǐng)參見步驟二:創(chuàng)建腳本進(jìn)行調(diào)試。

部分示例結(jié)果如下:

  1. WebSocket request-response Sampler

    根據(jù)腳本配置,Request信息如下:image

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

  2. WebSocket Single Read Sampler

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

步驟四:導(dǎo)出腳本

當(dāng)本地腳本調(diào)試成功后,選擇頂部菜單欄的File > Save Test Plan as,將腳本文件保存至本地。

步驟五:上傳腳本、插件JAR包和其他文件至PTS進(jìn)行壓測(cè)

您需準(zhǔn)備以下文件,上傳到PTS:

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

  2. JMeter WebSocket Samplers的JAR包。

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

關(guān)于在PTS中壓測(cè)的操作步驟,請(qǐng)參見創(chuàng)建JMeter場(chǎng)景