_test_closure_report_2026-11-05_0344.md 14 KB

浠艾福 XAF · 测试闭环报告

  • 执行时间:2026-11-05 03:44 触发(闭环产出 04:30 GMT+8)
  • 执行档:review 档(已授权内网 cfc.iwintrue.com;不联网;仅测试目录内零改动、不提交不推送)
  • 主理人:陆谨(软件测试专家团)
  • 基线锚定:c83c4eb25(上一轮 01:40)→ 本轮 HEAD 65af4ec7e
  • 结论:⛔ 不通过(有条件) —— 见文末门禁结论;相较 01:40 有重大进展(B-10 编译阻断已解除,后端质量首次可度量)

0. 历史审查记录(对照,非本次结论依据)

  • 上一轮(2026-11-05 01:40,报告 _test_closure_report_2026-11-05_0140.md):⛔ 不通过(有条件)。核心阻塞为 B-10 后端测试套件 testCompile 失败(CfBalanceControllerTest.java 7 处签名漂移),整套后端测试 0 执行,历史"86.7%/1512 例"基线被判定失效。E2E 因无凭据降级。
  • 本轮改善(已独立复验确认):研发于 37h29a5df 修复 B-10,提交 65af4ec7e 标注"testCompile 205 源 0 错 / 16 契约 16/16 全绿"。本轮独立复验:mvn -o test -DskipTests=false 编译通过、套件可执行,原"0 执行"状态解除。

1. 执行范围

模块 技术栈 实测动作 结果
cfc-backend Spring Boot 2.7.18 + MyBatis-Plus + Java 8 mvn -o test -DskipTests=false(离线,-DskipTests=false 覆盖 pom 默认 skipTests=true) ❌ BUILD FAILURE(testCompile 通过,套件已可执行);120 用例失败
cfc-web Vue2 + Element UI 管理端(Jest) jest --ci(axios-mock-adapter mock API) ✅ 12 套件 / 90 用例全绿
cfc-frontend uni-app 小程序 不在本任务范围(仅说明) —
tests/e2e Playwright 1.63.0(chromium 就绪) 内网 /admin、/frontend ⚠️ 降级(探活可达 HTTP 302,无凭据,待核实登录态)

内网可达性:本环境 cfc.iwintrue.com 解析至内网 192.168.16.251(/admin、/frontend 探活返回 302 跳转登录,需身份认证)。未擅自重启远端、未落明文凭据。


2. 用例总数 · 通过 · 失败(实测)

维度 总数 通过 失败 错误 跳过 备注
cfc-backend 单元/集成测试 1528 1408 71 49 4 MVN_REAL_EXIT=1;38 个测试类含失败/错误;全程离线、未联网
cfc-web Jest(单元/组件) 90 90 0 0 0 12 套件,JEST_EXIT=0,mock API,不断言真实服务端行为
E2E Playwright(/admin、/frontend) — — — — — 未执行,降级为测试设计(见第 8 节)

后端 1528/71/49/4 与"编译阻断前"的陈旧基线完全一致 → 证实这 120 个失败是长期存在、非 B-10 引入;编译阻断只是将其掩盖。后端套件长期处于 RED,作为回归门禁不可信。


3. 覆盖率

维度 覆盖率 数据来源 / 状态
cfc-backend 未实测 pom 未配置 JaCoCo;按约束不擅自修改构建配置(属源码/构建改动),故不采集。标注「未实测」。
cfc-web 未采集 本次未带 --coverage;mock API 测试覆盖率参考意义有限。
历史基线 86.7% / 1512 例 已失效 见 01:40 报告;本轮实测真实值为 1528 可执行 / 120 失败。

4. 新增风险

  1. 【重大进展】B-10 编译阻断已修复 —— 后端 testCompile 通过(205 源 0 错),套件从"0 可执行"恢复为"1528 可执行",质量状态首次可度量。
  2. 【核心新发现 · 真实】后端套件存在 120 个失败用例(71 失败 + 49 错误)跨 38 个测试类,且长期被编译阻断掩盖。基于 surefire 首异常分类(抽样 37 个失败类):
    • 测试源码/契约漂移为主(绝大多数是断言与当前生产行为不一致,疑似过期期望,需 R&D 二分确认):
      • 状态码漂移:AuthControllerTest expected 500 was 410;HealthDimensionControllerTest expected 500 was 200;MindFortuneControllerTest expected 401 was 400;StatsControllerTest expected 500 was 5001;EnergySystemFlowTest expected 200 was 500;GuideRolePermissionTest/PlannerBindInviteFlowTest expected 200 was 403(权限契约漂移)。
      • 术语漂移(对应 children→family_members 迁移):WishControllerTest 期望文案含 childId 实为 memberId。
      • 提示文案漂移:ArticleWorkflowTest 期望"仅已驳回的文章可重新编辑"实为"仅已驳回或已撤回的文章可重新编辑"。
      • Mockito 误用(测试自身缺陷):ProductControllerTest InvalidUseOfMatchersException;CfCommissionServiceSettleTest WantedButNotInvoked。
    • 少数疑为代码/环境缺陷(待核实):ArticleControllerTest/ProductOrderControllerTest/GrowthRecordSyncFlowTest NPE;AdminFamilyOverviewControllerTest Failed to load ApplicationContext;GuideModuleIntegrationTest DataIntegrityViolationException(疑似 DB 数据态)。
  3. 【口径待核 · 承袭 P2】cfc-web Jest 12 套件 / 90 用例 与历史引用"14 套件 / 296 用例"持续不一致,需核对范围。

