# 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. 发现的问题和改进建议