|
|
@@ -0,0 +1,240 @@
|
|
|
+# 测试负责人工作汇报 R224(2026-11-16 01:30 GMT+8 · 自动化闭环)
|
|
|
+
|
|
|
+> 测试负责人:陆谨(软件测试专家团 · 测试架构师)|执行档:**review(离线白名单)** + 内网三节点浏览器 E2E 实跑 + 远程节点派发(251 langgraph / 189 admin)
|
|
|
+> 静默无人值守,全程未提问(按用户指令:不提问、静默完成);方案假设已在 §2 声明
|
|
|
+> 基线:`origin/cfclub` **`3ff62e324`**(HTTP 通道 fetch);本轮窗口 **0 新增提交**(R223 基线即该提交)→ **零 SRS / 零场景 / 零 src 变更**
|
|
|
+
|
|
|
+## 0. 历史审查记录(对照,非本次结论依据)
|
|
|
+
|
|
|
+| 项 | 内容 |
|
|
|
+|---|---|
|
|
|
+| 上次审查 | **R223(2026-11-16 00:29)**,结论「不通过(有条件)」;基线 `3ff62e324`;lg@251 31/8(去 test_graph);后端全量**未重跑**(仅 test-compile);可验证子集 895 例 95.20% |
|
|
|
+| 本次 | **第 224 轮,非首次审查**;基线同上(本轮窗口零提交),全部套件**重新取证** |
|
|
|
+| 遗留 → 本次状态 | **B-223-1(lg 8 红 429)→ 复现 8 红(同集,环境型,观察 2/3)**;**B-218-1(P0 Bean 撞名)→ 本轮全量实测确认仍未修(`ResourceBeanNameCollisionGuardTest` 1/1 红,第 4 轮)**;B-218-3(线上 502)→ 首跑即 13/13,未复现(观察 2/3);B-36(根级 16 红)→ 承袭;B-DX-1(dx 2 跳)→ 第 58 轮;B-221-4(189 HEAD 落后)→ 仍落后 `1e3bea680`;**G11(CI 清单失真)→ 仍未修(第 26 轮)** |
|
|
|
+| 本次新增 | **B-224-1(P2 工具)** 251 派发提示词写「在 251 节点执行」→ agent 尝试 ssh 到 251 自身,首派 15min 内无产出;**B-224-2(P1 测试资产)** 观察钉住(pin)用例在缺陷修复后未转断言 → 稳定假红(已修);**B-224-3(P1 流程)** R223 台账 24 条 TC 未入 `origin/cfclub`(已回收);**B-224-4(P2 性能)** 后端全量耗时劣化 + 日志 14.6MB DEBUG 噪音;**B-224-5(P2)** langgraph pytest summary 后进程不退出(第 22 轮) |
|
|
|
+
|
|
|
+> 历史记忆只作对照;本轮**全部套件重新取证**,未直接复用任何历史结论。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 1. 执行总览
|
|
|
+
|
|
|
+| 套件 | R224(本轮) | R223(上轮) | 漂移 |
|
|
|
+|---|---|---|---|
|
|
|
+| 基线 | `3ff62e324`(窗口 **0 提交**) | `3ff62e324`(窗口 +28) | 无漂移 |
|
|
|
+| 浏览器 E2E · admin(本机) | **5/5**(1.3m) | 5/5(2.3m) | 一致 |
|
|
|
+| 浏览器 E2E · frontend(本机) | **6/6**(48.6s) | 6/6(48.5s) | 一致 |
|
|
|
+| 浏览器 E2E · admin(189) | **5/5 EXIT=0**(1.1m,spec blob `4703d73fb` = 本机) | 5/5 | 一致(B-221-4 承袭) |
|
|
|
+| 浏览器 E2E · shop-api | **4/4**(7.2s) | 4/4 | 一致 |
|
|
|
+| 浏览器 E2E · health | **13/13 首跑即全绿**(4.2s) | 13/13 | 一致(B-218-3 未复现) |
|
|
|
+| 浏览器 E2E · dx-bridge | **2 跳**(404,第 58 轮) | 2 跳 | 一致 |
|
|
|
+| 线上 API(点名 4 文件) | **36 例 / 33 过 / 0 红 / 3 跳**(39.1s+31.9s) | 32 例 25/0/7 | **红 1→0**(pin 转断言,B-224-2 已闭环) |
|
|
|
+| cfc-web Jest | **124 过 / 10 红 / 134**(21 套,20.4s) | 124/10/134 | **逐例零漂移** |
|
|
|
+| cfc-frontend Jest | **644 过 / 4 红 / 12 跳 / 660**(46 套,16.5s) | 644/4/12/660 | **逐例零漂移** |
|
|
|
+| 根级黑盒 Jest | **7 过 / 16 红 / 23**(5.6s) | 7/16/23 | 一致(B-36 第 100 轮) |
|
|
|
+| langgraph@251 | **43 例 / 35 过 / 8 红**(107.37s,`timeout` 兜底 EXIT=124) | 31/8(39 例,去 test_graph) | **口径扩大至全量 43 例**;红集同型(429) |
|
|
|
+| 后端 · test-compile | **BUILD SUCCESS**(517 测试源文件,03:01) | SUCCESS(515,3m58s) | 一致 |
|
|
|
+| 后端 · 全量 | **510 类 / 4469 例 / 4113 过 / 352 红(341F+11E)/ 4 跳 = 92.12%**(剔 skip 92.20%;剔 335 契约前瞻 = **99.62%**),`Total time: 51:50` | 未重跑(承采 R221) | **本轮首次实跑** |
|
|
|
+
|
|
|
+**全站合计(本轮全部实测,无承采)**:**5400 例 / 4989 过 / 390 红 / 21 跳 = 92.73%**(剔 skip **93.09%**;剔 349 预期红 = **99.24%**)
|
|
|
+- 390 红三层归因:**契约前瞻 RED 349**(后端 335 + web 10 + fe 4,TDD 先行、实现未落地)+ **存量装置缺陷 16**(8 类,逐类逐例与历史一致 → **零漂移第 36 次**)+ **守卫新增 1**(`ResourceBeanNameCollisionGuardTest` = B-218-1 P0 未修)+ **环境型 24**(根级 ECONNREFUSED 9082 ×16 + lg 429 ×8)
|
|
|
+- **真实产品缺陷红 = 17(后端 16 存量 + 1 P0 守卫)**;非后端 38 红中 0 例确定性产品回归
|
|
|
+- **双节点浏览器合计**:本机 28 过 + 2 跳 + 189 admin 5 过 = **33 过 + 2 跳**
|
|
|
+
|
|
|
+**SRS 闸门(G12)**:`docs/superpowers/specs` **204** 份、`tests/test-cases` **21** 份、`tests/user-scenarios` **11** 份,窗口**零变更** → 本轮 0 条新增用例。
|
|
|
+但 R223 声明的 24 条能力键用例(`shop.review.detail` / `shop.review.my` / `shop.order.receiptTimeout`)**未入 origin**(仅存于本地分支 `fix/scenario-coverage`)→ 本轮**资产回收入库**,恢复可追溯性。
|
|
|
+
|
|
|
+**测试结果有变化(R223 → R224)— 触发提交 + 通知研发**
|
|
|
+- 🟢 **SC-X-19 越权缺口闭环并转断言**:`EnergyController.java:174` 归属校验(`d39aa5282` S-cfc-390)已生效,跨家庭 `memberId` 由 200 → **403「无权访问该成员的能量数据」**;测试侧把「观察钉住」改为断言 → `dimension-energy-contract.spec.js` **14/14 绿**。
|
|
|
+- 🟢 **线上 API 点名子集红 1→0**(33/0/3)。
|
|
|
+- 🔴 **langgraph 8 红复现**(AgnesAI 免费配额 429,第 3 轮同型)→ 环境型,非回归。
|
|
|
+- 🟡 **R223 台账资产回收**(24 条 TC 入库)。
|
|
|
+- 🟡 **后端全量首次实跑**(R223 未做),口径见 §1 与 §7。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 2. 项目画像(本轮视角)
|
|
|
+
|
|
|
+- **业务定位**:家庭教育 SaaS(五维能量 · 成长规划 · 测评订单 · 商城 · 健康报告解析 · 家庭工作台 · AI 教练),双端:小程序 H5 `cfc.iwintrue.com/frontend` + Web 管理端 `cfc.iwintrue.com/admin`。
|
|
|
+- **技术栈**:`cfc-backend` Spring Boot 2.7.18 / MyBatis-Plus / JDK 1.8(9082)· `cfc-web` Vue2 + Element UI(8082)· `cfc-frontend` uni-app 小程序(H5 预览)· `cfc-langgraph` FastAPI + LangGraph + ChromaDB(251 节点)· `dan/danshop` 独立商城(8888)。
|
|
|
+- **关键路径(本轮取证对象)**:登录/鉴权(JwtInterceptor 401 闸门)→ 家庭与成员 → 五维能量(overview/logs/grant/deduct + 账本守卫)→ 成长规划(plan/confirm/submit/tasks)→ 商城评价(create/detail/my)与订单收货超时 → 后台管理(用户/家庭/看板)→ AI 会话/意图/打标。
|
|
|
+- **测试资产现状**:后端测试源 **517** 文件、`@Test` **4454**、契约类 **237**;Playwright spec **80**(live 4 + api + func);Jest 两套(web 21 / fe 46);langgraph pytest 10 文件;用例台账 **21** 份(TC 表行 988);用户场景 **11** 份(SC 标识 **244**)。
|
|
|
+- **质量目标(用户口径)**:所有测试用例全部覆盖并通过对;用例覆盖全部 SRS 与用户场景(含异常流);SRS/场景变更时同步更新用例。
|
|
|
+- **本轮风险点**:① 后端测试**直连共享库 251:3306/zxyj** 且每上下文重跑全量迁移(51:50 耗时主因,B-224-4,兼数据污染风险);② langgraph 上游配额不稳定(429);③ CI 清单与真实红集持续失真(G11);④ B-218-1 P0 `@Resource` Bean 撞名仍未修(守卫用例 1 红)。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 三、20 类测试覆盖矩阵
|
|
|
+
|
|
|
+| # | 测试类型 | 层次 | 状态 | 证据(本轮实测) |
|
|
|
+|---|---|---|---|---|
|
|
|
+| 1 | 单元测试 | 功能层次 | **已发现** | 后端 517 测试源 `test-compile` 成功;web 21 套 134 例、fe 46 套 660 例实跑 |
|
|
|
+| 2 | 组件测试 | 功能层次 | **已发现** | web views 级契约(Families/FamilyWorkbench 3 套)× fe pages 级(growth/shop 等)实跑 |
|
|
|
+| 3 | 集成测试 | 功能层次 | **已发现(全量实跑)** | `integration/**` 全部执行并产出 XML;红 2 类(EnergySystemFlow 6F / GuideModuleIntegration 1E,均为存量)|
|
|
|
+| 4 | 契约测试 | 功能层次 | **已发现(红集主体)** | 后端 237 契约类;契约红 **60 类 / 335 例**(前瞻 RED);web 10 + fe 4 同型;**越权契约 SC-X-19 已由红转绿(403 断言)** |
|
|
|
+| 5 | 接口 API 测试 | 功能层次 | **已发现** | 线上点名 4 文件 **36 例 33 过 3 跳**;shop 4/4;health 13/13(401 契约) |
|
|
|
+| 6 | 系统/端到端 | 功能保障 | **已发现(实跑)** | 本机 28 过 + 2 跳、189 admin 5 过(spec blob 同版)= 33 过 + 2 跳 |
|
|
|
+| 7 | 验收 UAT | 功能保障 | **部分已发现** | 场景文件 11 份 / SC 244;无人工 UAT 签署记录 |
|
|
|
+| 8 | BDD 规格 | 功能保障 | **未发现** | 全仓 `.feature` = 0(`find -name *.feature` 命中 0)→ 缺口 |
|
|
|
+| 9 | 冒烟测试 | 功能保障 | **已发现** | `playwright.config.smoke.js` 存在;线上 api-smoke 4/4 绿 |
|
|
|
+| 10 | 回归测试 | 功能保障 | **已发现** | web/fe/浏览器/线上 API 逐例对照**零漂移**;后端已执行段红集与历史存量集一致 |
|
|
|
+| 11 | 探索性测试 | 功能保障 | **未发现** | 无人值守窗口不做 chartered 探索(无 charter/记录) |
|
|
|
+| 12 | 性能测试 | 非功能 | **未发现(未实测)** | 无 k6/JMeter;`nonfunc-perf-compat.spec.js` 仅 7 例接口冒烟(已跑绿);execute 档未授权 → **不写通过** |
|
|
|
+| 13 | 可靠性测试 | 非功能 | **部分已发现** | lg 429 环境型(B-223-1/B-224 观察 2/3);health 首跑全绿;无故障注入 |
|
|
|
+| 14 | 安全测试 | 非功能 | **部分已发现** | 匿名 6 端点 6/6=401;`nonfunc-security.spec.js` 11/11 绿;跨家庭越权 403 断言;**无 SAST/依赖扫描(未授权联网)** |
|
|
|
+| 15 | 兼容性测试 | 非功能 | **部分已发现** | `nonfunc-perf-compat` 多端 UA 兼容 7 例绿;浏览器矩阵仅 Chromium 双视口 |
|
|
|
+| 16 | 可用性测试 | 非功能 | **未发现** | 无 SUS/任务完成率记录 |
|
|
|
+| 17 | 无障碍测试 | 非功能 | **未发现(有实现无断言)** | admin 密度四期 §8.F 无障碍补修(`233bb4634`/`1f4e8cac1`)**无 axe/WCAG 自动化断言** → 缺口 |
|
|
|
+| 18 | QA 流程 | 度量与流程 | **部分已发现** | 三节点 E2E 互备 + 派发;**251 派发提示词缺陷(B-224-1)已自处置**;CI 清单失真(G11 第 26 轮) |
|
|
|
+| 19 | 质量指标 | 度量与流程 | **已发现** | 通过率/红例/契约红比/场景映射四指标本轮刷新(§1、§7) |
|
|
|
+| 20 | 全项目代码审查 | 度量与流程 | **部分已发现** | 窗口零 src 变更 → 无新增代码可审;仅复核 `EnergyController` 越权实现与 `DatabaseInitializer` 迁移噪音(§7 B-224-4) |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 四、覆盖缺口清单
|
|
|
+
|
|
|
+| 缺口类型 | 现状 | 风险 | 建议测试设计 | 优先级 | 闭环方式 |
|
|
|
+|---|---|---|---|---|---|
|
|
|
+| 后端全量耗时劣化 | 510 类 / 51:50(R221 505 类 / 40:06,+29%) | 回归反馈周期长,G1 难每轮实跑 | 加 `application-test.yml` 关迁移 + `logback-test` 降级 + 治理 DEBUG 日志 | P1 | 连续 2 轮 ≤40min 即闭环(B-224-4) |
|
|
|
+| BDD 规格 | 无 `.feature` | 需求↔用例可追溯弱 | 对 SC-P-44/45、SC-P-47 补 Gherkin | P2 | 下迭代引入 cucumber |
|
|
|
+| 探索性测试 | 无 charter | 未知缺陷盲区 | 每迭代 1 次 chartered 探索并留记录 | P2 | 人工窗口补 |
|
|
|
+| 性能/可靠性 | 无压测/故障注入 | 容量与恢复未知 | k6 打 `/api/energy/overview` + `/api/family/member/list` | P1 | 需用户授权联网(execute 档) |
|
|
|
+| 无障碍 | 有实现无断言 | 回归不可感知 | axe-core 扫 admin 5 页 + fe 3 页 | P2 | 补 `a11y.spec.js` |
|
|
|
+| 兼容性 | 单浏览器双视口 | 跨端渲染风险 | 增 Firefox/WebKit project | P3 | 加 project 即闭环 |
|
|
|
+| CI 清单失真 | 33 类固定清单 | 门禁必红 + 漏拦 | 由 surefire XML 自动生成清单 | P1 | G11 闭环判据:清单=实测红集 |
|
|
|
+| 场景 L3 链接 | 用例层 SC 引用 158/244 = 64.8% | 场景覆盖低估 | 「所属场景」列格式归一 | P1 | rollup 归一后自动上升 |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 五、域结论表
|
|
|
+
|
|
|
+| 审查维度 | 负责专家 | 结论 | 关键证据 |
|
|
|
+|---|---|---|---|
|
|
|
+| 单元·组件级 | 苏雅 | **部分通过** | web 124/134(10 契约 RED)、fe 644/660(4 契约 RED)、后端 test-compile SUCCESS;后端后段类未跑完 |
|
|
|
+| 集成·接口级 | 柯砚 | **通过** | 线上 API 33/0/3;shop 4/4;health 13/13;已执行 integration 段仅 2 类存量红 |
|
|
|
+| 系统·验收级 | 白樾 | **通过(可验证子集)** | 本机 28+2 跳、189 5/5(spec 同版);双 URL 11/11 全绿 |
|
|
|
+| 测试保障级 | 闻朔 | **部分通过** | 冒烟/回归零漂移;探索性缺 charter |
|
|
|
+| 性能·可靠性 | 骆骋 | **部分通过(未实测压测)** | 后端耗时劣化证据链(B-224-4);lg 429 复现;无压测 |
|
|
|
+| 安全 | 关屿 | **通过(接口面)** | 匿名 6/6=401;越权 403 断言闭环;无 SAST(未授权) |
|
|
|
+| 兼容·体验 | 阮清 | **部分通过** | 多端 UA 7/7;单浏览器、无 a11y 断言 |
|
|
|
+| 流程·度量·代码 | 何序 | **部分通过** | 台账 988 行/SC 64.8%;CI 清单失真;窗口零 src 故无新增代码审查面 |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 六、五要素问题清单
|
|
|
+
|
|
|
+**问题 1(B-224-2,P1 测试资产,已闭环)观察钉住用例未随实现修复转断言 → 稳定假红**
|
|
|
+- ① 问题描述:`tests/e2e/api/dimension-energy-contract.spec.js` 的 `_pinsObserved` 用例断言「跨家庭 `memberId=999999` 返回 200(无归属校验)」;该缺口已于 `d39aa5282` 修复,用例因此**每轮必红**,且与真实回归混在同一红色池中。
|
|
|
+- ② 测试 bug 点:`tests/e2e/api/dimension-energy-contract.spec.js:154-158`(原 `expect(r.code).toBe(200)`)。
|
|
|
+- ③ 最优修改方案:pin 转断言——改为 `expect(r.code).toBe(403)` + `message` 含「无权访问」+ `data` 为空;describe 更名「越权隔离(SC-X-19)」(已实施)。
|
|
|
+- ④ 修改目的:把「记录缺陷」的用例升级为「守护修复」,消除假红、恢复该文件 100% 通过。
|
|
|
+- ⑤ 闭环:复跑 `dimension-energy-contract.spec.js` → **14/14 绿**(31.9s),已闭环。
|
|
|
+
|
|
|
+**问题 2(B-224-1,P2 工具,已自处置)251 派发提示词致 agent ssh 自身**
|
|
|
+- ① 问题描述:首派提示词为「请在 251 节点执行以下 shell 命令」,而 opencode 服务本身就跑在 251 → agent 反复尝试 `ssh 192.168.16.251` 并思考 8 分钟,15min cap 内只拿到中间态,误判为「节点不可用」。
|
|
|
+- ② 测试 bug 点:`_r224_251_lg.cjs` 提示词首行(派发脚本层,非产品代码)。
|
|
|
+- ③ 最优修改方案:提示词改为「**你在本机直接执行以下命令(不要 ssh、不要连其他节点)**」;模型固定 `etotem/deepseek`(`/api/model` 校验 `status=active` 后才派发)。
|
|
|
+- ④ 修改目的:消除节点=执行机的语义混淆,保证派发结果可确定性取回。
|
|
|
+- ⑤ 闭环:修正后首派即取回完整 summary(43 例 35 过 8 红 / 107.37s)。**注:首个会话实际在 16min 后自行成功**,故判「延迟成功」而非失败,但仍须改提示词以免每轮浪费 15 分钟。
|
|
|
+
|
|
|
+**问题 3(P0 环境)langgraph 8 红为上游 429,非产品缺陷**
|
|
|
+- ① 问题描述:43 例中 `test_auto_tag` ×4、`test_intent` ×4 失败;红集与 R223 完全同型。
|
|
|
+- ② 测试 bug 点:`cfc-langgraph/app/middleware.py:113` 捕获 `RateLimitError 429 AgnesAI_error`;`app/agents/intent_classifier.py` 429 后兜底 `chat` → 4 条意图断言被联动打红。
|
|
|
+- ③ 最优修改方案:运维为 251 升级 Token Plan / 轮换有配额 key;研发把 429 改为「显式失败 + 可重试」,**不静默兜底**。
|
|
|
+- ④ 修改目的:区分「上游不可用」与「分类错误」,恢复 AI 域可验证性。
|
|
|
+- ⑤ 闭环:配额恢复后 251 连跑 2 轮 43/43 全绿 → 销 B-223-1(当前观察 2/3)。
|
|
|
+
|
|
|
+**问题 4(B-224-4,P1 装置 + 数据安全,本轮最重要)后端测试直连共享库 251:3306 且每上下文重跑全量迁移**
|
|
|
+- ① 问题描述:`mvn -o -B test` 全量 **510 类 / 4469 例 / 51:50**;`controller`/`integration` 段 20~150s/类、`service` 段 100~200s/类;日志体积 **14.6MB**,`DatabaseInitializer` 输出 **24987 行**、Spring 上下文启动 **25+** 次;`jstack 8060` 显示 `main` 线程 RUNNABLE 阻塞于 `SocketInputStream.socketRead0 → com.mysql.cj.protocol.ReadAheadInputStream`,即**在等远端 MySQL 网络往返**。
|
|
|
+- ② 测试 bug 点:`cfc-backend/src/test/resources/` **不存在**(无 `application-test.yml`/`logback-test.xml`)→ 测试直接继承 `src/main/resources/application*.yml:22,47` 的 **`jdbc:mysql://192.168.16.251:3306/zxyj`(createDatabaseIfNotExist=true)**,以 `dev` profile 读写共享库;每次 `@SpringBootTest` 新建上下文重跑 `schema.sql`(433 条 DDL)+ `DatabaseInitializer`(650 处迁移段)。
|
|
|
+- ③ 最优修改方案:① 新增 `src/test/resources/application-test.yml`(本地 MySQL/H2 + 关闭自动迁移,schema 由一次性 `schema-test.sql`/`@Sql` 建);② 新增 `logback-test.xml` 把 `com.etotem` 降 `WARN`(当前 MyBatis DEBUG SQL 全落盘);③ `DatabaseInitializer` 加「同 JVM 只跑一次」静态闸;④ controller 用例改 `@WebMvcTest`。
|
|
|
+- ④ 修改目的:把全量回归压到 CI 可承受窗口(目标 ≤40min),同时**消除测试对共享库的写入**(当前测试会向 251 的 `zxyj` 造用户/订单/家庭数据,存在污染与误删风险)。
|
|
|
+- ⑤ 闭环:连续 2 轮全量 ≤40min、类数/例数不变(510/4469±),且进程内不再出现 `192.168.16.251:3306` 连接 → 销号。
|
|
|
+
|
|
|
+**问题 5(B-224-3,P1 流程)R223 用例台账未入 origin**
|
|
|
+- ① 问题描述:R223 报告声明派生 24 条 TC 并写入 `tests/test-cases/2026-11-16-review-detail-my-receipt-timeout.md`,但该文件仅存在于本地分支 `fix/scenario-coverage`(`c1f20bc2a`),`origin/cfclub` 无此文件 → 台账断层。
|
|
|
+- ② 测试 bug 点:`tests/test-cases/2026-11-16-review-detail-my-receipt-timeout.md`(69 行)在 origin 缺失。
|
|
|
+- ③ 最优修改方案:随本轮报告提交入库(已实施);推送以 `origin/cfclub` 为唯一事实源。
|
|
|
+- ④ 修改目的:恢复 G12 可追溯性(SRS 变更 → 用例 → 执行结果闭环)。
|
|
|
+- ⑤ 闭环:`git ls-tree origin/cfclub tests/test-cases/` 命中该文件即闭环。
|
|
|
+
|
|
|
+**问题 6(G11,P1 流程,第 26 轮)CI 排除清单与实际红集双向失真**
|
|
|
+- ① 问题描述:`.gitlab-ci.yml:61` 固定 33 类 `BACKEND_OBSERVED_CLASSES`;清单外仍有确定性红(漏拦),清单内多类已全绿(陈旧)→ `backend-blocking-junit` 长期必红,门禁失效。
|
|
|
+- ② 测试 bug 点:`.gitlab-ci.yml:61`(静态清单)+ `145-170`(blocking job 依赖该清单)。
|
|
|
+- ③ 最优修改方案:清单由 surefire XML 自动生成纳入仓库(`ci/gen-observed-classes.sh`),或契约前瞻类统一 `@Tag("forward-contract")` 后 blocking 用 `-Dgroups='!forward-contract'`。
|
|
|
+- ④ 修改目的:让 CI 红=真实回归,恢复阻断门禁的可信度。
|
|
|
+- ⑤ 闭环:连续 2 轮 CI blocking 绿且清单与实测红集差集为 0。
|
|
|
+
|
|
|
+**问题 7(B-218-1,P0 仍未修,第 4 轮)`@Resource` 字段名撞 Bean 名 → 运行期 `BeanNotOfRequiredTypeException`**
|
|
|
+- ① 问题描述:`ResourceBeanNameCollisionGuardTest` 本轮全量实跑 **1/1 红**;`CoachRecommendService.java:71-72` 字段 `dimensionScoreService`(类型 `FamilyMemberDimensionBaseScoreService`)与 `DimensionScoreService` 的默认 Bean 名相同,`@Resource` 先按名解析 → 类型不匹配抛 `BeanNotOfRequiredTypeException`,使依赖该链路的 `@SpringBootTest` 上下文启动失败(R203 已确认是线上 `d363df8056` 回滚真因)。
|
|
|
+- ② 测试 bug 点:`cfc-backend/src/main/java/com/etotem/cfc/service/CoachRecommendService.java:71-72`;守卫用例 `src/test/java/com/etotem/cfc/unit/ResourceBeanNameCollisionGuardTest.java`。
|
|
|
+- ③ 最优修改方案:字段加显式限定(`@Resource(name = "familyMemberDimensionBaseScoreService")`)或改名 `familyMemberDimensionBaseScoreService`;同步排查同类第二处(`HealthDataSourceBridgeService.dimensionScoreService`)。
|
|
|
+- ④ 修改目的:消除启动期 Bean 解析失败,恢复 49 个 `@SpringBootTest` 类的可判定性,避免线上回滚复现。
|
|
|
+- ⑤ 闭环:守卫用例转绿 + 全量 `mvn -o -B test` 中 `BeanNotOfRequiredTypeException` 出现次数 = 0 → 销号。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 七、门禁结论
|
|
|
+
|
|
|
+**结论:不通过(有条件)**
|
|
|
+
|
|
|
+- ✅ **G3 浏览器 E2E**:本机 28 过 + 2 跳、189 admin 5/5(spec blob 同版)= 33 过 + 2 跳
|
|
|
+- ✅ **G4 可构建**:后端 `test-compile` BUILD SUCCESS(517 测试源,03:01)
|
|
|
+- ✅ **G5 surefire 覆盖**:已执行类 510/510 全部产出 XML,无沉默类
|
|
|
+- ✅ **G6 浏览器不回归**:双节点、双 URL、spec 同版,逐例通过
|
|
|
+- ✅ **G8 鉴权面**:匿名 6 端点 6/6 = 401
|
|
|
+- ✅ **G10 节点可用**:本机 + 189:4090(200)+ 251:4096(200)
|
|
|
+- ✅ **G12 SRS 同步**:窗口零 SRS/场景变更 → 0 新增;R223 台账 24 TC 已回收入库
|
|
|
+- ⚠️ **G1 通过率**:全站 **5400 例 / 4989 过 / 390 红 / 21 跳 = 92.73%**(剔 skip 93.09%;**剔 349 预期红 = 99.24%**)→ 未达「全部通过」,但**真实缺陷红仅 17**(后端 16 存量 + 1 P0 守卫)
|
|
|
+- ⚠️ **G2 实红**:390 = 契约前瞻 349 + 存量 16 + 守卫 1 + 环境 24;**非契约非环境红 17**,与 R221 逐类逐例一致(零漂移)
|
|
|
+- ⚠️ **G7 AI 域**:35/43(8 红=429 环境型,观察 2/3)
|
|
|
+- ✅ **G13 零漂移(第 36 次)**:后端 8 类存量红(WebConfigGrowthExcludeRemoved 2E / EnergySystemFlow 6F / GuideModuleIntegration 1E / OrchestrationEngine 1F / OrchestrationIntegration 1F / MembershipPaySwitch 1F / PaymentServiceORDRouting 1F / UserServiceWechatLogin 3E)逐类逐例与 R221/R213 一致;web 10 + fe 4 契约 RED 逐例一致
|
|
|
+- ❌ **G9 / G14 覆盖**:用例层 SC 引用 158/244 = **64.8%**;BDD/探索/性能/可用性/无障碍 5 类未覆盖
|
|
|
+- ❌ **G11 CI 门禁**:清单 33 类 vs 实测红类 **69** → **漏拦 + 陈旧**双向失真(第 26 轮未修)
|
|
|
+
|
|
|
+**不通过原因**:① 用户目标「所有用例全部覆盖并通过」未达成(390 红:349 契约前瞻 + 17 真实缺陷 + 24 环境);② 「覆盖全部 SRS + 场景」未达成(SC 用例层 64.8%,BDD/探索/性能/可用性/无障碍 5 类空缺);③ CI 门禁失真使「回归可信」无法外部证明。
|
|
|
+
|
|
|
+**复评条件(4 项全绿才可转「通过」)**
|
|
|
+1. 后端 17 例真实缺陷红(含 B-218-1 P0 Bean 撞名)修复,且装置改造后全量 ≤40min;
|
|
|
+2. langgraph 251 连续 2 轮 43/43(销 B-223-1);
|
|
|
+3. web 10 + fe 4 契约 RED 由研发实现转绿;
|
|
|
+4. CI 清单与实测红集差集为 0(销 G11)。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 附录 A:本轮命令(可复现)
|
|
|
+
|
|
|
+```bash
|
|
|
+# 后端(隔离 worktree,避免主工作区 20+ 未跟踪文件污染)
|
|
|
+git worktree add .worktrees/test-lead-R224 --detach 3ff62e324
|
|
|
+cd .worktrees/test-lead-R224/cfc-backend
|
|
|
+mvn -o -B test-compile # BUILD SUCCESS 03:01(517 测试源)
|
|
|
+mvn -o -B test # 全量 510 类 / 4469 例,Total time: 51:50
|
|
|
+
|
|
|
+# 浏览器(每节点单任务,串行)
|
|
|
+cd tests && node node_modules/@playwright/test/cli.js test -c playwright.config.live.js --project=admin-desktop
|
|
|
+node node_modules/@playwright/test/cli.js test -c playwright.config.live.js --project=frontend-mobile
|
|
|
+node node_modules/@playwright/test/cli.js test -c playwright.config.live.js --project=shop-api --project=dx-bridge
|
|
|
+node node_modules/@playwright/test/cli.js test -c playwright.config.health.js
|
|
|
+
|
|
|
+# Jest
|
|
|
+cd cfc-web && node node_modules/jest/bin/jest.js --ci --silent
|
|
|
+cd cfc-frontend && node node_modules/jest/bin/jest.js --ci --silent
|
|
|
+cd .. && node tests/node_modules/jest/bin/jest.js -c tests/jest.config.js --ci --silent
|
|
|
+
|
|
|
+# 线上 API 点名 4 文件(36 例)
|
|
|
+cd tests && node node_modules/@playwright/test/cli.js test -c playwright.config.api.js \
|
|
|
+ api/api-smoke.spec.js api/nonfunc-security.spec.js api/nonfunc-perf-compat.spec.js api/dimension-energy-contract.spec.js
|
|
|
+
|
|
|
+# langgraph(251 节点本机执行;派发模型 etotem/deepseek)
|
|
|
+cd /sc-data/cfc/cfc-langgraph && timeout 900 .venv/bin/python -m pytest tests \
|
|
|
+ --ignore=tests/qna --ignore=tests/test_chat.py -q
|
|
|
+```
|
|
|
+
|
|
|
+## 附录 B:口径声明
|
|
|
+
|
|
|
+1. **后端全量为完整实跑**:`mvn -o -B test` → `Total time: 51:50`,**510 类 / 4469 例**全部产出 `TEST-*.xml`(`_r224_agg.cjs` 聚合,510/510 无沉默类);测试源 517 文件中 7 个为无 `@Test` 的辅助类,故「510 测试类」与「517 测试源」不矛盾。
|
|
|
+2. **「红」的三层归因**:契约前瞻 RED(TDD 先行,实现未落地,预期红)/ 存量装置缺陷(逐轮零漂移)/ 环境型(429、ECONNREFUSED、502)。仅第三类与产品健康无关;第二类为真实缺陷但非本轮新增。
|
|
|
+3. **线上 API 例数**:必须点名文件,否则 `testMatch` 会展开 990 例(B-173-2);本轮点名 4 文件 36 例。
|
|
|
+4. **Playwright 版本**:必须 `node tests/node_modules/@playwright/test/cli.js`(1.61.1),不能用根级 `npx playwright`(B-218-4)。
|
|
|
+5. **langgraph 例数 43 vs 39**:本轮 `--ignore=tests/qna --ignore=tests/test_chat.py` 得 43 例(含 `test_graph.py`),R223 额外忽略 `test_graph.py` 得 39 例 —— 分母差异属口径,非新增用例。
|