21 KiB
鸽达达管理后台测试问题记录
测试环境:
https://admin.118im.com/admin#/dashboard/console执行日期:2026-09-07 参考用例:测试用例文档.md测试方式:浏览器黑盒测试、HTTP 只读探测、测试库只读核验、当前代码静态核查
1. 执行摘要
| 项目 | 结果 | 说明 |
|---|---|---|
| 测试站点可达性 | 通过 | /admin/ 返回 HTTP 200,响应约 0.2-0.5 秒 |
| 前端功能部署 | 通过 | 部署包包含 imDashboard、imPrivateMessage、imGroupMessage、imUserLoginHistory、imLoginFailureLog、imSecurityPolicy、imSensitiveWord、imUserPolicyGroup |
| Admin 新接口路由 | 通过 | 8 个列表/概览接口均已注册;无登录态请求统一返回业务码 61“登录身份已失效” |
| 浏览器页面操作 | 已恢复 | 已接管用户登录标签页,完成 8 个新增菜单及查询/刷新按钮的只读复测 |
| Admin 测试库结构 | 已修复 | 已在指定测试库 hotgo 创建 7 张策略相关表、8 个页面菜单及按钮权限 |
| IM 测试库结构 | 通过 | tinode 已存在 3 张新增审计/处置表 |
| IM 登录审计数据 | 部分通过 | IM Internal API 已恢复,成功登录历史返回 77 条;失败日志返回成功空列表,仍缺少失败场景验收数据 |
| Kafka Admin 命令 | 风险 | 13 条历史命令中 12 条长期待处理、1 条死信,需检查消费链路 |
| 消息隐藏/删除 | 未执行 | im_message_admin_actions 为 0;尚未准备专用消息数据,且 Kafka 命令链路存在长期积压风险 |
| 好友总开关/宵禁 | 未通过实现核查 | Admin 可配置和发布,但当前 IM Server 未找到运行时消费及拦截代码 |
当前结论:不通过。页面菜单和 Admin 本地策略表已可用,但 IM Internal 查询接口不可用,真实概览、消息和登录日志无法展示;IM 运行时策略执行也尚未完成。
2. 问题清单
BUG-001 Admin 测试库缺少策略相关表
| 字段 | 内容 |
|---|---|
| 严重级别 | P0 |
| 类型 | 数据库部署/环境配置 |
| 状态 | 已修复并完成只读页面复测 |
| 关联用例 | UPG-*、SW-*、SEC-*、FRIEND-*、CURFEW-*、IPRULE-* |
操作步骤
- 连接用户指定测试数据库
64.118.137.182:53306。 - 查询
information_schema.tables中hotgo库的本轮新增表。
实际结果
以下表均不存在:
im_security_policyim_message_curfew_rulesim_security_ip_rulesim_sensitive_word_groupsim_sensitive_wordsim_user_policy_groupsim_user_policy_group_members
预期结果
测试环境 Admin Server 所连接的数据库应包含全部新增表,并已执行初始化数据。
影响
若线上 Admin Server 确实连接此 hotgo 库,用户策略分组、敏感词、安全策略、宵禁和 IP 规则页面会查询失败或无法保存。如果 Admin Server 实际连接其他数据库,则说明当前提供的测试库地址与部署配置不一致,需要明确真实连接库后重新核验。
建议
核对 Admin Server 生产配置中的数据库 DSN;确认无误后执行已提交的 Admin 建表 SQL,并对表结构、索引和初始化数据做一次部署校验。
处理记录(2026-09-07)
已在 hotgo 执行 docs/admin-adfahi-research/sql/Admin-Server改造.sql。7 张表均创建成功,im_security_policy 已初始化 1 条全局默认已发布策略,其余新增业务表初始为空。页面复测中,安全策略正确展示该默认策略,敏感词和用户分组正确展示空列表;写操作尚未执行。
BUG-002 测试库缺少 8 个新增页面菜单记录
| 字段 | 内容 |
|---|---|
| 严重级别 | P0 |
| 类型 | 菜单/权限初始化 |
| 状态 | 已修复并完成超级管理员复测 |
| 关联用例 | COM-001、COM-002 |
实际结果
在 hotgo.hg_admin_menu 中未查询到以下菜单:
imDashboardIndeximPrivateMessageIndeximGroupMessageIndeximUserLoginHistoryIndeximLoginFailureLogIndeximUserPolicyGroupIndeximSensitiveWordIndeximSecurityPolicyIndex
部署前端包已经包含对应页面模块,后端接口也已注册,说明代码已部署但数据库菜单初始化可能未执行。
预期结果
超级管理员登录后可在 IM 管理下看到 8 个页面;功能权限记录完整,普通角色按授权显示按钮。
建议
确认部署库后执行:
server/storage/data/generate/im_adfahi_batch2_menu.sqlserver/storage/data/generate/im_adfahi_policy_menu.sql
执行后分别用超级管理员、只读管理员和租户管理员回归菜单及按钮权限。
处理记录(2026-09-07)
已执行 im_adfahi_policy_menu.sql 和 im_adfahi_batch2_menu.sql。8 个页面菜单均启用并挂载到 imManager(ID 2431)下;页面与按钮权限合计 43 条。用户需重新登录或刷新权限缓存后复测菜单显示。
页面复测(2026-09-07)
超级管理员展开“IM管理”后,数据概览、用户分组、单聊消息、群聊消息、用户登录历史、登录失败日志、敏感词库、安全策略 8 个页面菜单均可见并可打开。COM-001 的菜单可见性通过;只读管理员和租户管理员权限仍需使用对应账号复测。
BUG-003 Kafka Admin 命令存在长期 Pending 和 Dead 记录
| 字段 | 内容 |
|---|---|
| 严重级别 | P0 |
| 类型 | Kafka/异步命令链路 |
| 状态 | 待处理 |
| 关联用例 | PM-004 至 PM-008、GM-003 至 GM-006、NFT-005 |
实际结果
hotgo.im_admin_commands 共 13 条记录:
| 事件类型 | 状态 | 数量 |
|---|---|---|
user.password.reset |
pending |
12 |
user.password.reset |
dead |
1 |
最新死信记录时间为 2026-08-28,原因 RESOURCE_NOT_FOUND,消息 not found。其余 Pending 记录同样创建于 2026-08-28,长期未进入成功或失败终态。
预期结果
命令应在约定时间内进入 succeeded、failed 或 dead 终态;Pending 不应长期积压。死信应可查看、重放、忽略或解决。
影响
消息隐藏/删除、用户治理等 Kafka 命令可能出现后台提示已提交但 IM 不执行,属于治理能力失效风险。
建议
检查 Admin outbox worker、Kafka topic、consumer group、IM consumer 启动配置及结果回传 topic;处理历史积压后再执行消息隐藏/删除端到端测试。
BUG-004 IM Server 尚未执行安全策略、敏感词和用户策略分组
| 字段 | 内容 |
|---|---|
| 严重级别 | P0 |
| 类型 | 功能未完成 |
| 状态 | 待开发 |
| 关联用例 | SW-005、SW-007、FRIEND-*、CURFEW-*、IPRULE-* |
代码核查结果
Admin Server 已实现策略数据保存、发布和 security.policy.updated 等事件写出;当前 IM Server 仅发现 message.hide、message.delete 等 Admin 命令消费,未发现:
security.policy.updated事件消费与策略缓存刷新。- 全局禁止加好友在用户搜索、个人名片、群成员、二维码、邀请自动添加、推荐联系人六类入口的后端校验。
- 禁加好友时个人资料、个人名片的隐藏处理。
- 消息发送路径中的宵禁日期、时区、跨午夜、范围和白名单判定。
- 敏感词及用户策略分组在 IM 运行时的加载与执行。
预期结果
后台发布后,IM Server 接收事件、加载对应版本,并在实际移动端请求链路强制执行;直接调用接口也不能绕过。
影响
后台可以显示“发布成功”,但移动端行为不会变化。全局禁止加好友和宵禁属于明确要求,未完成时禁止上线。
DATA-001 IM 测试数据不足,无法覆盖失败日志和消息处置
| 字段 | 内容 |
|---|---|
| 严重级别 | P1 |
| 类型 | 测试数据 |
| 状态 | 待准备 |
| 关联用例 | PM-*、GM-*、LFAIL-* |
实际结果
tinode.im_user_login_logs:43 条。tinode.im_login_failure_logs:0 条。tinode.im_message_admin_actions:0 条。
登录日志分布以 password/login 和 token_refresh/login 为主,尚不足以覆盖主动退出、被踢、会话过期等事件。账号掩码和 metadata 的只读抽查未发现手机号全明文或密码、验证码、Token 键值。
建议
准备专用测试账号,分别触发密码错误、验证码错误、账号不存在、账号禁用、限频和风控拦截;准备单聊和群聊消息后执行隐藏、删除及幂等重放。
BUG-005 IM Internal 查询接口返回 resource not found
| 字段 | 内容 |
|---|---|
| 严重级别 | P0 |
| 类型 | 服务部署/路由联调 |
| 状态 | 已修复,接口复测通过 |
| 关联用例 | DASH-001、DASH-002、PM-001、GM-001、ULOGIN-001、ULOGIN-004、LFAIL-001 |
操作步骤
- 使用超级管理员进入“IM管理”。
- 打开数据概览并点击“刷新”。
- 分别进入单聊消息、群聊消息、用户登录历史、登录失败日志并点击“查询”。
实际结果
- 数据概览六项指标全部显示 0,趋势表显示“无数据”,页面提示
resource not found。 - 单聊消息、群聊消息、用户登录历史、登录失败日志均显示 0 条,查询后提示
resource not found。 - 浏览器控制台在每次查询后记录同名接口错误。
- 数据库已有
tinode.im_user_login_logs43 条,因此用户登录历史页面的 0 条不是正常空数据。
预期结果
Admin Server 应能调用 IM Server Internal API,概览、消息及登录日志返回真实数据;确实无数据的接口应返回成功的空列表,不能返回资源不存在。
根因定位(2026-09-07)
- 当前 IM Server 源码已注册
/internal/admin-query/,并已实现 dashboard overview/trends、private-messages、group-messages、user-login-logs、login-failure-logs 路由,不是五个查询分别缺少实现。 authorizeInternalAPI在internal_api.enabled=false时固定返回 HTTP 404、业务码30004、消息resource not found;该响应与页面错误完全一致。- 对测试环境
https://api.118im.com/internal/admin-query/tenants/probe/dashboard/overview进行未签名只读探测,实际返回 HTTP 404、业务码30004、消息resource not found。若 Internal API 已启用,同一未签名请求应返回 HTTP 401、消息internal signature required。 - Gitea Actions 第 66 次部署(run 99,提交
b92154b)日志显示工作流调用deploy.sh时已经设置INTERNAL_API_ENABLED=true,且部署成功切换到 green 实例;但部署后的公开实例仍表现为 disabled。
由此确认:提交 c68c5ac 将 Docker 配置模板中原本固定启用的 Internal API 改成了额外环境开关,但现有蓝绿部署并不会把这些新增变量注入容器,导致容器继承镜像默认值 false。这是新增启动配置造成的部署回归,不应要求部署机再增加一组开关配置。
建议
已将 docker/tinode/config.template 恢复为改造前的启动方式:Internal API 固定开启、签名窗口固定 300 秒、调用方固定为 hotgo-admin,继续复用原有共享密钥配置;同时移除部署工作流中新增的开关、窗口和服务名变量。部署机无须增加 Compose 配置。
重新构建并部署 IM Server 后,先执行未签名探测:预期由当前的 HTTP 404 resource not found 变为 HTTP 401 internal signature required;再使用正确签名验证 overview、trends、private/group message、login history、login failure 六类接口,最后回归后台页面。
接口复测(2026-09-07,IM 35da302)
- Gitea Actions run 100 部署成功,线上未签名探测由 HTTP 404 变为预期的 HTTP 401
internal signature required。 - 正确签名请求全部返回 HTTP 200、业务码
0:概览返回总用户 211、活跃用户 12、群组 95、会话 197、消息 2182、今日消息 167;7 日趋势返回 7 行。 - 单聊列表返回 1528 条,群聊列表返回 654 条;分页、关键词筛选及首条消息详情均通过。
- 用户登录历史返回 77 条;登录方式、事件、脱敏账号及组合筛选均通过。
- 登录失败日志返回 HTTP 200 的空列表,总数 0,属于当前无测试数据,不再是接口错误。
- 不存在租户正确返回 HTTP 404、业务码
30010、tenant unavailable。 - Admin Server 的 IM 签名客户端和字段转换相关 Go 测试通过。
BUG-006 新页面调用的字典 Store API 与部署版本不兼容
| 字段 | 内容 |
|---|---|
| 严重级别 | P1 |
| 类型 | 前端兼容性 |
| 状态 | 已发布,静态包复测通过,待登录态页面点击确认 |
| 关联用例 | UPG-001、SW-002、SEC-001、COM-004 |
实际结果
- 用户分组页面加载及点击“查询”时抛出
TypeError: D.getOptions is not a function。 - 敏感词库页面抛出 3 次
c.getOptions is not a function。 - 安全策略页面抛出
q.getOptions is not a function。 - 安全策略表格仍能显示 1 条默认策略,敏感词和用户分组仍能显示空列表,但字典筛选项和后续编辑表单存在失效风险。
预期结果
页面应通过当前项目字典 Store 的公开方法加载选项,控制台无异常;状态、类型、动作、风险等级等枚举应正确展示和筛选。
建议
已对照当前 useDictStore 实际 API,将用户分组、敏感词、安全策略页面统一改为 dict.getOption();额外排查并修复 IM 文件策略同类调用,需过滤选项时使用 dict.getOptionUnRef()。源码扫描已无业务页面调用 dict.getOptions(),ESLint 和生产构建通过。重新发布 Admin 前端后回归筛选、编辑弹窗和字典标签。
发布复测(2026-09-07,Admin 7839dce)
- Gitea Actions run 103 发布成功,线上入口包已切换到
index-Ch8uxbvK.js。 - 用户分组、敏感词、安全策略、文件策略四个线上动态页面包均可下载,且均不再包含
getOptions调用,确认不是旧分包或 CDN 缓存。 - 十条相关 Admin 路由的未登录请求均返回业务码
61,鉴权边界正常。 - 本轮无法取得内置浏览器已登录标签页的会话控制,筛选下拉、编辑弹窗和写操作仍需登录态页面点击确认,不能仅凭静态包核对标记为完整通过。
BLOCK-001 浏览器安全检查阻塞自动化页面测试
| 字段 | 内容 |
|---|---|
| 严重级别 | 环境阻塞,非产品缺陷 |
| 状态 | 已解除 |
| 关联用例 | 所有需要登录态和页面点击的用例 |
已识别到 Codex 内置浏览器中的测试环境标签页,页面标题为“主控台”,URL 和登录状态由用户确认。但自动化接管域名时,Codex 浏览器安全检查返回“permission request could not complete”,因此未读取或复用登录 Token,也未绕过安全控制。
恢复浏览器授权后,应从 COM-001 开始继续,并优先执行只读查询。涉及删除消息、删除规则等操作时仅使用专用测试数据。
复测记录(2026-09-07,建表后)
再次读取内置浏览器状态,测试标签页仍为“主控台”且 URL 正确;调用浏览器接管接口时仍返回 Auto-review could not complete for https://admin.118im.com。本次复测未绕过安全控制,页面用例继续标记为阻塞。
解除记录(2026-09-07)
再次连接后浏览器授权恢复,已成功接管同一登录标签页并完成菜单展开、页面切换、查询/刷新和表格读取。该项不再阻塞后续自动化测试。
3. 已执行用例
| 执行 ID | 对应测试 | 结果 | 实际结果 |
|---|---|---|---|
| RUN-001 | 站点可达性 | 通过 | /admin/ HTTP 200,HTML 和静态资源可加载 |
| RUN-002 | 前端部署完整性 | 通过 | 8 个新增页面模块均存在于部署 JS 包 |
| RUN-003 | 未登录接口鉴权 | 通过 | 8 条接口统一返回业务码 61,未泄露业务数据 |
| RUN-004 | COM-001 菜单检查 | 通过 | 超级管理员可见并可打开 8 个新增页面;其他角色权限待测 |
| RUN-005 | Admin 新表检查 | 失败 | 7 张策略相关表缺失 |
| RUN-006 | IM 新表检查 | 通过 | 3 张表均存在 |
| RUN-007 | ULOGIN-001 数据检查 | 失败 | 数据库有 43 条登录记录,后台查询为 0 条并提示 resource not found |
| RUN-008 | ULOGIN-005 敏感字段抽查 | 通过 | 当前 SQL 规则未发现可疑明文记录 |
| RUN-009 | LFAIL-001 至 LFAIL-007 | 部分阻塞 | 页面可打开和查询,但接口返回 resource not found;失败日志表为 0 条,缺少动作数据 |
| RUN-010 | PM/GM 消息处置 | 阻塞 | 动作表为 0 条,Kafka 另有长期积压风险 |
| RUN-011 | FRIEND/CURFEW | 失败(实现核查) | IM 运行时执行代码未完成 |
| RUN-012 | BUG-001 建表复测 | 通过 | 7 张 Admin 策略表均存在,默认安全策略 1 条 |
| RUN-013 | BUG-002 菜单复测 | 通过 | 8 个页面菜单、43 条页面/按钮权限存在且状态启用 |
| RUN-014 | BLOCK-001 浏览器接管复测 | 阻塞 | 建表后重试仍被 Codex 域名安全检查拒绝,未执行页面点击 |
| RUN-015 | BLOCK-001 浏览器接管再次复测 | 通过 | 授权恢复,已完成登录态页面操作 |
| RUN-016 | DASH-001、DASH-002 | 失败 | 刷新后六项指标均为 0,趋势无数据,接口返回 resource not found |
| RUN-017 | UPG-001 | 失败 | 表格正确显示 0 条,但查询触发 getOptions is not a function |
| RUN-018 | PM-001 | 失败 | 单聊消息显示 0 条,查询接口返回 resource not found |
| RUN-019 | GM-001 | 失败 | 群聊消息显示 0 条,查询接口返回 resource not found |
| RUN-020 | ULOGIN-001、ULOGIN-004 | 失败 | 数据库 43 条,页面为 0 条,查询接口返回 resource not found |
| RUN-021 | LFAIL-001 页面查询 | 失败 | 页面可操作,但查询接口返回 resource not found;暂无失败登录测试数据 |
| RUN-022 | SW 页面只读查询 | 部分通过 | 正确返回 0 条;控制台存在 3 个字典 getOptions 异常 |
| RUN-023 | SEC 页面只读查询 | 部分通过 | 正确展示默认已发布策略 1 条;控制台存在字典 getOptions 异常 |
| RUN-024 | BUG-005 Internal API 启用复测 | 通过 | 未签名请求返回预期的 HTTP 401,不再返回 resource not found |
| RUN-025 | DASH-001、DASH-002 接口复测 | 通过 | 概览返回 211 用户、95 群组、2182 消息;7 日趋势返回 7 行 |
| RUN-026 | PM-001、GM-001 接口复测 | 通过 | 单聊 1528 条、群聊 654 条;分页、关键词和详情查询通过 |
| RUN-027 | ULOGIN 接口复测 | 通过 | 登录历史 77 条;登录方式、事件、脱敏账号及组合筛选通过 |
| RUN-028 | LFAIL-001 接口复测 | 部分通过 | 接口成功返回空列表;仍需准备失败登录数据验证详情及处置按钮 |
| RUN-029 | BUG-006 代码复测 | 通过 | 4 个页面同类字典调用已修复,ESLint 和生产构建通过;待发布后页面复测 |
| RUN-030 | BUG-006 发布包复测 | 部分通过 | run 103 发布成功,4 个线上动态页面包无 getOptions;待登录态页面点击确认 |
4. 后续复测顺序
- 回归 BUG-005 对应后台页面,确认概览卡片和四个列表正确显示接口数据。
- 发布 BUG-006 前端修复并回归筛选、编辑弹窗和字典标签。
- 修复 Kafka Pending/Dead 链路,验证命令可进入终态。
- 补齐 IM Server 安全策略、好友入口、宵禁和敏感词运行时实现。
- 使用对应角色账号回归租户隔离、按钮权限、筛选、详情、分页和导出。
- 使用专用数据执行新增、编辑、发布、隐藏、删除、IP 黑名单和封禁用户。
- 使用移动端完成好友六入口、直接接口绕过、宵禁边界及白名单验收。
5. 复测记录
| 日期 | 版本 | 问题编号 | 复测结果 | 证据/备注 | 测试人 |
|---|---|---|---|---|---|
| 2026-09-07 | Admin 16cc456 |
BUG-001 | 通过 | 7 张表存在,默认策略 1 条 | Codex |
| 2026-09-07 | Admin 16cc456 |
BUG-002 | 通过 | 8 个菜单、43 条权限启用 | Codex |
| 2026-09-07 | Admin 16cc456 |
BLOCK-001 | 阻塞 | 浏览器域名安全检查仍不可用 | Codex |
| 2026-09-07 | 测试环境部署版本 | BLOCK-001 | 通过 | 浏览器授权恢复并完成页面点击 | Codex |
| 2026-09-07 | 测试环境部署版本 | BUG-005 | 失败 | 5 类 IM 数据页面和概览统一返回 resource not found |
Codex |
| 2026-09-07 | 测试环境部署版本 | BUG-006 | 失败 | 用户分组、敏感词、安全策略存在字典 Store API 异常 | Codex |
| 2026-09-07 | IM 35da302 / run 100 |
BUG-005 | 通过 | 六类签名查询均为 HTTP 200;分页、筛选和消息详情通过 | Codex |
| 2026-09-07 | Admin 待发布版本 | BUG-006 | 代码通过 | 修复 4 个页面的字典 Store API 调用,生产构建通过 | Codex |
| 2026-09-07 | Admin 7839dce / run 103 |
BUG-006 | 部分通过 | 线上入口及 4 个动态页面包已更新,无错误方法调用;待登录态页面确认 | Codex |