XuqmGroup-iOSSDK/TEST_REPORT.md

131 行
6.9 KiB
Markdown

# iOS SDK 测试报告
> **生成时间**: 2026-05-01
> **版本**: 0.1.0
> **测试状态**: 部分功能待测试
---
## 测试环境
| 项目 | 版本/配置 |
|------|-----------|
| Xcode | 16.0 |
| iOS 模拟器 | iPhone 16 ProiOS 18.0 |
| Swift | 5.9+ |
| Swift Tools Version | 5.9 |
| 最低 iOS 版本 | iOS 14 |
---
## 测试用例清单
### TC-01 SDK 初始化测试
| 字段 | 内容 |
|------|------|
| **测试目的** | 验证 SDK 初始化及模块配置 |
| **测试步骤** | 1. 在 `AppDelegate` 中调用 `XuqmSDK.shared.initialize(config: SDKConfig(appId:appSecret:))` <br> 2. 确认 `XuqmSDK.shared.requireConfig()` 返回有效配置 <br> 3. 确认 `ApiClient.shared` 已配置 baseURL 与拦截器 |
| **预期结果** | 1. 初始化成功,无 fatalError <br> 2. `config.appId` 与传入值一致 <br> 3. `TokenStore` 已实例化 |
| **实际结果** | 待测试 |
| **通过状态** | ⬜ |
---
### TC-02 IM 登录/登出测试UserSig 模式)
| 字段 | 内容 |
|------|------|
| **测试目的** | 验证 UserSig 鉴权登录与登出流程 |
| **测试步骤** | 1. 调用 `XuqmSDK.shared.login(userId: "user_001", userSig: "xxx")` <br> 2. 观察 `ImSDK.shared.login` 内部触发 WebSocket 连接 <br> 3. 监听 `ImEventDelegate.imClientDidConnect()` <br> 4. 调用 `XuqmSDK.shared.logout()` <br> 5. 确认 `ImSDK.shared.disconnect()` 执行,Push Token 解注册 |
| **预期结果** | 1. `currentUserId` 被赋值 <br> 2. WebSocket 连接成功,状态变为 `.connecting``.connected` <br> 3. delegate `imClientDidConnect()` 触发 <br> 4. 登出后 `currentUserId` 置 nil <br> 5. `PushSDK.shared.unregisterToken` 被调用 |
| **实际结果** | 待测试 |
| **通过状态** | ⬜ |
---
### TC-03 单聊消息收发测试
| 字段 | 内容 |
|------|------|
| **测试目的** | 验证单聊消息发送、接收、历史与已读 |
| **测试步骤** | 1. 调用 `ImSDK.shared.sendTextMessage(toId:chatType:content:)` <br> 2. 接收方通过 `ImEventDelegate.imClientDidReceiveMessage(_:)` 接收 <br> 3. 调用 `fetchHistory(toId:page:size:)` <br> 4. 调用 `markRead(targetId:chatType:)` <br> 5. 发送方重新拉取历史,确认 `status == .read` |
| **预期结果** | 1. 返回 `ImMessage`,`status` 为 `.sending``.sent` <br> 2. 接收方实时收到消息,未读角标 +1 <br> 3. 历史消息返回 `[ImMessage]` <br> 4. `markRead` HTTP 200,未读清零 <br> 5. 发送方消息状态更新为 `.read` |
| **实际结果** | 待测试 |
| **通过状态** | ⬜ |
---
### TC-04 群聊消息收发测试
| 字段 | 内容 |
|------|------|
| **测试目的** | 验证群创建、订阅、群消息收发与历史 |
| **测试步骤** | 1. 调用 `createGroup(name:memberIds:groupType:)` <br> 2. 双端调用 `subscribeGroup(_:)` <br> 3. 发送方调用 `sendTextMessage(toId:chatType:content:)`chatType=.group <br> 4. 接收方通过 `imClientDidReceiveGroupMessage(_:)` 接收 <br> 5. 双端调用 `fetchGroupHistory(groupId:page:size:)` |
| **预期结果** | 1. 返回 `ImGroup`,`memberIds` 包含指定用户 <br> 2. WebSocket 订阅 `/topic/group/{groupId}` 成功 <br> 3. 群消息发送成功 <br> 4. 群成员实时收到消息 <br> 5. 群历史正确分页 |
| **实际结果** | 待测试 |
| **通过状态** | ⬜ |
---
### TC-05 连接状态监听测试(新增)
| 字段 | 内容 |
|------|------|
| **测试目的** | 验证 `connectionState` 属性与 `addConnectionStateListener` 回调 |
| **测试步骤** | 1. 添加 `addConnectionStateListener { state in print(state) }` <br> 2. 触发登录,观察状态流转 <br> 3. 手动断开网络,观察重连状态 <br> 4. 恢复网络,观察恢复为 `.connected` <br> 5. 调用 `disconnect()`,观察 `.disconnected` |
| **预期结果** | 1. 监听器被加入数组 <br> 2. 登录时状态变化:`.disconnected` → `.connecting``.connected` <br> 3. 断网后状态变为 `.disconnected` 并触发重连 <br> 4. 恢复网络后回到 `.connected` <br> 5. `disconnect()` 后状态为 `.disconnected`,监听器仍保留(不移除) |
| **实际结果** | 待测试 |
| **通过状态** | ⬜ |
---
### TC-06 Push 设备注册测试APNs + FCM
| 字段 | 内容 |
|------|------|
| **测试目的** | 验证 APNs 设备 Token 获取、注册与 FCM 备选方案 |
| **测试步骤** | 1. 在 `AppDelegate` 中调用 `PushSDK.shared.requestAuthorization()` <br> 2. 系统授权后 `UIApplication.shared.registerForRemoteNotifications()` <br> 3. 在 `didRegisterForRemoteNotificationsWithDeviceToken` 中调用 `XuqmSDK.shared.registerDeviceToken(_:)` <br> 4. 确认 `PushSDK.shared.registerToken(token:userId:vendor:)` 调用vendor=.apns <br> 5. 若集成 Firebase,验证 `registerFcmToken` 路径 |
| **预期结果** | 1. `requestAuthorization` 返回 `true` <br> 2. 系统弹窗申请通知权限 <br> 3. `cachedDeviceToken` 被保存 <br> 4. `/api/push/register` 返回 200 <br> 5. FCM 路径返回 vendor=FCM,注册成功 |
| **实际结果** | 待测试 |
| **通过状态** | ⬜ |
---
### TC-07 版本更新检查测试
| 字段 | 内容 |
|------|------|
| **测试目的** | 验证 UpdateSDK 检查 App Store 更新 |
| **测试步骤** | 1. 调用 `UpdateSDK.shared.checkAppUpdate(currentVersionCode: 1)` <br> 2. 若 `needsUpdate=true``forceUpdate=true`,调用 `openAppStore(url:)` <br> 3. 观察是否能正确跳转到 App Store 或下载页 |
| **预期结果** | 1. 返回 `AppUpdateInfo`,`platform=IOS` <br> 2. `forceUpdate` 为布尔值,下载链接有效 <br> 3. `UIApplication.shared.open` 成功跳转 |
| **实际结果** | 待测试 |
| **通过状态** | ⬜ |
---
### TC-08 UserSig 匹配登录测试(新增)
| 字段 | 内容 |
|------|------|
| **测试目的** | 验证 `XuqmSDK` 仅按 `userId + userSig` 建立 IM 登录态,不解析生命周期字段 |
| **测试步骤** | 1. 使用业务服务端签发的 UserSig 调用 `XuqmSDK.shared.login(userId:userSig:)` <br> 2. 观察 `ImSDK.shared.login` 建立 WebSocket 连接 <br> 3. 保持连接并确认 SDK 侧不启动生命周期 Timer <br> 4. 再次传入同一 `userId` 与匹配的新 UserSig 调用 `login` |
| **预期结果** | 1. SDK 只保存当前 `userId``userSig` <br> 2. 不解析 JWT `exp`,不触发生命周期回调 <br> 3. 重新登录会覆盖当前会话并重连 IM |
| **实际结果** | 待测试 |
| **通过状态** | ⬜ |
---
## 测试汇总
| 用例编号 | 用例名称 | 状态 |
|---------|---------|------|
| TC-01 | SDK 初始化测试 | ⬜ 待测试 |
| TC-02 | IM 登录/登出测试UserSig 模式) | ⬜ 待测试 |
| TC-03 | 单聊消息收发测试 | ⬜ 待测试 |
| TC-04 | 群聊消息收发测试 | ⬜ 待测试 |
| TC-05 | 连接状态监听测试 | ⬜ 待测试 |
| TC-06 | Push 设备注册测试APNs + FCM | ⬜ 待测试 |
| TC-07 | 版本更新检查测试 | ⬜ 待测试 |
| TC-08 | UserSig 匹配登录测试 | ⬜ 待测试 |