|
|
@@ -0,0 +1,107 @@
|
|
|
+# CFC 自动化测试执行台账 · 2026-11-05 05:35(第 39 轮 · B-10 持续解除 / YELLOW 复验第 2 次通过 / B-13 环境红根因定位)
|
|
|
+
|
|
|
+> 测试负责人视角 · TDD 多智能体研发测试调度 skill + 软件测试专家团
|
|
|
+> 模式:本工作区只读扫描 + 契约测试离线实跑复验 + 状态盘点;未派发 opencode(测试角色纪律)。
|
|
|
+> 无人值守默认口径(沿用 #18–#38):执行档 = **review(离线白名单)**;未授权联网、未安装依赖、未启业务服务。
|
|
|
+> 本轮定位:研发负责人1 05:02 轮确认(远端基线 `dbc73931d`)**2 YELLOW(getActiveMaterial/createReport)+ 6 DONE + 0 RED**、B-10 已解除、B-11 待裁决、B-12 待夹具。本轮在远端正式基线上做第 2 次独立契约复验 + git 证据核验 + 状态盘点,并确认/收口并发批次新登记的 **B-13(环境红根因定位)**。
|
|
|
+
|
|
|
+## 1. 本轮真实动作与关键事实
|
|
|
+
|
|
|
+### 1.1 基线对齐(安全快进)
|
|
|
+- 本地 HEAD 从 `65af4ec7e` 快进到 `dbc73931d`(= origin/cfclub,7 commit 纯快进)。
|
|
|
+- 7 个远端 commit:研发负责人1 汇报(03:45/03:50/04:48/05:02)+ 研发负责人2 汇报(04:22)+ auto bump version ×2。
|
|
|
+- 快进后工作区 78 项未提交改动(前端修复、并发批次 B-13、11-03/11-04 遗留报告等)与远端 7 commit 无文件交集,未触碰。
|
|
|
+
|
|
|
+### 1.2 后端编译回归 B-10 —— **持续解除(第 2 轮远端基线复验)**
|
|
|
+- 研发正式修复 `37f29a5df` 已推 origin/cfclub,`git merge-base --is-ancestor 37f29a5df origin/cfclub` 通过 ✓。
|
|
|
+- 本轮(05:35)在远端基线 `dbc73931d` 复跑:**testCompile 205 源 0 错**,5 个测试类全部可编译运行 → **B-10 无复发**(G4 门禁持续通过,连续第 2 轮远端基线确认)。
|
|
|
+
|
|
|
+### 1.3 契约测试复验(本轮唯一全量执行 · 3m14s)
|
|
|
+`mvn -o -B -f cfc-backend/pom.xml -DskipTests=false -Dtest='HealthReportControllerCreateReportTest,DanAssessmentControllerGetActiveMaterialTest,TrainingPlanControllerGetPlanDetailTest,DimensionRegistryTreeTest,DimensionRegistryMapContractTest' test`
|
|
|
+
|
|
|
+> ⚠️ **本轮首次踩到 pom.xml 假绿坑**:`cfc-backend/pom.xml:28` 存在 `<skipTests>true</skipTests>`(surefire 232 行 `${skipTests}` 引用),首跑未加 `-DskipTests=false` 时输出 `Tests are skipped`(BUILD SUCCESS 但 0 用例执行)。修正为显式 `-DskipTests=false` 后重跑真实验证。**教训:此后任何 `mvn test` 必须显式 `-DskipTests=false`,否则假绿**(研发汇报 CI 草案已含此规避,本轮实测复现确认其必要性)。
|
|
|
+
|
|
|
+| 测试类 | 用例 | 结果 |
|
|
|
+|---|---|---|
|
|
|
+| DanAssessmentControllerGetActiveMaterialTest | 3 | **3/3 绿** |
|
|
|
+| HealthReportControllerCreateReportTest | 5 | **5/5 绿** |
|
|
|
+| TrainingPlanControllerGetPlanDetailTest | 8 | **8/8 绿** |
|
|
|
+| DimensionRegistryTreeTest | 9 | **9/9 绿** |
|
|
|
+| DimensionRegistryMapContractTest | 7 | **4/7 绿(3 红)** |
|
|
|
+| **合计** | **32** | **29 绿 / 3 红(全在 P-2 口径未决)** |
|
|
|
+
|
|
|
+- **16 契约测试(3 RED 键口径:getActiveMaterial 3 + createReport 5 + getPlanDetail 8)= 16/16 全绿** —— 与 #38 轮一致,B-10 解除后复验通道连续第 2 轮确认。
|
|
|
+- `DimensionRegistryMapContractTest` 3 红:`map_unknownLegacy_returnsNullData`(Expected null → was "unknown_legacy_xyz")、`map_emptyLegacy_returnsNullData`(Expected null → was "")、`map_missingLegacy_returnsBadRequest`(Expected 400 → was 200)——**P-2 契约口径未决**,与 #35/#36/#37/#38 完全一致,非本轮新回归。
|
|
|
+
|
|
|
+### 1.4 2 个 YELLOW 键测试复验通过(第 2 次独立复验)
|
|
|
+- 研发负责人1 05:02 轮确认:**YELLOW = 2 键**(dan.assessment.getActiveMaterial / health.report.createReport,待测试 mark-green);DONE = 6 键(getTree/mapLegacyCode/addMember/listMembers/getPlanDetail/getPlanList);RED = 0。
|
|
|
+- 测试侧第 2 次独立复验(本轮 05:35,与 03:30 轮同口径):
|
|
|
+ - `getActiveMaterial`:契约 **3/3 绿** + 证据 sha `c3e32460a` 已在 origin/cfclub ✓
|
|
|
+ - `createReport`:契约 **5/5 绿** + 证据 sha `1767d4414` 已在 origin/cfclub ✓
|
|
|
+ - (另核验 `57e162242` getTree/mapLegacyCode、`37f29a5df` B-10 修复均在 origin/cfclub ✓)
|
|
|
+- **测试侧复验确认通过(第 2 轮)**;本地 state.json 与研发侧状态机不同步(见 1.5),`--mark-green` 落库仍需状态机同步后执行(O-1 协调中)。
|
|
|
+
|
|
|
+### 1.5 状态机(本地 state.json 与研发侧不同步 · 不擅自改写)
|
|
|
+- 本地 `.tdd/state.json`(mtime 停 2026-11-04 10:14)仍 **3 键 RED**:`health.report.createReport`、`dan.assessment.getActiveMaterial`、`guide.trainingPlan.getPlanDetail` —— **伪 RED 第 12 轮**。
|
|
|
+- 研发侧状态机(05:02)为 2 YELLOW + 6 DONE + 0 RED;本地 state.json 无 getTree/mapLegacyCode/addMember 等键,二者不一致。
|
|
|
+- **纪律**:`.tdd/` 本地私有,测试侧不擅自改写;本轮以 git 真理证据 + 契约复验完成测试侧核验,落库登记待状态机同步(主理人 O-1 协调)。
|
|
|
+- 4 个 YELLOW 键证据 sha(c3e32460a/57e162242/57e162242/1767d4414)**全部已在 origin/cfclub** ✓(本轮逐条 `merge-base --is-ancestor` 复核)。
|
|
|
+
|
|
|
+### 1.6 B-13 —— 环境红根因定位(并发批次新登记,本轮实证收口)
|
|
|
+- 并发批次(37 轮巡检)新登记 **B-13**:3 个 `@SpringBootTest` 类硬编码 `jdbc:mysql://127.0.0.1:3306/zxyj`(本机 MySQL,无库)→ `Connection refused` → `Failed to load ApplicationContext`,**8 例每轮必红**。
|
|
|
+- 本轮实证(`grep -rn "127.0.0.1:3306" cfc-backend/src/test/java`):命中恰好 3 处 —— `AdminFamilyOverviewControllerTest.java:22`、`FamilyAdminOverviewServiceTest.java:23`、`UserServiceFamilyNameLinkTest.java:23`。
|
|
|
+- **意义**:门禁 G2 的「120 红 − 8 环境红 = 112 非环境红」中,**8 例环境红的根因首次被精确定位**(此前仅为推断),归因明确、可修复(改 `@ActiveProfiles("test")` + `application-test.yml` 指向测试库)。
|
|
|
+- 远端 origin/cfclub blockers.md 无 B-13(本轮随测试轮并入提交)。
|
|
|
+
|
|
|
+### 1.7 台账与送达状态
|
|
|
+- 台账(05:24/05:25 并发批次重扫,与 HEAD 一致):控制器 **358** / handler **1941**(覆盖 **365 = 18.8%**)/ 测试文件 **205**(@Test **1545**);跨源用例 **2731**(结构化 md 729 / 用户场景 9 / Playwright 410 / Python 47 / Java@Test 1545)—— 与 03:30 轮**零增量**(远端 7 commit 仅 docs + bump,业务代码未变)。
|
|
|
+- 自动化状态:结构化 729 条**全部未跟踪**(已执行 0/通过 0);未接入 CI(无 `.github/workflows/` / `.gitlab-ci.yml` / `Jenkinsfile`)。
|
|
|
+- 前端 Jest 基线:03:12 轮实跑 **296/296 = 100%**(连续第 20 轮),本轮前端代码未变,采信。
|
|
|
+- 后端全量基线:02:50–03:11 兄弟批次 **204 类 / 1528 例 / 1404 通过 / 120 红(71F+49E)/ 91.88%**(ex-env 92.41%),红类 37,silent_missing=0;本轮 HEAD 仅含 docs + bump,**业务代码未变** → 采信全量产物,不重复跑。
|
|
|
+
|
|
|
+## 2. 未实测项(如实声明)
|
|
|
+
|
|
|
+| 项 | 原因 | 处置 |
|
|
|
+|---|---|---|
|
|
|
+| 后端 `mvn test` 全量(本轮) | 02:50–03:11 兄弟批次已全量实跑(1528 例 91.88%),业务基线未变 | 采信全量产物 |
|
|
|
+| 前端 Jest(本轮) | 03:12 轮已实跑 296/296,前端代码未变 | 采信 |
|
|
|
+| Playwright 410 / E2E / 接口冒烟 | 9082/9000/4090 DOWN(curl 000)+ 未授权联网 | 未执行 |
|
|
|
+| pytest 47 例 | 无 `.venv`(按纪律不装依赖) | 未执行 |
|
|
|
+| cfc-web Jest | `node_modules` 无 jest 依赖 | 未执行 |
|
|
|
+| 覆盖率(JaCoCo)/ 变异(PIT) | 无工具配置 | 未产出 |
|
|
|
+| 性能/可靠性/依赖漏洞/DAST | 无工具 + 需联网 | 未执行 |
|
|
|
+| 状态机 mark-green 落库 | 本地 state.json 与研发侧不同步,不擅自改写(O-1 协调) | 未登记 |
|
|
|
+
|
|
|
+## 3. 门禁结论(当前 HEAD 状态)
|
|
|
+
|
|
|
+| 门禁 | 阈值 | 实测 | 判定 |
|
|
|
+|---|---|---|---|
|
|
|
+| G1 后端单测通过率 | ≥95% | **1404/1528 = 91.88%**(ex-env 92.41%) | ❌ |
|
|
|
+| G2 非环境红 | =0 | **112 例**(120 红 − 8 环境;8 环境红根因已被 B-13 精确定位) | ❌ |
|
|
|
+| G3 前端 Jest | 100% | **296/296 = 100%**(连续第 20 轮) | ✅ |
|
|
|
+| G4 可编译性 | 0 错误 | **testCompile 205 源 0 错(本轮远端基线复跑确认,B-10 无复发)** | ✅ |
|
|
|
+| G5 执行完整性 | 报告类=源类 | **204/204 = 100%(silent_missing=0)** | ✅ |
|
|
|
+| G6 CI 门禁 | 已接入 | 无流水线 | ❌ |
|
|
|
+| G7 状态机一致 | 无伪 RED | 3 键伪 RED(第 12 轮,本地 state.json 与研发侧不同步) | ❌ |
|
|
|
+| G8 新特性契约 | 新增用例全绿 | 契约 16/16 绿 + TreeTest 9/9 绿,但 `DimensionRegistryMapContractTest` 3 红(P-2 口径未决) | ❌ |
|
|
|
+
|
|
|
+### 结论:**不通过(承袭,有条件)**——红灯 120 / 通过率 91.88% / 无 CI / 3 伪 RED(第 12 轮)/ 契约 P-2 3 红
|
|
|
+
|
|
|
+**本轮关键改善(相对 #38 轮)**:
|
|
|
+1. **B-10 持续解除**——远端基线 `dbc73931d` 第 2 轮复验:testCompile 205 源 0 错、16 契约 16/16 全绿,复验通道稳定。
|
|
|
+2. **2 个 YELLOW 键(getActiveMaterial/createReport)第 2 次独立复验通过**——与 03:30 轮同结果,证据 sha 均在远端,仅剩状态机同步落库(O-1)。
|
|
|
+3. **B-13 环境红根因定位**——3 个 @SpringBootTest 类硬编码 `127.0.0.1:3306`(8 例每轮必红),G2 环境红从「推断」升级为「精确定位+可修复」。
|
|
|
+
|
|
|
+**本轮关键发现**:`cfc-backend/pom.xml:28` `<skipTests>true</skipTests>` 假绿坑——不加 `-DskipTests=false` 则 `Tests are skipped`(BUILD SUCCESS 但 0 用例)。**本轮首跑被吞,修正后复跑方得真实结果**;此坑已记入研发 CI 草案规避项,本轮实测复现确认其必要性,后续所有 mvn test 必须显式 `-DskipTests=false`。
|
|
|
+
|
|
|
+**未改善**:120 红例未修复(P-1~P-4 无进展)、3 伪 RED 第 12 轮、契约 P-2 3 红、无 CI。
|
|
|
+
|
|
|
+**使绿优先序**(交研发):
|
|
|
+1. **P-5 状态机收口(当前最高优先)**:研发对 2 个 YELLOW 键(getActiveMaterial/createReport)确认后,测试侧 `--mark-green` 落库(本地 state.json 同步后);同步本地 state.json 3 键(createReport/getActiveMaterial/getPlanDetail)按 git 证据对齐阶段。
|
|
|
+2. **P-1~P-4(120 红例)**:37 个红类逐类修复(`ArticleControllerTest`/`GuideOrderControllerTest`/`CfCommissionServiceSettleTest`/`ProductOrderControllerTest`/`EnergySystemFlowTest` 等),commit+push,复跑验证。
|
|
|
+3. **P-2(维度注册中心契约口径)**:`DimensionRegistryMapContractTest` 3 红,需拍板 map 契约(unknown/empty→null、missing→400)后对齐实现或测试。
|
|
|
+4. **B-13(环境红)**:3 个 @SpringBootTest 类改 `@ActiveProfiles("test")` + `application-test.yml` 指向 192.168.16.251 测试库,消除 8 例每轮必红。
|
|
|
+5. **B-11/B-12**:`/api/cf` 三端点删除待研发确认意图;3 类 20 个 `@Disabled` 需建夹具后解禁。
|
|
|
+6. **P-6(最小 CI)→ P-8(跑测隔离)→ P-7(test profile 收池)**。
|
|
|
+
|
|
|
+**产出**:本台账(`docs/tdd/test/automation-run-2026-11-05-0535.md`);契约复验日志 `.tdd/backend-run-20261105-0527-contract.log`(32 例 29 绿/3 红,testCompile 205 源 0 错);B-13 实证(3 类硬编码定位);blockers.md B-13 并入;pending.md O-1 记录时间更新。
|