通过 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
- 下载 JMeter WebSocket Samplers,建议下载最新版本。
- 将下载的插件 .jar 包存放在 <JMeter安装目录>/lib/ext 路径下。
- 重启 JMeter。
重启 JMeter 之后,按照以下步骤查看插件是否安装成功:
-
右键单击左侧导航树中的 Test Plan,选择

-
右键单击左侧导航树中的 Test Plan,选择

-
右键单击左侧导航树中的 Test Plan,选择

-
右键单击左侧导航树中的 Test Plan,选择
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。以下为简单示例,您可以根据业务需要进行调整。
- 在 Jmeter 页面中,右键单击 Test Plan,选
- 在线程组中依次添加采样器(Sampler),并进行配置。右键单击 Thread Group,选择
说明 我们以 Gateway Echo 服务来创建脚本(wss://echo.websocket.org) 。这是一个 Echo 服务,因此发送到此服务的所有消息都将回显给客户端。
相关的配置如下:
配置项 | 示例值 | 说明 |
协议 |
WS |
协议可以是 WS 或 WSS(Secure WebSocket)。使用 WSS 进行加密连接。 |
Server name or IP |
echo.websocket.org |
域名或 IP |
Port |
443 |
端口 |
Path |
- |
可为空 |
Connection timeout(ms) |
20000 |
建连的超时时间 |
Read timeout(ms) |
6000 |
等待服务器响应的超时时间 |
- 右键单击 Thread Group,选择
相关配置如下:
Pong(读)超时(ms):6000
Pong(读)超时表示如果 JMeter 在 6 秒内没有收到 Pong 消息,则 Sampler 将失效。此 Sampler 会复用已有连接。
- 右键单击 Thread Group,选择
相关配置如下:
配置项 | 示例值 | 说明 |
Connection |
use existing connection |
创建新的连接或复用已有连接。 |
数据类型 |
文本 |
指定数据类型、请求数据和响应超时值。 |
Request data |
PTS |
请求数据,这里以文本为例 |
Response(read)timeout(ms) |
6000 |
响应超时时间 |
- 右键单击 Thread Group,选择
相关配置如下:
配置项 | 示例值 | 说明 |
Connection |
use existing connection |
创建新的连接或复用已有连接 |
数据类型 |
文本 |
指定数据类型、请求数据和响应超时值 |
Request data |
PTS |
请求数据,这里以文本为例 |
Response(read)timeout(ms) |
6000 |
响应超时时间 |
- 右键单击 Thread Group,选择
相关配置如下:
配置项 | 示例值 | 说明 |
Connection |
use existing connection |
创建新的连接或复用已有连接 |
数据类型 |
文本 |
指定数据类型、请求数据和响应超时值 |
Response(read)timeout(ms) |
6000 |
响应超时时间 |
- 右键单击 Thread Group,选择
相关配置如下:
配置项 | 示例值 | 说明 |
Close Status |
二进制 |
关闭连接时定义的状态码,数据帧的头两个字节 |
Response(read)timeout(ms) |
6000 |
响应超时时间 |
此采样器将关闭现有的 WebSocket 连接,由于是协商关闭,显示原因为 “1000:sampler requested close”。
- 右键单击 Thread Group,选择
步骤三:运行脚本
脚本编辑完成后,单击页面顶部的开始按钮,运行脚本。
通过 View Results Tree 监听器查看脚本是否运行正常。在左侧导航树中,选择View Results Tree,检查所有 Sampler 是否都配置正确并符合预期。在该监听器中,如果 Sampler 前面有绿色对勾表示运行正常。
如出现运行异常的 Sampler,请参见步骤二:创建脚本进行调试。
部分示例结果如下:
- WebSocket request-response Sampler
根据脚本配置,Request 信息如下:
根据脚本配置,Binary 格式的 Response data 如下:

- WebSocket Single Read Sampler
根据脚本配置,Text 格式的 Response data 如下:
根据脚本配置,Binary 格式的 Response data 如下:

步骤四:导出脚本
当本地脚本调试成功后,选择顶部菜单栏的
步骤五:上传脚本、插件 JAR 包和其他文件至 PTS 进行压测
您需准备以下文件,上传到 PTS:
- 导出的 JMeter 脚本(.jmx 文件)
- JMeter WebSocket Samplers 的 JAR 包
- 脚本中使用的其他数据文件
关于在 PTS 中压测的操作步骤,请参见 JMeter 压测。