5. 测试用例编写产出

  • 闸门判定:自上次运行基线 c83c4eb25 至本轮 HEAD 65af4ec7e,docs/tdd/SRS.md、docs/需求分析/、docs/superpowers/specs/、docs/superpowers/api/API_REFERENCE.md 零提交(git diff --name-only c83c4eb25..65af4ec7e -- <上述目录> 为空)。
  • 结论:依据任务规则「仅当 SRS/需求文档自上次运行有新增或修改时才编写/更新测试用例」「需求无变更则跳过编写」,本次不编写、不修订任何测试用例,避免仓库抖动。
  • 基线更新:需求文档基线锚定更新为 commit 65af4ec7e,后续轮次将基于此检测增量并编写。
  • 注:T40 强制更新、天盘 emoji 替换、46003 AI 教练会员门禁等需求文档均早于本次基线,不触发本轮编写;其中 46003 会员门禁与历史 E2E 红用例直接相关,建议下一轮基线增量判定时优先补测。

6. 五要素问题清单

🟢 P1 · B-10 后端测试套件编译失败(承袭 · 本轮已闭环)

要素 内容
① 问题描述 上一轮阻断项:CfBalanceControllerTest.java 7 处签名漂移致 testCompile 失败、套件 0 执行。
② 测试 bug 点 cfc-backend/src/test/java/com/etotem/cfc/unit/CfBalanceControllerTest.java(旧行 95/113/121/140/169/189/202)。
③ 最优修改方案 研发已于 37h29a5df 将测试调用同步至精简后的 CfBalanceController 签名(balance(Long userId) / logs(Long userId, @RequestParam page, @RequestParam size))。
④ 修改目的 恢复后端套件可编译、可运行,使覆盖率与通过率可度量。
⑤ 问题闭环 本轮独立复验达成:mvn -o test -DskipTests=false testCompile 205 源 0 错、套件可执行(16 契约测试随套件一并运行)。通过标准已满足,P1 标记闭环。

🔴 P2 · 后端套件 120 失败用例(测试源码/契约漂移为主 · 本轮新发现)

要素 内容
① 问题描述 后端 1528 用例中 120 失败(71 失败 + 49 错误)跨 38 个测试类;以"测试期望滞后于当前生产行为"为主,套件长期 RED,作为回归门禁不可信;且该状态长期被编译阻断掩盖。
② 测试 bug 点 38 个测试类,代表:WishControllerTest(childId→memberId 文案)、ArticleWorkflowTest("仅已驳回"→"仅已驳回或已撤回")、AuthControllerTest(expected 500 was 410)、HealthDimensionControllerTest(expected 500 was 200)、GuideRolePermissionTest/PlannerBindInviteFlowTest(expected 200 was 403)、StatsControllerTest(expected 500 was 5001)、ProductControllerTest(InvalidUseOfMatchersException)、CfCommissionServiceSettleTest(WantedButNotInvoked)、AdminFamilyOverviewControllerTest(Failed to load ApplicationContext)。
③ 最优修改方案 二分处理:(a) 经 R&D 确认属"产品意图/术语/文案演进导致测试期望过期"的,由 QA 同步更新断言并评审;(b) 属真实生产回归的(如 200→500 异常、NPE、上下文加载失败、DB 约束),升级研发修复。判据:以"该行为是否为当前产品预期"区分 test-drift 与 prod-bug。
④ 修改目的 收敛后端套件为可信回归门禁,暴露并消除真实缺陷或过期断言,恢复质量信号有效性。
⑤ 问题闭环 修复后 mvn -o test -DskipTests=false 达 BUILD SUCCESS 且失败数归零,或仅余经 R&D/QA 双方确认的豁免清单;通过标准:全绿或出具双方签字的豁免项。

🟡 P3 · E2E 三个常红用例 + 无凭据未实测(承袭 · 本轮未重验)

