8.6 KiB
8.6 KiB
SignalR 实时通讯测试指南
测试日期: 2026-01-14
功能状态: ✅ 已实现
一、测试前准备
1.1 环境要求
- ✅ 后端服务已启动(ASP.NET Core 8.0)
- ✅ 数据库已配置(SQL Server)
- ✅ 小程序开发工具已安装
- ✅ 至少准备 2 个测试账号
1.2 配置检查
后端配置
# 检查 Program.cs 是否包含以下配置
builder.Services.AddSignalR();
app.MapHub<ChatHub>("/hubs/chat");
前端配置
// miniapp/config/index.js
// 确认 API_BASE_URL 配置正确
API_BASE_URL: 'http://localhost:5000/api/app' // 开发环境
二、功能测试清单
2.1 连接测试 ✅
测试步骤:
- 打开小程序,登录账号 A
- 进入任意聊天页面
- 查看控制台日志
预期结果:
[SignalR] 正在连接: ws://localhost:5000/hubs/chat
[SignalR] WebSocket 连接已打开
[SignalR] 握手成功
[Chat] SignalR 连接成功
[SignalR] 已加入会话: 123
验证点:
- WebSocket 连接成功
- 握手成功
- 加入会话成功
- 无错误日志
2.2 实时消息推送测试 ✅
测试步骤:
- 账号 A 和账号 B 分别登录小程序
- 账号 A 进入与账号 B 的聊天页面
- 账号 B 进入与账号 A 的聊天页面
- 账号 A 发送文本消息:"你好"
- 观察账号 B 的聊天页面
预期结果:
- 账号 B 无需刷新,立即看到账号 A 发送的消息
- 消息显示在聊天列表底部
- 页面自动滚动到底部
控制台日志:
# 账号 A 发送消息
[Chat] 发送消息: 你好
# 账号 B 接收消息
[Chat] 收到新消息: { messageId: 123, content: "你好", ... }
验证点:
- 消息实时推送(无需刷新)
- 消息内容正确
- 消息顺序正确
- 发送者信息正确
- 时间戳正确
2.3 交换微信请求测试 ✅
测试步骤:
- 账号 A 和账号 B 保持在聊天页面
- 账号 A 点击"交换微信"按钮
- 观察账号 B 的聊天页面
预期结果:
- 账号 B 立即看到交换微信请求卡片
- 卡片显示"对方想和您交换微信"
- 显示"同意"和"拒绝"按钮
控制台日志:
# 账号 A
[Chat] 发送交换微信请求
# 账号 B
[Chat] 收到新消息: { messageType: 4, content: "请求交换微信", ... }
验证点:
- 请求实时推送
- 卡片样式正确
- 按钮可点击
- 状态显示正确
2.4 交换响应测试 ✅
测试步骤:
- 接上一步,账号 B 点击"同意"按钮
- 观察账号 A 的聊天页面
预期结果:
- 账号 A 立即看到交换结果
- 原请求卡片状态更新为"已接受"
- 显示账号 B 的微信号
- 显示"点击复制微信号"按钮
控制台日志:
# 账号 B
[Chat] 响应交换请求: accept=true
# 账号 A
[Chat] 收到交换响应: { status: 1, exchangedContent: "wechat123", ... }
验证点:
- 响应实时推送
- 状态更新正确
- 微信号显示正确
- 复制功能正常
2.5 断线重连测试 ✅
测试步骤:
- 账号 A 保持在聊天页面
- 关闭后端服务(模拟断线)
- 等待 5 秒
- 重新启动后端服务
- 观察控制台日志
预期结果:
- 检测到连接断开
- 自动尝试重连(指数退避)
- 重连成功后恢复正常
控制台日志:
[SignalR] WebSocket 连接已关闭
[SignalR] 1000ms 后尝试重连 (1/5)
[SignalR] 正在连接: ws://localhost:5000/hubs/chat
[SignalR] 握手成功
[Chat] SignalR 连接成功
验证点:
- 检测到断线
- 自动重连
- 重连成功
- 功能恢复正常
- 最多重连 5 次
2.6 心跳检测测试 ✅
测试步骤:
- 账号 A 保持在聊天页面
- 保持连接 30 秒以上
- 观察控制台日志(需要开启详细日志)
预期结果:
- 每 15 秒发送一次 Ping
- 收到服务端 Pong 响应
控制台日志:
[SignalR] 发送 Ping
[SignalR] 收到 Pong
验证点:
- 定时发送心跳
- 收到心跳响应
- 连接保持活跃
2.7 多设备同时在线测试 ✅
测试步骤:
- 账号 A 在设备 1 登录并进入聊天页面
- 账号 A 在设备 2 登录并进入同一聊天页面
- 账号 B 发送消息
- 观察两个设备
预期结果:
- 设备 1 和设备 2 同时收到消息
- 消息内容一致
- 无重复消息
验证点:
- 多设备同时接收
- 消息不重复
- 消息顺序一致
2.8 会话隔离测试 ✅
测试步骤:
- 账号 A 与账号 B 聊天(会话 1)
- 账号 A 与账号 C 聊天(会话 2)
- 账号 B 发送消息
- 观察会话 2 页面
预期结果:
- 会话 2 不会收到会话 1 的消息
- 消息只推送到对应会话
验证点:
- 会话隔离正确
- 消息不串台
- 推送目标准确
三、性能测试
3.1 消息延迟测试
测试方法:
- 账号 A 发送消息,记录时间戳 T1
- 账号 B 收到消息,记录时间戳 T2
- 计算延迟:T2 - T1
预期结果:
- 局域网:< 100ms
- 公网:< 500ms
验证点:
- 延迟在可接受范围内
- 无明显卡顿
3.2 并发消息测试
测试方法:
- 账号 A 快速连续发送 10 条消息
- 观察账号 B 接收情况
预期结果:
- 所有消息都能收到
- 消息顺序正确
- 无消息丢失
验证点:
- 消息完整性
- 消息顺序性
- 无丢失无重复
四、异常场景测试
4.1 网络切换测试
测试步骤:
- 账号 A 使用 WiFi 连接
- 切换到 4G 网络
- 观察连接状态
预期结果:
- 检测到网络切换
- 自动重连
- 功能恢复正常
4.2 后台切换测试
测试步骤:
- 账号 A 在聊天页面
- 切换到后台(Home 键)
- 等待 30 秒
- 切换回前台
预期结果:
- 连接可能断开
- 返回前台后自动重连
- 拉取离线消息
4.3 Token 过期测试
测试步骤:
- 账号 A 保持在线
- 等待 Token 过期(或手动修改 Token)
- 观察连接状态
预期结果:
- 连接断开
- 提示需要重新登录
- 不会无限重连
五、常见问题排查
5.1 连接失败
可能原因:
- 后端服务未启动
- WebSocket 端口被占用
- Token 无效或过期
- CORS 配置错误
排查步骤:
- 检查后端服务是否运行
- 检查 WebSocket URL 是否正确
- 检查 Token 是否有效
- 查看后端日志
5.2 消息收不到
可能原因:
- SignalR 未连接
- 会话 ID 不匹配
- 事件监听未注册
- 消息被过滤
排查步骤:
- 检查
signalR.connected状态 - 检查
sessionId是否正确 - 检查事件监听是否注册
- 查看控制台日志
5.3 重连失败
可能原因:
- 网络完全断开
- 后端服务未恢复
- 重连次数超限
排查步骤:
- 检查网络连接
- 检查后端服务状态
- 手动调用
signalR.reconnect()
六、测试报告模板
测试环境
- 后端版本: ASP.NET Core 8.0
- 前端版本: uni-app
- 测试时间: YYYY-MM-DD
- 测试人员: [姓名]
测试结果
| 测试项 | 状态 | 备注 |
|---|---|---|
| 连接测试 | ✅ / ❌ | |
| 实时消息推送 | ✅ / ❌ | |
| 交换微信请求 | ✅ / ❌ | |
| 交换响应 | ✅ / ❌ | |
| 断线重连 | ✅ / ❌ | |
| 心跳检测 | ✅ / ❌ | |
| 多设备在线 | ✅ / ❌ | |
| 会话隔离 | ✅ / ❌ |
发现的问题
- [问题描述]
- [问题描述]
改进建议
- [建议内容]
- [建议内容]
七、生产环境部署检查
7.1 服务器配置
Nginx 配置(WebSocket 支持):
location /hubs/chat {
proxy_pass http://localhost:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_read_timeout 86400;
}
检查项:
- WebSocket 支持已启用
- 超时时间配置合理
- SSL 证书已配置(wss://)
- 防火墙规则已配置
7.2 监控告警
监控指标:
- SignalR 连接数
- 消息推送成功率
- 平均消息延迟
- 重连次数
告警规则:
- 连接数异常增长
- 推送失败率 > 5%
- 平均延迟 > 1s
- 重连次数 > 100/分钟
八、总结
SignalR 实时通讯功能已完整实现,包括:
- ✅ 实时消息推送
- ✅ 断线重连机制
- ✅ 心跳检测
- ✅ 会话隔离
- ✅ 多设备支持
建议在生产环境部署前完成所有测试项,确保功能稳定可靠。