_test_closure_report_2026-11-05_1514.md 12 KB

浠艾福 XAF · 测试闭环报告

  • 执行时间:2026-11-05 15:14 (GMT+8)
  • 执行档:review 档(已授权内网 cfc.iwintrue.com → 192.168.16.251;不访问外部公网)
  • 角色:软件测试专家团主理人 陆谨(测试负责人)
  • 职责边界:仅只读审查 + 依据 SRS/需求变更编写测试用例(本次 SRS 无变更,跳过编写);不修改、不提交、不推送生产源码
  • HEAD:8b75d5eb25(需求闸门基线 c83c4eb25)

1. 执行范围

模块 命令 状态
cfc-backend mvn -o -DskipTests=false test(本地 Maven 3.9.9,离线) ✅ 已实跑(全量)
cfc-web npm test(Jest,axios-mock-adapter mock API) ✅ 已实跑
内部 E2E Playwright 1.63.0 → cfc.iwintrue.com/admin、/frontend ⚠️ 部分实跑(/frontend 通过;/admin 脚本缺口降级)
覆盖率 JaCoCo ⛔ 未实测(pom 无覆盖率插件)
依赖漏洞/压测/langgraph 解析 需联网 ⛔ 未授权未执行

注:本环境 Maven 在 08:21 曾缺失、10:50 恢复;本轮确认 /d/tools/apache-maven-3.9.9/bin/mvn 可用,后端全量实跑成功。


2. 实测结果总览

维度 用例总数 通过 失败 错误 跳过 说明
cfc-backend(单测/集成/契约) 1649 1525 71 49 4 37 个红类;BUILD FAILURE 仅因测试失败(非构建中断),结果有效
cfc-web(Jest 单测/组件) 90 90 0 0 0 12 套件全绿,mock API,不断言真实服务端
E2E /frontend 1 探测 1 0 0 0 HTTP 200,标题「首页」,SPA 正常渲染
E2E /admin — — — — — 登录脚本缺口,未实测(降级为测试设计,见 §8)

后端红类分类(37 类)

  • 环境红(B-13):3 类 / 8 错误 — AdminFamilyOverviewControllerTest、FamilyAdminOverviewServiceTest、UserServiceFamilyNameLinkTest:Failed to load ApplicationContext,根因硬编码 127.0.0.1:3306 连不上本地无 DB 的 CI 环境。
  • 契约漂移:34 类 / 71F + 41E = 112 例 — 状态码漂移(如 AuthControllerTest 期望 500 实得 410、StatsControllerTest 期望 500 实得 5001)、术语漂移(WishControllerTest childId→memberId)、文案漂移(ArticleWorkflowTest 仅已驳回/已撤回)、Mockito 误用(ProductControllerTest 参数匹配器非法、DailyCheckinStreakFlowTest doNothing() 用于非 void、ProductOrderServiceUpdateExpressFieldTest 参数不符)、NPE/上下文加载等。

3. 回归比对(vs 上次全量基线 2026-11-05 10:50)

指标 10:50 基线 本轮(15:14) 变化
用例总数 1634 1649 +15(新增绿测)
通过 1510 1525 +15
失败 71 71 0
错误 49 49 0
跳过 4 4 0
红类 37 37 0

结论:自 10:50 基线以来无新增回归。 期间仅一处后端变更 a9f283d25(新增 MembershipControllerPlansLevelOrderTest + MembershipController 返回 levelOrder 修复),该新增测试本轮通过,未引入任何新失败。失败/错误/红类画像与历史完全一致,属长期存在的测试源码↔生产契约漂移,被本次全量实跑再次确认(此前 08:21 因 mvn 缺失导致该基线失效,本轮已修复)。


4. 覆盖率

未实测。 cfc-backend/pom.xml 未配置 JaCoCo(历史上亦无覆盖率插件,且本角色不擅改构建配置)。行/分支覆盖率无数据,不臆造。如需阈值门禁,须先引入 JaCoCo 并配置 CI 跑通(见 §8 复评条件)。


5. 新增风险

  • 无新增失败用例,无覆盖率下降项(覆盖率本身未测)。
  • Maven 可用性反复:08:21 缺失→10:50 恢复→本轮可用。建议将 Maven 路径固化进文档/CI 镜像,避免闭环因工具缺失而降级。
  • E2E 浏览器二进制不匹配:@playwright/test 1.63.0 期望 chromium_headless_shell-1243,本机仅 chromium-1228/1234。本轮用 chromium-1234 全量 chrome 兜底,/frontend 实跑成功;但该方式属临时绕过,非可持续方案(详见 §8)。

