xiangyixiangqin/miniapp/SignalR测试指南.md
2026-01-14 20:23:13 +08:00

8.6 KiB
Raw Permalink Blame History

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 连接测试

测试步骤:

  1. 打开小程序,登录账号 A
  2. 进入任意聊天页面
  3. 查看控制台日志

预期结果:

[SignalR] 正在连接: ws://localhost:5000/hubs/chat
[SignalR] WebSocket 连接已打开
[SignalR] 握手成功
[Chat] SignalR 连接成功
[SignalR] 已加入会话: 123

验证点:

  • WebSocket 连接成功
  • 握手成功
  • 加入会话成功
  • 无错误日志

2.2 实时消息推送测试

测试步骤:

  1. 账号 A 和账号 B 分别登录小程序
  2. 账号 A 进入与账号 B 的聊天页面
  3. 账号 B 进入与账号 A 的聊天页面
  4. 账号 A 发送文本消息:"你好"
  5. 观察账号 B 的聊天页面

预期结果:

  • 账号 B 无需刷新,立即看到账号 A 发送的消息
  • 消息显示在聊天列表底部
  • 页面自动滚动到底部

控制台日志:

# 账号 A 发送消息
[Chat] 发送消息: 你好

# 账号 B 接收消息
[Chat] 收到新消息: { messageId: 123, content: "你好", ... }

验证点:

  • 消息实时推送(无需刷新)
  • 消息内容正确
  • 消息顺序正确
  • 发送者信息正确
  • 时间戳正确

2.3 交换微信请求测试

测试步骤:

  1. 账号 A 和账号 B 保持在聊天页面
  2. 账号 A 点击"交换微信"按钮
  3. 观察账号 B 的聊天页面

预期结果:

  • 账号 B 立即看到交换微信请求卡片
  • 卡片显示"对方想和您交换微信"
  • 显示"同意"和"拒绝"按钮

控制台日志:

# 账号 A
[Chat] 发送交换微信请求

# 账号 B
[Chat] 收到新消息: { messageType: 4, content: "请求交换微信", ... }

验证点:

  • 请求实时推送
  • 卡片样式正确
  • 按钮可点击
  • 状态显示正确

2.4 交换响应测试

测试步骤:

  1. 接上一步,账号 B 点击"同意"按钮
  2. 观察账号 A 的聊天页面

预期结果:

  • 账号 A 立即看到交换结果
  • 原请求卡片状态更新为"已接受"
  • 显示账号 B 的微信号
  • 显示"点击复制微信号"按钮

控制台日志:

# 账号 B
[Chat] 响应交换请求: accept=true

# 账号 A
[Chat] 收到交换响应: { status: 1, exchangedContent: "wechat123", ... }

验证点:

  • 响应实时推送
  • 状态更新正确
  • 微信号显示正确
  • 复制功能正常

2.5 断线重连测试

测试步骤:

  1. 账号 A 保持在聊天页面
  2. 关闭后端服务(模拟断线)
  3. 等待 5 秒
  4. 重新启动后端服务
  5. 观察控制台日志

预期结果:

  • 检测到连接断开
  • 自动尝试重连(指数退避)
  • 重连成功后恢复正常

控制台日志:

[SignalR] WebSocket 连接已关闭
[SignalR] 1000ms 后尝试重连 (1/5)
[SignalR] 正在连接: ws://localhost:5000/hubs/chat
[SignalR] 握手成功
[Chat] SignalR 连接成功

验证点:

  • 检测到断线
  • 自动重连
  • 重连成功
  • 功能恢复正常
  • 最多重连 5 次

2.6 心跳检测测试

测试步骤:

  1. 账号 A 保持在聊天页面
  2. 保持连接 30 秒以上
  3. 观察控制台日志(需要开启详细日志)

预期结果:

  • 每 15 秒发送一次 Ping
  • 收到服务端 Pong 响应

控制台日志:

[SignalR] 发送 Ping
[SignalR] 收到 Pong

验证点:

  • 定时发送心跳
  • 收到心跳响应
  • 连接保持活跃

2.7 多设备同时在线测试