要素 内容
① 问题描述 历史 E2E 长期 3 红:nonfunc-perf-compat.spec.js 46003 会员门禁、nonfunc-security.spec.js:75/77 后台未授权返 code=500(应 401/403)、:121/131 上传非 PDF 未拒。本轮因无凭据未重验,列为待核实。
② 测试 bug 点 tests/e2e/nonfunc-perf-compat.spec.js:99、tests/e2e/nonfunc-security.spec.js:75/77、:121/131。
③ 最优修改方案 46003:测试环境置 ai.coach.member_gate_enabled=false 或改用 FAMILY/PREMIUM 账号;未授权返 500:后端鉴权异常统一为 401/403;上传校验:增加非 PDF/恶意内容 4xx 拒绝。
④ 修改目的 收敛安全契约缺口与产品意图漂移导致的测试期望滞后。
⑤ 问题闭环 提供 E2E 凭据注入机制后实跑,3 红转绿或给出产品侧合理解释。

🟠 P4 · cfc-web Jest 套件范围口径不一致(承袭 · 待核实)

要素 内容
① 问题描述 本次实测 cfc-web 仅 12 套件 / 90 用例全绿,与历史引用"14 套件 / 296 用例"不符,存在范围/口径缺口疑点。
② 测试 bug 点 cfc-web/package.json test 脚本(jest);cfc-web/src/**/__tests__/*.test.js\|*.spec.js 共 12 文件。
③ 最优修改方案 核对 jest config 的 roots/testMatch 与历史 296 用例出处(是否曾含 cfc-frontend 或已删除套件),确认当前 12/90 是否为应覆盖全集。
④ 修改目的 确保前端测试资产完整、口径一致,避免"假性全绿"掩盖漏测。
⑤ 问题闭环 出具套件清单对账表,确认无遗漏套件后闭环;若确为历史口径错误则在台账更正。

7. 待核实项

  1. 后端 120 失败用例根因二分(test-drift vs prod-bug) —— 需 R&D/QA 协同确认;本环境仅能凭 surefire 首异常初判,已给出分类建议。
  2. 后端覆盖率 —— pom 未配置 JaCoCo,未实测。
  3. E2E 实际结果 —— 需可用凭据注入机制后实跑 /admin、/frontend。
  4. cfc-web Jest 历史 296 口径 —— 见 P4。
  5. 历史 E2E 3 红未重验 —— 见 P3。

8. 需用户单独授权才能继续的项(未授权未执行 · 已给测试设计)

8.1 内网 E2E 实际执行(/admin、/frontend)

  • 状态:⚠️ 未授权未执行 / 待核实登录态(本环境无凭据,按任务约定降级)。
  • 测试设计(待凭据就绪后落地):
    • /admin(管理端 SPA):登录态注入(环境变量/本地配置,禁止明文)→ 登录后校验左侧菜单/路由守卫 → 关键业务页(用户、订单、文章、维度配置)CRUD 冒烟 → 未授权访问应 401/403(对应 P3 红用例)。
    • /frontend(C 端):登录态注入 → 首页/健康/商城/家庭核心流冒烟 → 上传报告 PDF 校验(非 PDF 应 4xx,对应 P3 红用例)→ AI 教练会员门禁(会员账号或关开关,对应 46003)。
    • 断言原则:仅断言 DOM/状态码/契约字段;不写明文凭据;不重启远端。

8.2 需联网的命令(一律未执行,降级为测试设计)

  • 依赖漏洞扫描(OWASP Dependency-Check / npm audit 联网)、性能压测(打到远端)、Playwright 从公网安装浏览器 → 均未执行。
  • 测试设计:漏洞扫描建议在内网 CI 节点离线跑 dependency-check;压测建议对本地回环 9082 起服务后限流自测,避免打生产内网。

9. 门禁结论

⛔ 不通过(有条件)

  • 判据:① 后端测试套件 BUILD FAILURE(120 失败用例),核心服务测试门禁未达成(P2);② E2E 因无凭据未实测(待核实登录态,P3);③ 仅 cfc-web Jest 全绿,套件范围口径需复核(P4);④ 历史 E2E 3 红未重验。
  • 重大进展(相对 01:40):B-10 编译阻断已闭环(P1),后端质量从"0 可执行"恢复为"1528 可执行 / 120 失败",真实状态首次可度量。
  • 复评条件(全部满足方转为通过/有条件通过):
    1. 后端 120 失败用例经 R&D/QA 二分处理(test-drift 更新断言 / prod-bug 修复),mvn -o test -DskipTests=false 达 BUILD SUCCESS 且失败归零或出具双方确认豁免清单;
    2. 提供 E2E 凭据注入机制后实跑 /admin、/frontend,3 红用例有明确结论(转绿或产品侧解释);
    3. 核对 cfc-web Jest 套件范围,消除 12/90 与历史 296 的口径不一致;
    4. 后续轮次基于基线 65af4ec7e 检测到 SRS/需求增量时,按时编写/更新测试用例。

本闭环全程只读 + 本地测试(后端 mvn 离线、前端 jest mock)+ 测试目录内零改动(未修改生产源码、未提交、未推送;测试用例编写闸门因需求文档无变更而关闭)。凭据、密钥、令牌均未在报告/日志中落地。后端全量套件执行耗时约 40 分钟(205 测试类 / 1528 用例)。