test_blockers.md 8.6 KB

CFC · 测试工作阻碍分析与分派

生成日期:2026-11-01 | 模式:discovery-only | 测试目标环境:http://cfc.iwintrue.com 用途:判断"下一步测试"能否推进;按阻碍归属分类——研发/需求/设计类提交研发,测试侧直接执行。

0. 结论:下一步测试能否推进?

部分可推进。 本 Agent 沙箱已具备 node v22.22.2 + @playwright/test 模块,测试目标环境 cfc.iwintrue.com 可达(0.08s 响应);但:

  • 纯测试基础设施(Playwright chromium 浏览器)缺失 → 测试侧可直接修复(见 T1,已执行安装)。
  • 实际 E2E 执行的硬阻碍曾是「测试环境管理员凭证缺失」(R3)——依赖登录的 admin E2E 在登录步即失败;已于 2026-11-01 解决(确认测试账号 13800138000,实跑 E2E 登录+鉴权+API 可达,见 §4–§5)。
  • Java 单测 / Python pytest 在本沙箱无执行器(mvn / pytest 均缺失),按用户说明在本机执行,不属阻碍测试工作的研发/设计问题,不计入本分派。
  • 研发侧存在结构性缺口(覆盖缺口 R1、契约不一致 R2、无 CI R4),需提交研发。

1. 测试侧阻碍(直接执行,不提交研发)

编号 阻碍 证据 / 现状 处理动作
T1 Playwright chromium 浏览器未安装 tests/node_modules/playwright-core/.local-browsers 缺失;全局无 chromium 已执行 npx playwright install chromium(本沙箱,后台进行)
T2 func/smoke 配置默认指向 localhost:9082 playwright.config.func.js / .smoke.js 默认 baseURL 为 127.0.0.1:9082 已用 PW_BASE_URL=http://cfc.iwintrue.com 覆盖,runbook §3.4 已记录命令
T3 测试目标环境未在文档写明 易误跑本地后端 / 生产 已在 .tdd/config.json(test_target_env) + runbook.md 顶部写明 cfc.iwintrue.com

T1 完成后,本沙箱具备对 cfc.iwintrue.com 跑无登录态 smoke 的能力;带登录态的 admin E2E 仍受 R3 阻塞。

2. 提交给研发的阻碍(研发 / 需求 / 设计相关)

编号 阻碍 证据 对测试工作的影响 建议研发动作
R1 后端 Controller 测试覆盖缺口巨大 357 个 Controller / 1933 个 handler 仅覆盖 199(10.3%);admin 模块 120 个中 103 个完全无测试(见 discovery.md) 核心管理接口无回归保护,测试覆盖目标无法达成 按 runbook.md §2 缺口 backlog 补 admin(P0)→guide/family(P1)→mind/assessment(P2) 的单测与接口测试
R2 API 契约疑似不一致 此前发现 /api/articles/report-reading-time 返回 biz=500 但 message="success"(字段语义矛盾);执行 E2E 进一步暴露:① butler 列表返回 data.list 而 activity 列表返回 data.records(F1);② POST /api/admin/commission/config 更新配置返回 400(F2,真实接口响应) 自动化断言无法稳定判定成功/失败,易误报;写操作 E2E 大面积受 envelope 不一致牵连 研发在 cfc.iwintrue.com 复测确认,明确 biz 与 message 语义并修复或文档化契约;统一列表 envelopes(F1);排查 commission update config 400(F2)
R3 测试环境无可用测试管理员账号 tests/e2e/admin-activity-review.spec.js 等依赖 /api/admin-auth/login-by-password 登录取 Bearer token;仓库内已硬编码测试账号 13800138000 E2E 在登录步即失败,无法推进带登录态的端到端测试 已解决(2026-11-01):已确认测试账号 13800138000,实跑 E2E 登录+鉴权+API 全部可达
R4 无 CI 流水线 / 无测试门禁 仓库无 .github/workflows 等 CI 配置;测试未纳入合并门禁 回归无自动拦截,已写测试随改动腐化 建 CI:mvn test + pytest + playwright(接 cfc.iwintrue.com)作为合并门禁

3. 新增测试侧阻碍(执行中暴露,直接处理)