6. 测试用例编写产出

本次无需求变更 → 跳过编写(仓库零抖动)。

  • 闸门依据:docs/tdd/SRS.md(mtime 2026-11-01)、docs/需求分析/、docs/superpowers/specs/、docs/superpowers/api/API_REFERENCE.md 自基线 c83c4eb25 起 git 零提交。
  • 历史待办中「46003 会员门禁 / T40 / 天盘 emoji / T38 / 家庭券」等需求变更均早于基线,不触发本轮编写。
  • 唯一后端代码变更 a9f283d25 已由研发侧自带测试 MembershipControllerPlansLevelOrderTest(本轮通过),非 SRS 触发,不在本角色编写范围。
  • 工作树存在未提交 cfc-frontend/__tests__/*、docs/tdd/test/blockers.md 等,非 SRS 触发,标注待核实,未触碰。

7. 五要素问题清单

P1 · B-13 环境红:测试硬编码 127.0.0.1:3306

① 问题描述:3 个测试类在 CI/无本地 DB 环境下 Failed to load ApplicationContext,导致 8 例 Error,长期拖累后端套件通过率。 ② 测试 bug 点:AdminFamilyOverviewControllerTest / FamilyAdminOverviewServiceTest / UserServiceFamilyNameLinkTest(均 @SpringBootTest,数据源写死 127.0.0.1:3306)。 ③ 最优修改方案:将 DB 地址改为可配置(@Value("${test.db.host:127.0.0.1}") 或 test profile + application-test.yml),CI 注入内网只读库或 H2 内存库。 ④ 修改目的:消除环境耦合,使后端套件在 CI 可跑通(对应质量目标:可重复执行的全量回归)。 ⑤ 问题闭环:修改后 CI 重跑该 3 类应 0 Error;通过标准 = 后端全量 BUILD SUCCESS 且 Error=0。

P2 · 契约漂移:状态码/术语/文案 vs 生产不一致

① 问题描述:34 类共 112 例失败/错误,断言约定停留在旧版(状态码 500↔410/403/5001、术语 childId→memberId、文案「仅已驳回」→「仅已驳回或已撤回」)。 ② 测试 bug 点:如 AuthControllerTest(期望 500 实得 410)、WishControllerTest(childId→memberId)、StatsControllerTest(500 vs 5001)、ArticleWorkflowTest(文案漂移)。 ③ 最优修改方案:以 API_REFERENCE.md 现行约定为准,二分修订断言;对「废弃状态码 5001」等需先与研发确认是改生产还是改测试。 ④ 修改目的:测试资产真实反映生产契约,恢复信号可信度(对应质量目标:测试即文档)。 ⑤ 问题闭环:逐类修订后对应用例转绿;通过标准 = 该 34 类 failures+errors 归零或仅剩 B-13 环境红。

P3 · Mockito 误用导致 3 类 Error

① 问题描述:参数匹配器使用不当使测试直接抛异常,掩盖真实逻辑。 ② 测试 bug 点:ProductControllerTest(Invalid use of argument matchers,3 期望 1 记录)、DailyCheckinStreakFlowTest(Only void methods can doNothing())、ProductOrderServiceUpdateExpressFieldTest(Wanted/Actual 参数不符)。 ③ 最优修改方案:doNothing() 仅用于 void 方法;混用 any() 与具体实参须统一为匹配器;verify 参数须与调用一致。 ④ 修改目的:消除测试自身缺陷,避免误报。 ⑤ 问题闭环:修复后该类 Error→0;通过标准 = 该类全绿。

P4 · E2E /admin 登录脚本缺口(测试设计缺口,非服务端缺陷)

① 问题描述:自动化登录 /admin 时提交按钮(「登 录」,含空格)保持 disabled,因 el-select.identity-select 身份项(「超级管理员」)需显式点选后才解锁按钮;现有 auth.js/探测脚本未处理该下拉,致登录无 token。 ② 测试 bug 点:tests/e2e/helpers/auth.js loginAs('admin')(约 L127–205);探测脚本 _e2e_admin_login2.cjs 已确认身份 el-select 出现但未被点选。 ③ 最优修改方案:在 loginAs 的 admin 分支中,填手机号后显式 page.locator('.identity-select').click() 并选择角色项,再 button:has-text("登 录") 点击;必要时 waitForEnabled。 ④ 修改目的:打通 /admin 端到端真实登录,使内部 E2E 管控台可被自动化覆盖。 ⑤ 问题闭环:修复后重跑探针应取得 token 且 /admin 仪表盘可渲染;通过标准 = /admin E2E 探测 tokenLen>0 且 hasSidebar>0。

P5 · 覆盖率工具缺失(门禁不可量化)

① 问题描述:pom 无 JaCoCo,行/分支覆盖率无法采集,闭环只能看用例红绿,无法设阈值。 ② 测试 bug 点:cfc-backend/pom.xml(无 jacoco-maven-plugin)。 ③ 最优修改方案:引入 jacoco-maven-plugin,mvn test 后生成 jacoco.exec/site,配置 CI 覆盖率阈值卡点(需研发/测试负责人确认阈值,不擅改构建)。 ④ 修改目的:使覆盖率成为可量化门禁,补齐非功能度量(对应质量目标:可度量质量)。 ⑤ 问题闭环:配置后采集首份覆盖率基线;通过标准 = 覆盖率数据产出且达约定阈值。


8. 待核实项

  • E2E /admin 真实登录态:本轮确认失败原因为脚本缺口(身份 el-select 未点选、按钮含空格「登 录」),非服务端凭据缺陷;修复 P4 后重验。
  • 历史 E2E 3 红未重验:nonfunc-security.spec.js(:75/77 后台未授权返 500 应 401/403;:121/131 上传非 PDF 未返 4xx)、nonfunc-perf-compat.spec.js(:99 46003 会员专享)仍待环境修复后重跑。
  • cfc-web Jest 口径差异(P2):本轮 12 套件/90 用例,历史记录曾现 296 用例,口径不一致,需核实是否为套件范围或历史记录偏差。
  • TDD 状态机 3 红键:health.report.createReport/dan.assessment.getActiveMaterial/guide.trainingPlan.getPlanDetail 契约测试 16/16 全绿,但状态机仍滞 RED(研发未 --mark-yellow),属跨轮遗留卡点,非本测试闭环可解。

9. 需用户单独授权才能继续的项(未授权未执行 + 测试设计)

项 为何未执行 给出的测试设计
依赖漏洞扫描(OWASP DC/SCA) 需联网拉取漏洞库 引入 dependency-check / snyk,CI 门禁阻断高危 CVE
性能/可靠性压测 需联网或打到目标环境,未授权 对 /api 关键路径做 k6/JMeter 基线+阈值;本机仅冒烟
Playwright 公网装浏览器 外部公网下载被禁 预置匹配版本 chromium_headless_shell-1243 到镜像;当前用 1234 兜底仅够 /frontend
langgraph 报告解析真实链路 需联网/远端 AI 以 cfc-langgraph 本地最小服务 + 回退 opencode 验证
E2E 真实登录态(/admin) 脚本缺口(见 P4),非授权问题 修复 auth.js 身份选择后实跑(不涉联网)

10. 门禁结论

⛔ 不通过(有条件)

裁决依据:后端全量实跑 1649 例中仍有 71 失败 + 49 错误(37 红类),未达「全量 BUILD SUCCESS、零失败/错误」门禁;E2E /admin 未实测(脚本缺口);覆盖率未实测(缺 JaCoCo)。但本轮已确认无任何新增回归(与 10:50 基线画像完全一致,+15 新测全绿),问题均为历史遗留契约漂移与环境红。

复评条件(满足任一即可推进):

  1. 修复 P1(B-13 环境红 3 类) + P2/P3(112 例契约漂移与 Mockito 误用),使后端全量 BUILD SUCCESS 且 failures=0、errors=0;
  2. 引入 JaCoCo(P5) 并产出覆盖率达标;
  3. 修复 P4 后重跑内部 E2E,/admin 与 /frontend 均取得真实登录态与渲染;
  4. 后续 SRS/需求文档发生变更(自 c83c4eb25 起有新提交)时,按 §6 闸门触发测试用例编写。

本角色仅做只读审查与(需求变更时的)测试编写,不修改/提交/推送生产源码;上述修复由研发/测试团队协作实施。