XuqmGroup-iOSSDK/TEST_REPORT.md
XuqmGroup 824edd48bc docs: 添加 SDK API 重设计、安全设计规范和测试进度跟踪文档
- 新增 SDK API 重设计规范文档,统一各端 SDK 初始化、登录、消息接口
- 新增安全设计规范文档,涵盖密码安全、AppSecret 验证、令牌存储等安全要点
- 新增 Bug 跟踪记录文档,记录已修复问题和开放问题
- 新增测试进度跟踪文档,记录各模块测试覆盖情况和验证结果
2026-05-02 11:45:43 +08:00

6.9 KiB

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:))
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.login 内部触发 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. 返回 ImMessagestatus.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. 返回 ImGroupmemberIds 包含指定用户
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=trueforceUpdate=true,调用 openAppStore(url:)
3. 观察是否能正确跳转到 App Store 或下载页
预期结果 1. 返回 AppUpdateInfoplatform=IOS
2. forceUpdate 为布尔值,下载链接有效
3. UIApplication.shared.open 成功跳转
实际结果 待测试
通过状态

TC-08 UserSig 匹配登录测试(新增)

字段 内容
测试目的 验证 XuqmSDK 仅按 userId + userSig 建立 IM 登录态,不解析生命周期字段
测试步骤 1. 使用业务服务端签发的 UserSig 调用 XuqmSDK.shared.login(userId:userSig:)
2. 观察 ImSDK.shared.login 建立 WebSocket 连接
3. 保持连接并确认 SDK 侧不启动生命周期 Timer
4. 再次传入同一 userId 与匹配的新 UserSig 调用 login
预期结果 1. SDK 只保存当前 userIduserSig
2. 不解析 JWT exp,不触发生命周期回调
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 匹配登录测试 待测试