编号 阻碍 证据 处理
T4 主配置 globalSetup(e2e/helpers/db.js)强制连内网 MySQL 192.168.16.251 做 DB 重置+灌种子,无跳过开关,失败即 process.exit(1) 远程只读 E2E 不需要重置内网库;本沙箱路由不到该内网地址 → Access denied 阻断一切 E2E 已用临时无重置配置(playwright.config.noreset.js,不提交)绕过;建议研发给 db.js 加 SKIP_DB_RESET 开关,使针对远程测试环境的只读 E2E 可跳过本地库重置

4. 已执行 E2E 结果(只读子集,2026-11-01)

  • 环境/凭证:针对 http://cfc.iwintrue.com,测试账号 13800138000,临时无重置配置,仅跑只读用例(登录 + 列表/查询)。
  • 结果:5 通过 / 2 失败(7 个只读用例,耗时 27.4s)。
用例 文件 结果
login and list draft admin-activity-review ✅ 通过(登录+活动列表正常)
service records exist admin-butler-review ✅ 通过
settlements endpoint reachable admin-butler-review ✅ 通过
get config admin-commission-config ✅ 通过
records admin-commission-config ✅ 通过
list pending admin-butler-review ❌ 失败
list approved for assignment admin-butler-review ❌ 失败

失败根因(F1,契约不一致的确切实例,归属 R2):两个管家列表用例断言 j.data.records,但接口实际返回 {"list":[],"page":1,"size":10,"total":0}——即 butler 列表返回 data.list,而 activity 列表返回 data.records,后端列表接口 envelopes 不统一。需研发确认 butler 列表应返回 records 还是测试应改为 list。

5. 写操作 E2E 执行结果(全量,2026-11-01 22:35)

  • 范围:对 cfc.iwintrue.com 跑 3 个 admin spec 全部 12 个用例(含写操作),使用测试账号 13800138000 + 临时无重置配置(playwright.config.noreset.js)。
  • 结果:7 通过 / 5 失败(耗时 45.8s)。
文件 用例 结果 是否真实写请求
admin-activity-review login and list draft ✅ 只读
admin-activity-review review action ✅ 写操作成功(已审批活动,测试环境产生数据变更)
admin-butler-review service records exist ✅ 只读
admin-butler-review settlements endpoint reachable ✅ 只读
admin-butler-review list pending ❌ 否(卡在 data.records 断言)
admin-butler-review list approved for assignment ❌ 否
admin-butler-review review action (approve) ❌ 否(写请求未发出)
admin-butler-review assign member to approved butler ❌ 否(写请求未发出)
admin-commission-config get config ✅ 只读
admin-commission-config records ✅ 只读
admin-commission-config update config ❌ POST 已发出,服务端返回 400(真实接口响应,需研发确认是接口缺陷还是用例 payload 问题)
admin-commission-config settle and refund ✅ 写操作成功(已结算+退款,测试环境产生数据变更)

失败根因归类:

  • F1(envelope 不一致,归属 R2):butler 4 个失败(list pending / list approved / review action(approve) / assign member)全部因断言 data.records 但接口返回 data.list——写请求(approve/assign)在取数列表阶段即报错,未对测试环境产生副作用。
  • F2(commission 配置更新返回 400,归属 R2):POST /api/admin/commission/config 返回 400(非 200),是真实接口响应。需研发确认:接口缺陷(update 路径/参数校验)还是测试用例 payload 缺字段。

已对测试环境产生的真实数据变更(cfc.iwintrue.com,按用户授权执行):

  • activity review action:成功审批/驳回某活动记录。
  • commission settle and refund:成功对某佣金记录执行结算 + 退款。 > 如测试数据需回滚,请在 cfc.iwintrue.com 测试库处理。

6. 下一步

  • 测试侧:R3 已解决,T1/T2/T3 已执行,T4 已临时绕过(建议研发加 SKIP_DB_RESET 开关);写操作 E2E 已按授权跑完(见 §5)。可继续扩大 E2E 覆盖(其余 64 个 e2e/*.spec.js)或转向 Java 单测 / Python pytest(本机执行)。
  • 研发侧:请认领 R1、R2(含 F1 butler envelope 不一致、F2 commission update config 400)、R4,并确认 F1/F2 的正确形态。
  • 本机执行项(Java 单测 / Python pytest):按 runbook.md §3.1–§3.3 在开发机执行,结果回填 .tdd/test-progress.json 后刷新共享台账。