全部产品
云市场

如何进行 WebSocket 协议的压测

更新时间:2019-08-30 15:34:46

通过 Apache JMeter 和对应的插件编写脚本,并在 PTS 中上传这些脚本、插件 JAR 包和其他相关文件,即可发起压测。本文以 JMeter WebSocket Samplers 插件为例,主要介绍如何在本地使用 Apache JMeter 编写、调试压测脚本,以实现 WebSocket 协议的业务场景压测。

背景信息

目前 PTS 原生压测模式不支持压测 WebSocket 协议的业务场景,例如 binary 的数据发送等场景。可以通过 Jmeter 类型压测来实现。

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 原生压测