全部产品

如何进行 WebSocket 协议的压测

更新时间:2019-03-21 16:43:22

目前 PTS 原生压测模式不支持压测 WebSocket 协议的业务场景,但是您可以通过 Apache JMeter 和对应的插件编写脚本,并在 PTS 中上传这些脚本、插件 JAR 包和其他相关文件,即可发起压测。

本文以 JMeter WebSocket Samplers 插件为例,主要介绍如何在本地使用 Apache JMeter 编写、调试压测脚本,以实现 WebSocket 协议的业务场景压测。

操作步骤如下:

  1. 步骤一:安装插件 JMeter WebSocket Samplers
  2. 步骤二:创建脚本
  3. 步骤三:运行脚本
  4. 步骤四:导出脚本
  5. 步骤五:上传脚本、插件 JAR 包或其他文件至 PTS 进行压测

背景信息

WebSocket 的插件较多,本文仅以 JMeter WebSocket Samplers 为例。下面为您简要介绍 JMeter WebSocket Samplers 的特性。

  • 提供了六种 WebSocket Sampler,这些 Sampler 不会新建额外的线程,节省资源。
  • 支持 WSS(WebSocket over TLS)。
  • JMeter 的 SSLManager 能设置 WSS,包括客户端证书。
  • 支持二进制的 WebSocket 数据帧。
  • 支持二进制响应的断言。
  • View Results Tree 里可以查看二进制结果。
  • 支持使用 JMeter 的 Header Manager 设置 WebScoket Upgrade Request 上额外的 HTTP Header。
  • 支持使用 JMeter 的 Cookie Manager 设置升级协议的请求里的 Cookie。
  • 支持代理。
  • 支持过滤数据帧。

关于本文没有涉及的代理、过滤、分片等信息,详见 JMeter WebSocket Samplers 插件介绍

步骤一:安装插件 JMeter WebSocket Samplers

  1. 下载 JMeter WebSocket Samplers,建议下载最新版本。

  2. 将下载的插件 .jar 包存放在 <JMeter安装目录>/lib/ext 路径下。

    注意:在 PTS 中发起压测时,此处下载的插件 .jar 包需要上传到 PTS。详见步骤五

  3. 重启 JMeter。

    重启 JMeter 之后,按照以下步骤查看插件是否安装成功:

    • 右键单击左侧导航树中的 Test Plan,选择 Add > Config Element,可看到新增的配件元件选项 WebSocket Binary Frame FilterWebSocket Ping/Pong Frame FilterWebSocket Text Frame Filter

      Configelement

    • 右键单击左侧导航树中的 Test Plan,选择 Add > Assertions,可看到新增的断言选项 Binary Response Assertion

      Assertion

    • 右键单击左侧导航树中的 Test Plan,选择 Add > listener > View Results Tree,在编辑页面左下方的下拉列表中,可看到新增的选项 Binary

      view results tree

    • 右键单击左侧导航树中的 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 连接

      下一步,需要配置这些 Sampler。

步骤二:创建脚本

