# 视频通话功能测试指南 ## 测试前准备 ### 1. 环境要求 - [ ] Web 端使用 HTTPS 或 localhost - [ ] 小程序已获得摄像头和麦克风权限 - [ ] 网络连接正常 - [ ] 微信开发者工具或真机 ### 2. 清除缓存 ``` 微信开发者工具: 1. 点击顶部菜单"工具" 2. 选择"清除缓存" 3. 勾选"全部清除" 4. 点击"确定" 真机测试: 1. 长按小程序 2. 选择"删除" 3. 重新扫码打开 ``` ## 测试场景 1:Web 端呼叫小程序端 ### 步骤 1:小程序端登录 1. 打开小程序 2. 输入患者ID:`2` 3. 点击"登录"按钮 **预期结果:** - ✅ 显示"登录成功"提示 - ✅ 界面显示"当前登录: patient_2" - ✅ 输入框提示变为"输入医生ID或完整userId" **控制台日志:** ``` 获取签名成功: { userId: "patient_2", sdkAppId: "1400xxxxxx", ... } === 小程序端登录信息 === sdkAppId: 1400xxxxxx userId: patient_2 userSig 长度: xxx TUICallKit 初始化成功, userId: patient_2 === 事件监听已设置 === ``` **如果失败:** - ❌ 提示"登录失败" → 检查后端接口是否正常 - ❌ 没有"事件监听已设置"日志 → 初始化失败,检查 SDKAppID ### 步骤 2:Web 端发起呼叫 1. 打开浏览器,登录医生账号 2. 进入患者管理页面 3. 找到患者ID为 2 的患者 4. 点击"视频通话"按钮 **预期结果:** - ✅ Web 端弹出通话窗口 - ✅ 显示"等待对方接听..." - ✅ 浏览器控制台显示"通话已发起" **浏览器控制台日志:** ``` WebRTC 环境检测: { isHttps: true, ... } 签名获取成功: { doctorUserId: "doctor_1", patientUserId: "patient_2", ... } TUICallKit init 方法调用完成 === 发起一对一通话 === 后端返回的 patientUserId: patient_2 最终使用的 targetUserId: patient_2 通话已发起,目标用户: patient_2 >>> 正在呼叫 ``` **如果失败:** - ❌ 提示"获取签名失败" → 检查后端接口 - ❌ 提示"初始化失败" → 检查 WebRTC 环境 - ❌ 提示"对方不在线" → userId 格式不匹配 ### 步骤 3:小程序端接听 **预期结果:** - ✅ 小程序自动弹出通话界面 - ✅ 显示来电提示音 - ✅ 显示"接听"和"拒绝"按钮 - ✅ 显示来电者信息(医生名称) **小程序控制台日志:** ``` === 收到来电 === { inviter: "doctor_1", inviteeList: ["patient_2"], callType: 2, ... } ``` **如果失败:** - ❌ 小程序没有任何反应 → 检查事件监听是否设置 - ❌ 没有"收到来电"日志 → 检查 userId 格式 - ❌ 小程序闪退 → 检查权限是否授予 ### 步骤 4:接听通话 1. 小程序端点击"接听"按钮 **预期结果:** - ✅ 双方都能看到对方的视频画面 - ✅ 双方都能听到对方的声音 - ✅ 控制按钮正常工作(静音、关闭摄像头等) **控制台日志:** ``` Web 端: >>> 通话已接通 小程序端: === 通话已接通 === ``` **如果失败:** - ❌ 只有声音没有画面 → 检查摄像头权限 - ❌ 只有画面没有声音 → 检查麦克风权限 - ❌ 黑屏 → 检查网络连接 ### 步骤 5:挂断通话 1. 任意一方点击"挂断"按钮 **预期结果:** - ✅ 通话立即结束 - ✅ 双方都返回正常界面 - ✅ 显示"通话已结束"提示 ## 测试场景 2:小程序端呼叫 Web 端 ### 步骤 1:Web 端保持登录 1. 浏览器打开系统 2. 医生账号登录 3. 保持页面打开 **预期结果:** - ✅ 医生已登录 - ✅ 页面正常显示 ### 步骤 2:小程序端发起呼叫 1. 小程序端已登录为 `patient_2` 2. 在输入框输入:`1` 或 `doctor_1` 3. 点击"呼叫"按钮 **预期结果:** - ✅ 显示"正在呼叫..." - ✅ 小程序显示呼叫界面 **小程序控制台日志:** ``` 准备呼叫用户: doctor_1 发起通话成功, 目标用户: doctor_1 ``` **如果失败:** - ❌ 提示"发起通话失败" → 检查 userId 格式 - ❌ 提示"对方不在线" → Web 端未登录或 userId 不匹配 ### 步骤 3:Web 端接听 **预期结果:** - ✅ Web 端自动弹出通话窗口 - ✅ 显示来电提示 - ✅ 显示"接听"和"拒绝"按钮 **浏览器控制台日志:** ``` >>> 收到来电 inviter: patient_2 ``` **如果失败:** - ❌ Web 端没有反应 → 检查是否已登录 - ❌ 提示"初始化失败" → 刷新页面重新登录 ### 步骤 4:接听并测试 同场景 1 的步骤 4 和步骤 5 ## 测试场景 3:拒绝通话 ### 测试拒绝功能 1. 按照场景 1 或场景 2 发起通话 2. 接收方点击"拒绝"按钮 **预期结果:** - ✅ 通话立即结束 - ✅ 发起方显示"对方已拒绝通话" - ✅ 双方返回正常界面 ## 测试场景 4:超时未接听 ### 测试超时机制 1. 按照场景 1 或场景 2 发起通话 2. 接收方不做任何操作,等待 30 秒 **预期结果:** - ✅ 30 秒后自动挂断 - ✅ 发起方显示"对方未接听" - ✅ 双方返回正常界面 ## 测试场景 5:网络中断 ### 测试网络恢复 1. 正常接通通话 2. 关闭一方的网络连接 3. 等待 5-10 秒 4. 恢复网络连接 **预期结果:** - ✅ 网络中断时显示"网络连接中断" - ✅ 网络恢复后自动重连 - ✅ 如果无法重连,自动挂断 ## 常见问题排查 ### 问题 1:小程序端无法接听 **症状:** Web 端发起呼叫后,小程序端没有任何反应 **排查步骤:** 1. 检查小程序端是否已登录 ``` 界面应显示:"当前登录: patient_2" ``` 2. 检查控制台是否有"事件监听已设置"日志 ``` 如果没有,说明初始化失败 ``` 3. 检查 userId 格式是否一致 ``` Web 端:targetUserId: patient_2 小程序端:userId: patient_2 必须完全一致! ``` 4. 检查 SDKAppID 是否一致 ``` Web 端和小程序端必须使用同一个 SDKAppID ``` 5. 检查小程序是否在前台 ``` 如果切换到后台,可能无法接收来电 ``` **解决方案:** - 重新登录小程序 - 确保 userId 格式一致 - 确保小程序在前台运行 ### 问题 2:提示"对方不在线" **症状:** 发起呼叫时提示"对方不在线"(错误代码 60011) **排查步骤:** 1. 确认对方已登录 2. 检查 userId 格式是否匹配 3. 检查 SDKAppID 是否一致 4. 查看后端日志确认账号已导入 **解决方案:** - 对方重新登录 - 统一 userId 格式 - 检查后端配置 ### 问题 3:无法访问摄像头/麦克风 **症状:** 黑屏或无声音 **排查步骤:** 1. 检查浏览器权限设置 2. 检查小程序权限设置 3. 检查设备是否被其他应用占用 **解决方案:** - 浏览器:地址栏 → 权限 → 允许摄像头和麦克风 - 小程序:设置 → 权限管理 → 允许摄像头和麦克风 - 关闭其他占用设备的应用 ### 问题 4:通话中断或卡顿 **症状:** 通话过程中画面卡顿或中断 **排查步骤:** 1. 检查网络连接速度 2. 检查 CPU 使用率 3. 检查是否有其他大流量应用 **解决方案:** - 切换到更稳定的网络 - 关闭其他占用资源的应用 - 降低视频质量设置 ## 测试检查清单 ### 功能测试 - [ ] Web 端可以呼叫小程序端 - [ ] 小程序端可以呼叫 Web 端 - [ ] 可以正常接听通话 - [ ] 可以拒绝通话 - [ ] 可以挂断通话 - [ ] 视频画面正常显示 - [ ] 音频正常传输 - [ ] 静音功能正常 - [ ] 关闭摄像头功能正常 - [ ] 切换摄像头功能正常(移动端) ### 异常测试 - [ ] 网络中断后能正常恢复 - [ ] 超时未接听能正常处理 - [ ] 对方拒绝能正常提示 - [ ] 对方不在线能正常提示 - [ ] 权限未授予能正常提示 ### 性能测试 - [ ] 通话延迟小于 300ms - [ ] 画面流畅不卡顿 - [ ] 音频清晰无杂音 - [ ] CPU 使用率正常 - [ ] 内存使用正常 ## 测试报告模板 ``` 测试日期:____年____月____日 测试人员:__________ 测试环境: - Web 端浏览器:__________ - 小程序版本:__________ - 网络环境:__________ 测试结果: 场景 1(Web → 小程序):□ 通过 □ 失败 场景 2(小程序 → Web):□ 通过 □ 失败 场景 3(拒绝通话): □ 通过 □ 失败 场景 4(超时未接听): □ 通过 □ 失败 场景 5(网络中断): □ 通过 □ 失败 问题记录: 1. __________ 2. __________ 3. __________ 备注: __________ ``` ## 成功标准 所有测试场景都应该: - ✅ 能够正常发起通话 - ✅ 能够正常接听通话 - ✅ 视频和音频都正常 - ✅ 控制按钮都能正常工作 - ✅ 异常情况能正常处理 - ✅ 用户体验流畅 --- **最后更新:** 2024-03-04 **版本:** 1.0