6.9 KiB
6.9 KiB
TTS连接预热优化测试指南
测试目标
验证TTS WebSocket连接预热和复用功能,确保:
- 用户连接时成功预热TTS连接
- 多句话复用同一个TTS连接
- 连接断开后自动重连
- 用户断开时正确清理连接
- 性能提升符合预期
测试环境准备
- 启动后端服务
- 确保MiniMax TTS API配置正确
- 使用微信小程序或WebSocket客户端
测试用例
测试1:连接预热验证
目的:验证用户连接时是否成功预热TTS连接
步骤:
- 前端连接到语音流WebSocket:
ws://your-server:8091/ws/voice-stream - 观察后端日志
预期日志:
[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连接
步骤:
- 确保已建立连接并预热成功
- 发送一段音频(用户说:"你好,今天天气怎么样?")
- 等待AI回复多句话(例如:"你好!今天天气很好。阳光明媚。")
- 观察后端日志
预期日志:
[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:自动重连验证
目的:验证连接断开后是否自动重连
步骤:
- 正常建立连接
- 手动关闭MiniMax TTS WebSocket连接(模拟网络断开)
- 发送一段音频触发TTS
- 观察后端日志
预期日志:
[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连接
步骤:
- 建立连接并预热成功
- 前端主动断开WebSocket连接
- 观察后端日志
预期日志:
[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%
验证方法:
- 在日志中记录每句TTS的开始和结束时间
- 计算总耗时
- 与预期值对比
测试6:并发测试
目的:验证多用户同时使用时的连接管理
步骤:
- 创建3-5个WebSocket连接(模拟多用户)
- 每个连接同时发送音频
- 观察后端日志和性能
成功标准:
- ✅ 每个用户有独立的TTS连接
- ✅ 连接之间互不影响
- ✅ 无连接混乱
- ✅ 性能稳定
性能监控指标
在日志中关注以下关键指标:
- 连接建立时间:
TTS连接预热成功 - SessionId: xxx, 耗时: XXXms - 连接复用次数:统计"使用已有TTS连接"出现次数
- TTS合成时间:
TTS完成 - SessionId: xxx, 耗时: XXXms - 重连次数:
尝试自动重连TTS - SessionId: xxx, 第X次重连 - 连接状态变化:观察状态从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+并发用户)
测试结论
完成所有测试后,记录:
- 实际性能提升百分比
- 连接复用成功率
- 自动重连成功率
- 发现的问题和改进建议