Files
im_manager/docs/admin-adfahi-research/测试问题记录-2026-09-07.md
T

19 KiB
Raw Blame History

鸽达达管理后台测试问题记录

测试环境: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 修正上述三个页面的 model.ts,统一使用项目现有字典加载和取值方式,重新构建部署后回归筛选、编辑和字典标签。

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 接口复测 部分通过 接口成功返回空列表;仍需准备失败登录数据验证详情及处置按钮

4. 后续复测顺序

  1. 回归 BUG-005 对应后台页面,确认概览卡片和四个列表正确显示接口数据。
  2. 修复 BUG-006:统一新页面与当前字典 Store API。
  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