JMeter 测试 WebSocket 接口的详细教程

1. 安装 WebSocket 插件

方法一:通过 Plugins Manager

  1. 下载并安装 JMeter Plugins Manager
  2. 在 JMeter 中:OptionsPlugins Manager
  3. 搜索 WebSocket 并安装

方法二:手动安装

  1. 下载 jmeter-websocket-samplers 插件
  2. 将 jar 文件放到 JMeter/lib/ext/ 目录
  3. 重启 JMeter

手动安装可参考这个文档:jmeter报错CannotResolveClassException: WebSocketSampler ,JMeter 缺少 WebSocket 插件依赖解决方案_jmeter选择websocket sampler error: java.lang.classca-CSDN博客


2. 创建 WebSocket 测试计划

2.1 添加线程组

测试计划 → 右键 → Add → Threads → Thread Group

2.2 添加 WebSocket Sampler

Thread Group → 右键 → Add → Sampler → WebSocket Single Read Sampler

Thread Group → 右键 → Add → Sampler → WebSocket Single Write Sampler


3. 配置 WebSocket 连接

3.1 WebSocket Open Connection

复制代码
名称: WebSocket Open Connection
Server Name or IP: localhost
Port Number: 8080
Path: /websocket
Protocol: ws 或 wss (安全连接)

示例配置:

复制代码
Server: echo.websocket.org
Port: 80
Path: /
Protocol: ws

3.2 连接参数

复制代码
Connection timeout: 5000 (毫秒)
Response timeout: 20000 (毫秒)
Ignore SSL certificate: 勾选(如果是 wss)

4. WebSocket 操作类型

4.1 发送消息 (Write Sampler)

Thread Group → Add → Sampler → WebSocket Single Write Sampler

配置:

复制代码
- Request data: {"message": "Hello WebSocket"}
- Data type: Text 或 Binary

4.2 接收消息 (Read Sampler)

Thread Group → Add → Sampler → WebSocket Single Read Sampler

配置:

复制代码
- Timeout: 等待响应时间
- Message count: 期望接收的消息数量

4.3 关闭连接 (Close Connection)

Thread Group → Add → Sampler → WebSocket Close

5. 完整测试示例

5.1 测试计划结构

Test Plan

复制代码
├── Thread Group

    ├── WebSocket Open Connection

    ├── WebSocket Single Write Sampler (发送消息)

    ├── WebSocket Single Read Sampler (读取响应)

    ├── WebSocket Single Write Sampler (发送第二条消息)

    ├── WebSocket Single Read Sampler (读取第二个响应)

    └── WebSocket Close

5.2 配置示例

Open Connection:

复制代码
Server: localhost
Port: 8080
Path: /chat
Protocol: ws

Write Sampler:

复制代码
Request data: {"type":"join","username":"testuser"}

Read Sampler:

复制代码
Timeout: 10000

Message Count: 1

6. 添加断言和监听器

6.1 响应断言

复制代码
WebSocket Read Sampler → 右键 → Add → Assertions → Response Assertion
Pattern to Test: Response Text
Pattern Matching Rules: Contains
Patterns to Test: "success" 或期望的响应内容

6.2 查看结果

复制代码
Thread Group → Add → Listener → View Results Tree

Thread Group → Add → Listener → Summary Report

7. 高级配置

7.1 使用变量

复制代码
// 在 User Defined Variables 中定义
SERVER_HOST: localhost
WS_PORT: 8080
WS_PATH: /websocket
// 在 WebSocket Sampler 中使用
Server: ${SERVER_HOST}
Port: ${WS_PORT}
Path: ${WS_PATH}

7.2 动态消息内容

复制代码
// 使用函数
{"userId": "${__UUID()}", "message": "Hello ${__time()}"}
// 使用 CSV 数据
{"userId": "${userId}", "message": "${message}"}

7.3 处理认证

复制代码
// 在消息中包含 token
{"token": "${access_token}", "data": "test message"}
// 或在 URL 中
Path: /websocket?token=${access_token}

8. 实际测试场景

8.1 聊天应用测试

  1. 连接 WebSocket

  2. 发送加入房间消息

  3. 等待确认响应

  4. 发送聊天消息

  5. 验证消息广播

  6. 断开连接

8.2 实时数据测试

  1. 建立连接

  2. 订阅数据流

  3. 持续接收数据

  4. 验证数据格式

  5. 测试连接稳定性


9. 性能测试

9.1 并发连接测试

Thread Group 配置:

复制代码
- Number of Threads: 100
- Ramp-up Period: 60
- Loop Count: 1
测试场景:
- 100个并发用户同时连接
- 每个用户发送多条消息
- 监控服务器性能

9.2 压力测试

复制代码
// 大量消息发送
for (int i = 0; i < 1000; i++) {
    send({"index": i, "data": "test message " + i});
    Thread.sleep(10); // 10ms 间隔
}

10. 常见问题处理

10.1 连接失败

  • 检查服务器地址和端口

  • 确认 WebSocket 服务正在运行

  • 检查防火墙设置

10.2 消息格式问题

复制代码
// 确保 JSON 格式正确
正确:{"message": "hello"}
错误:{message: "hello"}

10.3 超时问题

  • 适当增加 timeout 值

  • 检查网络延迟

  • 确认服务器响应时间

11. 监控指标

关注以下指标:

  • 连接建立时间
  • 消息发送/接收延迟
  • 连接成功率
  • 错误率
  • 吞吐量

这样就可以全面测试 WebSocket 接口的功能和性能了。

相关推荐
..过云雨1 小时前
网络计算器实现 - 自定义套接字+序列化+守护进程
网络·网络协议·tcp/ip
三两肉2 小时前
HTTPS ECDHE 握手全解析
网络协议·https·github·rsa·echde
txinyu的博客3 小时前
HTTP服务实现用户级窗口限流
开发语言·c++·分布式·网络协议·http
掘根4 小时前
【仿Muduo库项目】HTTP模块1——Util子模块
网络·网络协议·http
CCPC不拿奖不改名6 小时前
网络与API:从HTTP协议视角理解网络分层原理+面试习题
开发语言·网络·python·网络协议·学习·http·面试
liulilittle6 小时前
OPENPPP2 网络驱动模式
开发语言·网络·c++·网络协议·信息与通信·通信
tzy2336 小时前
分享一个 HTTP(S) 代理&抓包工具,拦截和Mock Web客户端请求和服务端响应
前端·网络协议·http
mudtools6 小时前
飞书 .NET SDK 事件处理的幂等性与去重机制
websocket·.net·飞书·webhook
小李独爱秋7 小时前
计算机网络经典问题透视:MD5报文是什么?有什么特点?
网络·网络协议·计算机网络·网络安全·信息与通信·信号处理
Tao____7 小时前
如何对接Modbus-tcp协议(使用Thinlinks物联网平台)
java·物联网·网络协议·tcp/ip·modbus