1. 安装 WebSocket 插件
方法一:通过 Plugins Manager
- 下载并安装 JMeter Plugins Manager
- 在 JMeter 中:
Options
→Plugins Manager
- 搜索
WebSocket
并安装
方法二:手动安装
- 下载
jmeter-websocket-samplers
插件 - 将 jar 文件放到
JMeter/lib/ext/
目录 - 重启 JMeter
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 聊天应用测试
-
连接 WebSocket
-
发送加入房间消息
-
等待确认响应
-
发送聊天消息
-
验证消息广播
-
断开连接
8.2 实时数据测试
-
建立连接
-
订阅数据流
-
持续接收数据
-
验证数据格式
-
测试连接稳定性
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 接口的功能和性能了。