浠艾福 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. 新增风险
- 【重大进展】B-10 编译阻断已修复 —— 后端
testCompile 通过(205 源 0 错),套件从"0 可执行"恢复为"1528 可执行",质量状态首次可度量。
- 【核心新发现 · 真实】后端套件存在 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 数据态)。
- 【口径待核 · 承袭 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. 待核实项
- 后端 120 失败用例根因二分(test-drift vs prod-bug) —— 需 R&D/QA 协同确认;本环境仅能凭 surefire 首异常初判,已给出分类建议。
- 后端覆盖率 —— pom 未配置 JaCoCo,未实测。
- E2E 实际结果 —— 需可用凭据注入机制后实跑
/admin、/frontend。
- cfc-web Jest 历史 296 口径 —— 见 P4。
- 历史 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 失败",真实状态首次可度量。
- 复评条件(全部满足方转为通过/有条件通过):
- 后端 120 失败用例经 R&D/QA 二分处理(test-drift 更新断言 / prod-bug 修复),
mvn -o test -DskipTests=false 达 BUILD SUCCESS 且失败归零或出具双方确认豁免清单;
- 提供 E2E 凭据注入机制后实跑
/admin、/frontend,3 红用例有明确结论(转绿或产品侧解释);
- 核对 cfc-web Jest 套件范围,消除 12/90 与历史 296 的口径不一致;
- 后续轮次基于基线
65af4ec7e 检测到 SRS/需求增量时,按时编写/更新测试用例。
本闭环全程只读 + 本地测试(后端 mvn 离线、前端 jest mock)+ 测试目录内零改动(未修改生产源码、未提交、未推送;测试用例编写闸门因需求文档无变更而关闭)。凭据、密钥、令牌均未在报告/日志中落地。后端全量套件执行耗时约 40 分钟(205 测试类 / 1528 用例)。