252 lines
6.9 KiB
Markdown
252 lines
6.9 KiB
Markdown
# TTS连接预热优化测试指南
|
||
|
||
## 测试目标
|
||
|
||
验证TTS WebSocket连接预热和复用功能,确保:
|
||
1. 用户连接时成功预热TTS连接
|
||
2. 多句话复用同一个TTS连接
|
||
3. 连接断开后自动重连
|
||
4. 用户断开时正确清理连接
|
||
5. 性能提升符合预期
|
||
|
||
## 测试环境准备
|
||
|
||
1. 启动后端服务
|
||
2. 确保MiniMax TTS API配置正确
|
||
3. 使用微信小程序或WebSocket客户端
|
||
|
||
## 测试用例
|
||
|
||
### 测试1:连接预热验证
|
||
|
||
**目的**:验证用户连接时是否成功预热TTS连接
|
||
|
||
**步骤**:
|
||
1. 前端连接到语音流WebSocket:`ws://your-server:8091/ws/voice-stream`
|
||
2. 观察后端日志
|
||
|
||
**预期日志**:
|
||
```
|
||
[VoiceStreamHandler] 语音流WebSocket连接建立 - SessionId: xxx, UserId: null
|
||
[VoiceStreamService] 预热TTS连接 - SessionId: xxx
|
||
[MinimaxTtsStreamService] 开始预热TTS连接 - SessionId: xxx
|
||
[MinimaxTtsStreamService] MiniMax TTS连接已建立 - SessionId: xxx
|
||
[MinimaxTtsStreamService] 收到connected_success,发送task_start - SessionId: xxx
|
||
[MinimaxTtsStreamService] 收到task_started,连接就绪 - SessionId: xxx
|
||
[MinimaxTtsStreamService] TTS连接预热成功 - SessionId: xxx, 耗时: XXXms
|
||
[VoiceStreamHandler] TTS连接预热成功 - SessionId: xxx
|
||
```
|
||
|
||
**成功标准**:
|
||
- ✅ 连接建立后立即开始预热
|
||
- ✅ 预热在1-2秒内完成
|
||
- ✅ 连接状态变为IDLE
|
||
|
||
---
|
||
|
||
### 测试2:连接复用验证
|
||
|
||
**目的**:验证多句话是否复用同一个TTS连接
|
||
|
||
**步骤**:
|
||
1. 确保已建立连接并预热成功
|
||
2. 发送一段音频(用户说:"你好,今天天气怎么样?")
|
||
3. 等待AI回复多句话(例如:"你好!今天天气很好。阳光明媚。")
|
||
4. 观察后端日志
|
||
|
||
**预期日志**:
|
||
```
|
||
[VoiceStreamService] STT识别结果 - SessionId: xxx, Text: 你好,今天天气怎么样?
|
||
[VoiceStreamService] 检测到完整句子 - SessionId: xxx, Sentence: 你好!
|
||
[MinimaxTtsStreamService] 使用已有TTS连接 - SessionId: xxx, Text: 你好!
|
||
[MinimaxTtsStreamService] 缓冲音频块 - SessionId: xxx: 2048 bytes, 总计: 2048 bytes
|
||
...
|
||
[MinimaxTtsStreamService] TTS完成 - SessionId: xxx, Text: 你好!, 音频总大小: 24576 bytes
|
||
[MinimaxTtsStreamService] TTS完成 - SessionId: xxx, 耗时: 300ms(复用连接节省约1秒)
|
||
[VoiceStreamService] 检测到完整句子 - SessionId: xxx, Sentence: 今天天气很好。
|
||
[MinimaxTtsStreamService] 使用已有TTS连接 - SessionId: xxx, Text: 今天天气很好。
|
||
[MinimaxTtsStreamService] TTS完成 - SessionId: xxx, 耗时: 250ms(复用连接节省约1秒)
|
||
```
|
||
|
||
**成功标准**:
|
||
- ✅ 日志显示"使用已有TTS连接"而不是"创建MiniMax TTS连接"
|
||
- ✅ 每句TTS完成时间在200-500ms(而非1-1.5s)
|
||
- ✅ 日志显示"复用连接节省约1秒"
|
||
- ✅ 没有重复的连接建立日志
|
||
|
||
---
|
||
|
||
### 测试3:自动重连验证
|
||
|
||
**目的**:验证连接断开后是否自动重连
|
||
|
||
**步骤**:
|
||
1. 正常建立连接
|
||
2. 手动关闭MiniMax TTS WebSocket连接(模拟网络断开)
|
||
3. 发送一段音频触发TTS
|
||
4. 观察后端日志
|
||
|
||
**预期日志**:
|
||
```
|
||
[MinimaxTtsStreamService] MiniMax TTS连接关闭 - SessionId: xxx, Code: 1006, Reason: ..., Remote: true
|
||
[MinimaxTtsStreamService] 尝试自动重连TTS - SessionId: xxx, 第1次重连
|
||
[MinimaxTtsStreamService] 开始预热TTS连接 - SessionId: xxx
|
||
[MinimaxTtsStreamService] TTS连接预热成功 - SessionId: xxx, 耗时: XXXms
|
||
[MinimaxTtsStreamService] 使用已有TTS连接 - SessionId: xxx, Text: ...
|
||
```
|
||
|
||
**成功标准**:
|
||
- ✅ 检测到连接断开
|
||
- ✅ 自动触发重连(最多3次)
|
||
- ✅ 重连成功后可正常使用
|
||
- ✅ 重连失败3次后停止尝试
|
||
|
||
---
|
||
|
||
### 测试4:连接清理验证
|
||
|
||
**目的**:验证用户断开时是否正确清理TTS连接
|
||
|
||
**步骤**:
|
||
1. 建立连接并预热成功
|
||
2. 前端主动断开WebSocket连接
|
||
3. 观察后端日志
|
||
|
||
**预期日志**:
|
||
```
|
||
[VoiceStreamHandler] 语音流WebSocket连接关闭 - SessionId: xxx, Status: CloseStatus[code=1000, reason=null]
|
||
[VoiceStreamService] 关闭TTS连接 - SessionId: xxx
|
||
[MinimaxTtsStreamService] 关闭TTS连接 - SessionId: xxx
|
||
[MinimaxTtsStreamService] 发送task_finish - SessionId: xxx
|
||
[MinimaxTtsStreamService] MiniMax TTS连接关闭 - SessionId: xxx, Code: 1000, Reason: ...
|
||
```
|
||
|
||
**成功标准**:
|
||
- ✅ 正确发送task_finish
|
||
- ✅ 正常关闭TTS连接
|
||
- ✅ 从连接池中移除
|
||
- ✅ 无内存泄漏
|
||
|
||
---
|
||
|
||
### 测试5:性能对比验证
|
||
|
||
**目的**:验证性能提升是否符合预期
|
||
|
||
**测试场景**:AI回复3句话
|
||
|
||
**修改前性能**:
|
||
- 首句延迟:1-1.5秒
|
||
- 第二句延迟:1-1.5秒
|
||
- 第三句延迟:1-1.5秒
|
||
- **总延迟**:3-4.5秒
|
||
|
||
**修改后预期性能**:
|
||
- 首句延迟:0.5秒(仅TTS合成)
|
||
- 第二句延迟:0.2-0.3秒
|
||
- 第三句延迟:0.2-0.3秒
|
||
- **总延迟**:0.9-1.1秒
|
||
|
||
**性能提升**:约 **65-70%**
|
||
|
||
**验证方法**:
|
||
1. 在日志中记录每句TTS的开始和结束时间
|
||
2. 计算总耗时
|
||
3. 与预期值对比
|
||
|
||
---
|
||
|
||
### 测试6:并发测试
|
||
|
||
**目的**:验证多用户同时使用时的连接管理
|
||
|
||
**步骤**:
|
||
1. 创建3-5个WebSocket连接(模拟多用户)
|
||
2. 每个连接同时发送音频
|
||
3. 观察后端日志和性能
|
||
|
||
**成功标准**:
|
||
- ✅ 每个用户有独立的TTS连接
|
||
- ✅ 连接之间互不影响
|
||
- ✅ 无连接混乱
|
||
- ✅ 性能稳定
|
||
|
||
---
|
||
|
||
## 性能监控指标
|
||
|
||
在日志中关注以下关键指标:
|
||
|
||
1. **连接建立时间**:`TTS连接预热成功 - SessionId: xxx, 耗时: XXXms`
|
||
2. **连接复用次数**:统计"使用已有TTS连接"出现次数
|
||
3. **TTS合成时间**:`TTS完成 - SessionId: xxx, 耗时: XXXms`
|
||
4. **重连次数**:`尝试自动重连TTS - SessionId: xxx, 第X次重连`
|
||
5. **连接状态变化**:观察状态从CONNECTING → CONNECTED → TASK_STARTED → IDLE的转换
|
||
|
||
---
|
||
|
||
## 常见问题排查
|
||
|
||
### 问题1:预热失败
|
||
|
||
**现象**:`TTS连接预热失败 - SessionId: xxx`
|
||
|
||
**可能原因**:
|
||
- MiniMax API配置错误
|
||
- 网络连接问题
|
||
- API密钥过期
|
||
|
||
**解决方法**:
|
||
- 检查application.yml中的MiniMax配置
|
||
- 验证API密钥是否有效
|
||
- 检查网络连接
|
||
|
||
### 问题2:连接未复用
|
||
|
||
**现象**:每次TTS都显示"创建MiniMax TTS连接"
|
||
|
||
**可能原因**:
|
||
- 连接状态管理错误
|
||
- 连接在使用前被关闭
|
||
|
||
**解决方法**:
|
||
- 检查连接状态日志
|
||
- 确认is_final后状态设为IDLE而非关闭
|
||
|
||
### 问题3:自动重连失败
|
||
|
||
**现象**:重连3次后仍无法恢复
|
||
|
||
**可能原因**:
|
||
- MiniMax服务问题
|
||
- 网络持续不稳定
|
||
|
||
**解决方法**:
|
||
- 检查MiniMax服务状态
|
||
- 降级为按需创建连接
|
||
|
||
---
|
||
|
||
## 测试清单
|
||
|
||
- [ ] 测试1:连接预热验证
|
||
- [ ] 测试2:连接复用验证
|
||
- [ ] 测试3:自动重连验证
|
||
- [ ] 测试4:连接清理验证
|
||
- [ ] 测试5:性能对比验证
|
||
- [ ] 测试6:并发测试
|
||
- [ ] 检查无内存泄漏
|
||
- [ ] 检查无连接泄漏
|
||
- [ ] 压力测试(10+并发用户)
|
||
|
||
---
|
||
|
||
## 测试结论
|
||
|
||
完成所有测试后,记录:
|
||
1. 实际性能提升百分比
|
||
2. 连接复用成功率
|
||
3. 自动重连成功率
|
||
4. 发现的问题和改进建议
|
||
|