4.6 KiB
4.6 KiB
IM 群聊测试环境验收报告
1. 测试信息
- 测试时间:2026-09-16
- HTTP:
https://api.118im.com - WebSocket:
wss://api.118im.com/v0/channels - 租户:
default - 数据库:测试环境租户库
tinode - Redis:测试环境 Redis
- Kafka:测试环境 Kafka
- API Key、Token、数据库与中间件凭据未写入报告。
2. 验收结论
群聊主要链路通过;群主转让测试发现一处群设置缓存版本未失效问题,代码已修复,等待重新发布后复验转让与解散:
- 群业务 HTTP 深度审计:基础及治理、审批项
41/41通过。 - 群 WebSocket、消息、文件专项:
16/16通过。 - 群实时收发核心路径额外连续执行 3 轮,
24/24通过。 - 群消息 Kafka 消费组 lag 为
0。 - 群主转让:测试环境当前版本失败,返回
409 VERSION_CONFLICT;已定位并修复,需发布复验。 - 群解散:依赖转让成功后的新群主身份,本轮未能完成最终测试环境验收。
3. 功能结果
| 范围 | 结果 | 验证内容 |
|---|---|---|
| 群基础管理 | 通过 | 创建、列表、详情、资料修改、个人群设置、群昵称、成员列表与成员资料 |
| 群治理 | 通过 | 治理配置读取与成功更新,普通成员越权返回 403,版本号递增 |
| 管理员 | 通过 | 管理员数量限制、设置管理员、管理员修改治理配置、取消管理员 |
| 禁言 | 通过 | 群主禁言、成员查询自身禁言、被禁言 WS 发消息返回 403、解禁后立即恢复发送 |
| 公告 | 通过 | 发布公告、公告详情、成员已读 |
| 入群审批 | 通过 | 非成员申请、普通成员不可读审批、群主查询并通过、新成员进群后可访问、主动退群 |
| 实时消息 | 通过 | 双端订阅、双向广播、历史拉取,连续 3 轮均成功 |
| 消息幂等 | 通过 | 相同 x-im-client-mid 重复发送返回同一 seq,数据库仅保留一条消息 |
| 消息查询 | 通过 | 消息上下文、聊天记录搜索 |
| 消息撤回 | 通过 | 发送者在时限内撤回,状态变为 recalled,版本由 1 递增为 2 |
| 群文件 | 通过 | 文件上传 OSS、关联群文件、成员检索、群主删除关联 |
| 权限隔离 | 通过 | 普通成员修改治理、读取管理限制、禁言他人、读取审批列表均被拒绝 |
| 群主转让 | 待复验 | 二次验证成功,但读取到缓存版本 4,MySQL 实际版本为 6,提交返回版本冲突 |
| 群解散 | 待复验 | 转让失败后目标用户不是群主,解散按权限规则返回 403 |
4. 数据链路核验
最终消息验证群:grpMQrTw9wvUlA。
| 检查项 | 结果 |
|---|---|
| 月表落库 | im_group_messages_202609 存在 seq=1,2,3 三条消息 |
| 旧表隔离 | im_group_messages 中该群消息数量为 0 |
| 撤回状态 | seq=1 为 recalled,version=2 |
| 幂等记录 | dedup-16737970 对应 seq=2,状态 done,无重复行 |
| 月段路由 | 202609,min_seq=1,max_seq=3,message_count=3 |
| Redis 原子序号 | last_seq=3 |
| Redis 热消息索引 | 包含 seq=1,2,3 |
| Redis 月段路由 | 202609 -> 1,元数据为 1:3:3 |
| Kafka 异步落库 | im-server.group_message_persist 检查时当前 offset 62、末端 offset 62、lag 0 |
| 禁言业务状态 | 三轮禁言记录均由 active 正常流转为 revoked,版本为 2 |
5. 测试数据
本轮创建了多组 a*、b*、c* 自动化用户和 grp* 自动化群,均位于测试租户 default。数据用于回归追踪,后续可按账号前缀和测试时间清理。
6. 补充说明
综合 WebSocket 审计中观察到一次 P2P read 回执等待超时;群聊段已改为独立重连后执行,所有群聊用例稳定通过。该现象不影响本报告的群聊验收结论,但建议后续单独对 P2P 回执跨节点投递做压力与稳定性测试。
7. 已定位问题与修复
入群审批成功和成员退群都会在 MySQL 中重算人数并递增 im_group_settings.version,但原实现只清理成员分页缓存,没有清理 Redis group_settings 对象缓存。群治理接口因此返回旧版本,导致后续群主转让稳定触发版本冲突。
本轮已在成员直接邀请、接受邀请、审批通过、主动退群和群主转让后统一清理群设置缓存,并增加缓存键单元测试。相关定向测试通过:
go test ./server/store ./server/db/mysqlgo test ./server -run 'TestServeIMGroup|TestGroup' -count=1
修复尚未发布到测试环境;发布后应重新执行“读取最新版本 -> 群主转让 -> 新群主解散 -> 旧成员读取返回 410”闭环。