# 鸽达达管理后台测试问题记录 > 测试环境:`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-*` | **操作步骤** 1. 连接用户指定测试数据库 `64.118.137.182:53306`。 2. 查询 `information_schema.tables` 中 `hotgo` 库的本轮新增表。 **实际结果** 以下表均不存在: - `im_security_policy` - `im_message_curfew_rules` - `im_security_ip_rules` - `im_sensitive_word_groups` - `im_sensitive_words` - `im_user_policy_groups` - `im_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` 中未查询到以下菜单: - `imDashboardIndex` - `imPrivateMessageIndex` - `imGroupMessageIndex` - `imUserLoginHistoryIndex` - `imLoginFailureLogIndex` - `imUserPolicyGroupIndex` - `imSensitiveWordIndex` - `imSecurityPolicyIndex` 部署前端包已经包含对应页面模块,后端接口也已注册,说明代码已部署但数据库菜单初始化可能未执行。 **预期结果** 超级管理员登录后可在 IM 管理下看到 8 个页面;功能权限记录完整,普通角色按授权显示按钮。 **建议** 确认部署库后执行: - `server/storage/data/generate/im_adfahi_batch2_menu.sql` - `server/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` | **操作步骤** 1. 使用超级管理员进入“IM管理”。 2. 打开数据概览并点击“刷新”。 3. 分别进入单聊消息、群聊消息、用户登录历史、登录失败日志并点击“查询”。 **实际结果** - 数据概览六项指标全部显示 0,趋势表显示“无数据”,页面提示 `resource not found`。 - 单聊消息、群聊消息、用户登录历史、登录失败日志均显示 0 条,查询后提示 `resource not found`。 - 浏览器控制台在每次查询后记录同名接口错误。 - 数据库已有 `tinode.im_user_login_logs` 43 条,因此用户登录历史页面的 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. 后续复测顺序 1. 回归 BUG-005 对应后台页面,确认概览卡片和四个列表正确显示接口数据。 2. 发布 BUG-006 前端修复并回归筛选、编辑弹窗和字典标签。 3. 修复 Kafka Pending/Dead 链路,验证命令可进入终态。 4. 补齐 IM Server 安全策略、好友入口、宵禁和敏感词运行时实现。 5. 使用对应角色账号回归租户隔离、按钮权限、筛选、详情、分页和导出。 6. 使用专用数据执行新增、编辑、发布、隐藏、删除、IP 黑名单和封禁用户。 7. 使用移动端完成好友六入口、直接接口绕过、宵禁边界及白名单验收。 ## 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 |