XuqmGroup-iOSSDK/TEST_REPORT.md
XuqmGroup 255974ae09 docs(deploy): 添加部署文档并更新SDK API设计规范
- 新增完整的XuqmGroup部署文档,包含服务器配置、Docker Compose部署策略
- 更新SDK API重设计规范至V2.0,统一各端SDK初始化和登录接口
- 添加安全设计规范文档,涵盖密码安全、AppSecret验证等内容
- 新增离线推送架构设计文档,定义厂商推送集成方案
- 重构SDK登录流程,统一使用userId + userSig鉴权模式
- 移除dbName等外部配置参数,实现零感知平台地址配置
- 完善部署架构图和配置示例文件
2026-05-02 11:29:50 +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 解析 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 过期检测测试 待测试