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

457 lines
8.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# SignalR 实时通讯测试指南
**测试日期**: 2026-01-14
**功能状态**: ✅ 已实现
---
## 一、测试前准备
### 1.1 环境要求
- ✅ 后端服务已启动ASP.NET Core 8.0
- ✅ 数据库已配置SQL Server
- ✅ 小程序开发工具已安装
- ✅ 至少准备 2 个测试账号
### 1.2 配置检查
#### 后端配置
```bash
# 检查 Program.cs 是否包含以下配置
builder.Services.AddSignalR();
app.MapHub<ChatHub>("/hubs/chat");
```
#### 前端配置
```javascript
// 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 支持:
```nginx
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 实时通讯功能已完整实现,包括:
- ✅ 实时消息推送
- ✅ 断线重连机制
- ✅ 心跳检测
- ✅ 会话隔离
- ✅ 多设备支持
建议在生产环境部署前完成所有测试项,确保功能稳定可靠。