下面将演示如何在测试场景中添加并配置 Sampler。以下为简单示例,您可以根据业务需要进行调整。

  1. 在 Jmeter 页面中,右键单击 Test Plan,选择 Add > Thread (Users) > Thread Group, 将一个线程组添加到测试计划中。

  2. 在线程组中依次添加采样器(Sampler),并进行配置。右键单击 Thread Group,选择 Add > Sampler > WebSocket Open Connection。当前的 Sampler 将建立 WebSocket 连接。

    Websocket建连截图

    说明:我们以 Gateway Echo 服务来创建脚本(wss://echo.websocket.org) 。这是一个 Echo 服务,因此发送到此服务的所有消息都将回显给客户端。

    相关的配置如下:

    配置项 示例值 说明
    协议WS协议可以是 WS 或 WSS(Secure WebSocket)。使用 WSS 进行加密连接。
    Server name or IPecho.websocket.org域名 或 IP
    Port443端口
    Path-可为空
    Connection timeout(ms)20000建连的超时时间
    Read timeout(ms)6000等待服务器响应的超时时间
  3. 右键单击 Thread Group,选择 Add > Sampler > WebSocket Ping/Pong。该 Sampler 用来测试 Ping/Pong 功能。

    websocket的ping/pong

    相关配置如下:

    • Pong(读)超时(ms):6000

      Pong(读)超时表示如果 JMeter 在 6 秒内没有收到 Pong 消息,则 Sampler 将失效。此 Sampler 会复用已有连接。

  4. 右键单击 Thread Group,选择 Add > Sampler > WebSocket request-response Sampler。该 Sampler 将发送文本的一个数据帧并从服务端接收应答。

    websocket的req/response sampler

    相关配置如下:

    配置项 示例值 说明
    Connection use existing connection 创建新的连接或复用已有连接。
    数据类型 文本 指定数据类型、请求数据和响应超时值。
    Request data PTS 请求数据,这里以文本为例
    Response(read)timeout(ms) 6000 响应超时时间
  5. 右键单击 Thread Group,选择 Add > Sampler > WebSocket Single Write Sampler。此请求是非阻塞的,只是将数据发送到服务端不需要等待响应。

    websocket单写sampler

    相关配置如下:

    配置项 示例值 说明
    Connection use existing connection 创建新的连接或复用已有连接
    数据类型 文本 指定数据类型、请求数据和响应超时值
    Request data PTS 请求数据,这里以文本为例
    Response(read)timeout(ms) 6000 响应超时时间
  6. 右键单击 Thread Group,选择 Add > Sampler > WebSocket Single Read Sampler。接收服务端的消息响应需要使用这个 Sampler。

    websocket的单读

    相关配置如下:

    配置项示例值说明
    Connection use existing connection 创建新的连接或复用已有连接
    数据类型 文本 指定数据类型、请求数据和响应超时值
    Response(read)timeout(ms) 6000 响应超时时间
  7. 右键单击 Thread Group,选择 Add > Sampler > WebSocket Close。接收服务端的消息响应需要使用这个 Sampler。

    websocket关闭

    相关配置如下:

    配置项示例值说明
    Close Status 二进制 关闭连接时定义的状态码,数据帧的头两个字节
    Response(read)timeout(ms) 6000 响应超时时间

    此采样器将关闭现有的 WebSocket 连接,由于是协商关闭,显示原因为 “1000:sampler requested close”。

  8. 右键单击 Thread Group,选择 Add > Listener > View Results Tree,在线程组中添加监听器 View Results Tree。接收服务端的消息响应需要使用这个 Sampler。

步骤三:运行脚本

脚本编辑完成后,单击页面顶部的开始按钮,运行脚本。

通过 View Results Tree 监听器查看脚本是否运行正常。在左侧导航树中,选择View Results Tree,检查所有 Sampler 是否都配置正确并符合预期。在该监听器中,如果 Sampler 前面有绿色对勾表示运行正常。

如出现运行异常的 Sampler,请参照步骤二进行调试。

部分示例结果如下:

  • WebSocket request-response Sampler

    根据脚本配置,Request 信息如下:

    查看结果树1

    根据脚本配置,Binary 格式的 Response data 如下:

    查看结果树2

  • WebSocket Single Read Sampler

    根据脚本配置,Text 格式的 Response data 如下:

    查看结果树3

    根据脚本配置,Binary 格式的 Response data 如下:

    查看结果树4

步骤四:导出脚本

当本地脚本调试成功后,选择顶部菜单栏的 File > Save Test Plan as,将脚本文件保存至本地。

步骤五:上传脚本、插件 JAR 包和其他文件至 PTS 进行压测

您需准备以下文件,上传到 PTS:

  1. 导出的 JMeter 脚本(.jmx 文件)
  2. JMeter WebSocket Samplers 的 JAR 包
  3. 脚本中使用的其他数据文件

关于在 PTS 中压测的操作步骤,详见 JMeter 原生压测