测试步骤:

  1. 账号 A 在设备 1 登录并进入聊天页面
  2. 账号 A 在设备 2 登录并进入同一聊天页面
  3. 账号 B 发送消息
  4. 观察两个设备

预期结果:

  • 设备 1 和设备 2 同时收到消息
  • 消息内容一致
  • 无重复消息

验证点:

  • 多设备同时接收
  • 消息不重复
  • 消息顺序一致

2.8 会话隔离测试

测试步骤:

  1. 账号 A 与账号 B 聊天(会话 1
  2. 账号 A 与账号 C 聊天(会话 2
  3. 账号 B 发送消息
  4. 观察会话 2 页面

预期结果:

  • 会话 2 不会收到会话 1 的消息
  • 消息只推送到对应会话

验证点:

  • 会话隔离正确
  • 消息不串台
  • 推送目标准确

三、性能测试

3.1 消息延迟测试

测试方法:

  1. 账号 A 发送消息,记录时间戳 T1
  2. 账号 B 收到消息,记录时间戳 T2
  3. 计算延迟T2 - T1

预期结果:

  • 局域网:< 100ms
  • 公网:< 500ms

验证点:

  • 延迟在可接受范围内
  • 无明显卡顿

3.2 并发消息测试

测试方法:

  1. 账号 A 快速连续发送 10 条消息
  2. 观察账号 B 接收情况

预期结果:

  • 所有消息都能收到
  • 消息顺序正确
  • 无消息丢失

验证点:

  • 消息完整性
  • 消息顺序性
  • 无丢失无重复

四、异常场景测试

4.1 网络切换测试

测试步骤:

  1. 账号 A 使用 WiFi 连接
  2. 切换到 4G 网络
  3. 观察连接状态

预期结果:

  • 检测到网络切换
  • 自动重连
  • 功能恢复正常

4.2 后台切换测试

测试步骤:

  1. 账号 A 在聊天页面
  2. 切换到后台Home 键)
  3. 等待 30 秒
  4. 切换回前台

预期结果:

  • 连接可能断开
  • 返回前台后自动重连
  • 拉取离线消息

4.3 Token 过期测试

测试步骤:

  1. 账号 A 保持在线
  2. 等待 Token 过期(或手动修改 Token
  3. 观察连接状态

预期结果:

  • 连接断开
  • 提示需要重新登录
  • 不会无限重连

五、常见问题排查

5.1 连接失败

可能原因:

  • 后端服务未启动
  • WebSocket 端口被占用
  • Token 无效或过期
  • CORS 配置错误

排查步骤:

  1. 检查后端服务是否运行
  2. 检查 WebSocket URL 是否正确
  3. 检查 Token 是否有效
  4. 查看后端日志

5.2 消息收不到

可能原因:

  • SignalR 未连接
  • 会话 ID 不匹配
  • 事件监听未注册
  • 消息被过滤

排查步骤:

  1. 检查 signalR.connected 状态
  2. 检查 sessionId 是否正确
  3. 检查事件监听是否注册
  4. 查看控制台日志

5.3 重连失败

可能原因:

  • 网络完全断开
  • 后端服务未恢复
  • 重连次数超限

排查步骤:

  1. 检查网络连接
  2. 检查后端服务状态
  3. 手动调用 signalR.reconnect()

六、测试报告模板

测试环境

  • 后端版本: ASP.NET Core 8.0
  • 前端版本: uni-app
  • 测试时间: YYYY-MM-DD
  • 测试人员: [姓名]

测试结果

测试项 状态 备注
连接测试 /
实时消息推送 /
交换微信请求 /
交换响应 /
断线重连 /
心跳检测 /
多设备在线 /
会话隔离 /

发现的问题

  1. [问题描述]
  2. [问题描述]

改进建议

  1. [建议内容]
  2. [建议内容]

七、生产环境部署检查

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 实时通讯功能已完整实现,包括:

  • 实时消息推送
  • 断线重连机制
  • 心跳检测
  • 会话隔离
  • 多设备支持

建议在生产环境部署前完成所有测试项,确保功能稳定可靠。