- 添加 expiresAt 和 refreshUserSig 参数支持自动续签 - 修改 PushSDK 初始化方式,自动完成设备注册和厂商初始化 - 调整过期续签策略,从提前 15 分钟改为提前 5 分钟触发 - 重构 RN SDK 文档结构,简化安装和使用方式 - 更新统一登录流程,支持 profile 信息传递 - 添加 IM 数据库自动隔离功能 - 修复 Android 群消息聚合问题 - 补充自动化测试验证和错误处理机制
7.0 KiB
7.0 KiB
iOS SDK 测试报告
生成时间: 2026-05-01
版本: 0.1.0
测试状态: 部分功能待测试
测试环境
| 项目 | 版本/配置 |
|---|---|
| Xcode | 16.0 |
| iOS 模拟器 | iPhone 16 Pro(iOS 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:)) 2. 确认 XuqmSDK.shared.requireConfig() 返回有效配置 3. 确认 ApiClient.shared 已配置 baseURL 与拦截器 |
| 预期结果 | 1. 初始化成功,无 fatalError 2. config.appId 与传入值一致 3. TokenStore 已实例化 |
| 实际结果 | 待测试 |
| 通过状态 | ⬜ |
TC-02 IM 登录/登出测试(UserSig 模式)
| 字段 | 内容 |
|---|---|
| 测试目的 | 验证 UserSig 鉴权登录与登出流程 |
| 测试步骤 | 1. 调用 XuqmSDK.shared.login(userId: "user_001", userSig: "xxx") 2. 观察 ImSDK.shared.loginWithUserSig 内部触发 WebSocket 连接 3. 监听 ImEventDelegate.imClientDidConnect() 4. 调用 XuqmSDK.shared.logout() 5. 确认 ImSDK.shared.disconnect() 执行,Push Token 解注册 |
| 预期结果 | 1. currentUserId 被赋值 2. WebSocket 连接成功,状态变为 .connecting → .connected 3. delegate imClientDidConnect() 触发 4. 登出后 currentUserId 置 nil 5. PushSDK.shared.unregisterToken 被调用 |
| 实际结果 | 待测试 |
| 通过状态 | ⬜ |
TC-03 单聊消息收发测试
| 字段 | 内容 |
|---|---|
| 测试目的 | 验证单聊消息发送、接收、历史与已读 |
| 测试步骤 | 1. 调用 ImSDK.shared.sendTextMessage(toId:chatType:content:) 2. 接收方通过 ImEventDelegate.imClientDidReceiveMessage(_:) 接收 3. 调用 fetchHistory(toId:page:size:) 4. 调用 markRead(targetId:chatType:) 5. 发送方重新拉取历史,确认 status == .read |
| 预期结果 | 1. 返回 ImMessage,status 为 .sending 或 .sent 2. 接收方实时收到消息,未读角标 +1 3. 历史消息返回 [ImMessage] 4. markRead HTTP 200,未读清零 5. 发送方消息状态更新为 .read |
| 实际结果 | 待测试 |
| 通过状态 | ⬜ |
TC-04 群聊消息收发测试
| 字段 | 内容 |
|---|---|
| 测试目的 | 验证群创建、订阅、群消息收发与历史 |
| 测试步骤 | 1. 调用 createGroup(name:memberIds:groupType:) 2. 双端调用 subscribeGroup(_:) 3. 发送方调用 sendTextMessage(toId:chatType:content:)(chatType=.group) 4. 接收方通过 imClientDidReceiveGroupMessage(_:) 接收 5. 双端调用 fetchGroupHistory(groupId:page:size:) |
| 预期结果 | 1. 返回 ImGroup,memberIds 包含指定用户 2. WebSocket 订阅 /topic/group/{groupId} 成功 3. 群消息发送成功 4. 群成员实时收到消息 5. 群历史正确分页 |
| 实际结果 | 待测试 |
| 通过状态 | ⬜ |
TC-05 连接状态监听测试(新增)
| 字段 | 内容 |
|---|---|
| 测试目的 | 验证 connectionState 属性与 addConnectionStateListener 回调 |
| 测试步骤 | 1. 添加 addConnectionStateListener { state in print(state) } 2. 触发登录,观察状态流转 3. 手动断开网络,观察重连状态 4. 恢复网络,观察恢复为 .connected 5. 调用 disconnect(),观察 .disconnected |
| 预期结果 | 1. 监听器被加入数组 2. 登录时状态变化: .disconnected → .connecting → .connected 3. 断网后状态变为 .disconnected 并触发重连 4. 恢复网络后回到 .connected 5. disconnect() 后状态为 .disconnected,监听器仍保留(不移除) |
| 实际结果 | 待测试 |
| 通过状态 | ⬜ |
TC-06 Push 设备注册测试(APNs + FCM)
| 字段 | 内容 |
|---|---|
| 测试目的 | 验证 APNs 设备 Token 获取、注册与 FCM 备选方案 |
| 测试步骤 | 1. 在 AppDelegate 中调用 PushSDK.shared.requestAuthorization() 2. 系统授权后 UIApplication.shared.registerForRemoteNotifications() 3. 在 didRegisterForRemoteNotificationsWithDeviceToken 中调用 XuqmSDK.shared.registerDeviceToken(_:) 4. 确认 PushSDK.shared.registerToken(token:userId:vendor:) 调用(vendor=.apns) 5. 若集成 Firebase,验证 registerFcmToken 路径 |
| 预期结果 | 1. requestAuthorization 返回 true 2. 系统弹窗申请通知权限 3. cachedDeviceToken 被保存 4. /api/push/register 返回 200 5. FCM 路径返回 vendor=FCM,注册成功 |
| 实际结果 | 待测试 |
| 通过状态 | ⬜ |
TC-07 版本更新检查测试
| 字段 | 内容 |
|---|---|
| 测试目的 | 验证 UpdateSDK 检查 App Store 更新 |
| 测试步骤 | 1. 调用 UpdateSDK.shared.checkAppUpdate(currentVersionCode: 1) 2. 若 needsUpdate=true 且 forceUpdate=true,调用 openAppStore(url:) 3. 观察是否能正确跳转到 App Store 或下载页 |
| 预期结果 | 1. 返回 AppUpdateInfo,platform=IOS 2. forceUpdate 为布尔值,下载链接有效 3. UIApplication.shared.open 成功跳转 |
| 实际结果 | 待测试 |
| 通过状态 | ⬜ |
TC-08 UserSig 过期检测测试(新增)
| 字段 | 内容 |
|---|---|
| 测试目的 | 验证 XuqmSDK 解析 UserSig JWT exp 并在过期前触发回调 |
| 测试步骤 | 1. 生成一个 exp 为当前时间 + 6 分钟的 UserSig JWT 2. 调用 XuqmSDK.shared.login(userId:userSig:) 3. 设置 XuqmSDK.shared.onUserSigExpired = { ... } 4. 等待 1 分钟,观察 Timer 是否在正确时间点触发 5. 触发后调用 logout(),确认 Timer 被 invalidate |
| 预期结果 | 1. extractExpirationDate 正确解析 JWT payload 2. startUserSigExpirationTimer 创建 Timer 3. 到期前 5 分钟触发 onUserSigExpired?() 4. 回调在主线程执行 5. logout() 后 userSigTimer 为 nil,无内存泄漏 |
| 实际结果 | 待测试 |
| 通过状态 | ⬜ |
测试汇总
| 用例编号 | 用例名称 | 状态 |
|---|---|---|
| TC-01 | SDK 初始化测试 | ⬜ 待测试 |
| TC-02 | IM 登录/登出测试(UserSig 模式) | ⬜ 待测试 |
| TC-03 | 单聊消息收发测试 | ⬜ 待测试 |
| TC-04 | 群聊消息收发测试 | ⬜ 待测试 |
| TC-05 | 连接状态监听测试 | ⬜ 待测试 |
| TC-06 | Push 设备注册测试(APNs + FCM) | ⬜ 待测试 |
| TC-07 | 版本更新检查测试 | ⬜ 待测试 |
| TC-08 | UserSig 过期检测测试 | ⬜ 待测试 |