|
|
@@ -0,0 +1,333 @@
|
|
|
+# 测试负责人工作汇报(R188 轮)
|
|
|
+
|
|
|
+> 本汇报按《测试负责人工作汇报模板》填写。R188 为**全量实跑轮**:基线 `cfclub @ 00121ff2f`(含 R187 与研发负责人巡检 2 笔),窗口内 **零源码 / 零 SRS / 零场景 / 零接口变更**。
|
|
|
+> **拓扑(用户本轮指令)**:浏览器经 `http://cfc.iwintrue.com/admin`(后台)+ `http://cfc.iwintrue.com/frontend`(小程序);189 与本机为浏览器节点(每节点单任务,串行);langgraph 部署 251 → **本轮已实派 251 并实跑**。
|
|
|
+> **★ 本轮三个关键变化(均为正向,已触发推送 + 研发通知)**
|
|
|
+> ① **后端首次恢复全量完成**:`43:15` 跑完 **369 类 / 3111 例 / 3082 过 / 25 红 / 4 跳 = 99.07%**(R184~R187 连续 4 轮「截断/沿用」,本轮实跑证伪「>2h 不可完成」);
|
|
|
+> ② **langgraph@251 首次 51/51 全绿**(R187 承袭 45/51);
|
|
|
+> ③ **frontend-mobile 6/6**(R187 为 4/6,B-185 消除,隔离复跑 2/2 全绿);**S-cfc-178 契约 4F→0 转绿**。
|
|
|
+> **★ 全站可比:3987 例 / 3918 过 = 98.27%(剔 skip 98.89%),红 56→44,G1 由「勉强过线」升至 98.27%。**
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 基本信息
|
|
|
+
|
|
|
+| 项目 | 内容 |
|
|
|
+|------|------|
|
|
|
+| 汇报人 | 测试负责人(自动化测试闭环任务 / 软件测试专家团·陆谨) |
|
|
|
+| 汇报周期 | 2026年11月13日 08:48 ~ 09:55(第 188 轮) |
|
|
|
+| 基线 | `cfclub @ 00121ff2f`(=origin,跑前=跑后一致) |
|
|
|
+| 窗口内需求变更 | **零** — `docs/superpowers/specs`(201 份)/ `tests/test-cases`(16 份)/ `API_REFERENCE.md` 窗口零变更(G12 ✅,未触发用例编写闸门) |
|
|
|
+| 窗口内源码变更 | **零** — 窗口 `aa5c096f0..00121ff2f` 仅 1 个 docs 文件(研发负责人巡检汇报),`git diff --name-only` 对 `src` 命中 0 |
|
|
|
+| 负责模块/单元 | 全站:管理端 admin@本机 + 189 · 小程序 H5 fe@本机 · cfc-langgraph@251(**本轮实派**) · cfc-backend JUnit 全量 · cfc-web/cfc-frontend Jest · 线上 API 非功能层 |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 一、本轮工作数据汇总
|
|
|
+
|
|
|
+### 1.1 测试用例建设
|
|
|
+
|
|
|
+| 指标 | 数量 | 填写说明 |
|
|
|
+|------|------|----------|
|
|
|
+| **本轮新增测试用例数\*** | **0 个** | SRS/场景/接口文档窗口零变更,未触发用例编写闸门(G12 ✅) |
|
|
|
+| **本轮验证执行测试数\*** | **3987 个** | 后端 JUnit **3111(全量实跑,本轮权威)** + 前端 Jest 624 + 管理端 116 + langgraph 51(**251 实派**)+ 浏览器 30(admin 5 + frontend 6 + shop 4 + health 13 + dx 2 跳)+ 线上 API 32 + 根级 23 |
|
|
|
+| **用例通过率** | **98.27%**(3918/3987;剔除 skip **98.89%**) | 红 44 / 跳 25;环比 R187(98.0%,红 56)**+12 过、−12 红** |
|
|
|
+| **用例台账** | `discovery.md` 承袭:**366 控制器** / 1972 `@PostMapping` / `@GetMapping` 8 处 | 本轮实测统计(零源码变更,口径同 R187);`TRACEABILITY-MATRIX.md` §10 口径不变 |
|
|
|
+
|
|
|
+### 1.2 会话与任务分发
|
|
|
+
|
|
|
+| 指标 | 数量 | 填写说明 |
|
|
|
+|------|------|----------|
|
|
|
+| **分派任务数\*** | **4 个** | R188-1 本机 `admin-desktop`(5/5,1.8m);R188-2 本机 `frontend-mobile`(**6/6**,51.4s,复跑 6/6 58.8s);R188-3 **189** `admin-desktop`(5/5 EXIT=0,1.2m);R188-4 **251** `langgraph pytest`(**51/51**,285.81s) |
|
|
|
+| **恢复智能体会话数\*** | 1 个 | 251 opencode(`:4096` = **200**,R187 记的「401 门控」本轮实测不成立)→ 派发成功 |
|
|
|
+| **当前在用会话数** | 0 个 | 全部结束;251 残留 pytest 进程已清理(见 B-177-1) |
|
|
|
+
|
|
|
+### 1.2b 各会话当前工作状态列表
|
|
|
+
|
|
|
+| 会话标签 | 会话 ID/地址 | 当前状态 | 当前任务 | 静默/空闲时长 | 工作目录 | 备注 |
|
|
|
+|----------|--------------|----------|----------|---------------|----------|------|
|
|
|
+| `local-admin` | 本机 Playwright | done | admin-desktop UI E2E | 已完成(1.8m) | `d:\cfc\tests` | **5/5**;TC-A-U01~U05 全过 |
|
|
|
+| `local-frontend` | 本机 Playwright | done | frontend-mobile UI E2E | 已完成(51.4s + 58.8s×2) | `d:\cfc\tests` | **6/6 两次连绿**;B-185 消除 |
|
|
|
+| `remote-189` | 192.168.16.189:4090 | done(exited) | admin-desktop UI E2E | 78s | `C:\code\cfc\tests` | **5/5 EXIT=0**;spec blob `4703d73fb` = 本机 → 跨节点可比 |
|
|
|
+| `remote-251` | 192.168.16.251:4096 | done | langgraph pytest | 285.81s(+挂死 9m36s) | `/sc-data/cfc/cfc-langgraph` | **51/51 全绿**;节点 HEAD `00121ff2f` = 本机 |
|
|
|
+| `local-jest` | 本机进程 | done | cfc-web + cfc-frontend + 根级 | 已完成 | `cfc-web` / `cfc-frontend` / `tests` | web **116/116**(18.6s)、fe **609/3/12**(34s)、根级 **7/16**(12.2s) |
|
|
|
+| `local-backend` | 本机 mvn | done | JUnit 全量 | 43:15 | `d:\cfc\cfc-backend` | **369 类 / 3111 例 / 25 红** |
|
|
|
+
|
|
|
+### 1.3 问题处置
|
|
|
+
|
|
|
+| 指标 | 数量 | 填写说明 |
|
|
|
+|------|------|----------|
|
|
|
+| **新测试发现问题数\*** | **1 个** | **B-188-1(P1 方法论/度量)**:`B-184-1「后端全量 >2h」判据不成立` —— 历轮以「前期类完成速率」线性外推全量耗时,但本套件呈**双峰速率**(`@SpringBootTest` 慢头 → unit 快尾),本轮同一机器 **43:15 全量跑完 369 类**。判据须改为「maven `Total time` 或 surefire XML 终值」,禁止速率外推。 |
|
|
|
+| **已解决测试相关问题数\*** | **3 个** | ① **B-185 消除**(frontend 4/6 → 6/6 两次连绿,游客态内容加载恢复正常,判环境瞬态);② **S-cfc-178 契约转绿**(`FamilyRemoveMemberContractTest` 8 例 4F→**0F**,随 `5c3cff249` 实现落地);③ **B-184-1 由「劣化」降级为「判据修正」**(全量实跑 43:15 完成)。 |
|
|
|
+| **待解决测试相关问题数** | P0×2 / P1×6 / P2×3 | ① B-142-2 langgraph 上游凭据/配额(**本轮 51/51 绿,观察 1/2**,但 live chat 仍 120s 零字节);② B-152-1/2 CI 清单漏拦 6 / 陈旧 26(P0/P1);③ S-cfc-176 幂等 1F(P1);④ B-177-1 pytest 打印 summary 后挂死(P1,**本轮复现 9m36s**);⑤ B-156-1/B-170-1 迁移 DDL 缺陷(P1/P2,本轮日志 **525 次** DDL 报错);⑥ B-162-1 3 类未入库(P1);⑦ B-178-1 反射装置 2F(P2);⑧ B-95 204 失联(P2);⑨ B-DX-1 dx 端点 404(P1,规格已声明仅登记)。 |
|
|
|
+
|
|
|
+### 1.4 本轮 git 提交与推送证据(真理证据)
|
|
|
+
|
|
|
+| 提交 sha | 关联任务/能力键 | 阶段 | 触及文件类型 | 目标分支 | 已推送远端 | 备注 |
|
|
|
+|----------|-----------------|------|--------------|----------|------------|------|
|
|
|
+| `见 §九` | 全站巡检 R188 + B-188-1 判据修正 + B-185/S-cfc-178 闭环 | 汇报 | 报告 + blockers + 研发通知 | cfclub | ✅ | 结果有变化(+12 过 / −12 红)→ 按规则提交并通知研发 |
|
|
|
+
|
|
|
+### 1.5 状态机阶段分布(全局进度)
|
|
|
+
|
|
|
+| 阶段 | 键数 | 备注 |
|
|
|
+|------|------|------|
|
|
|
+| UNTRACKED | 0 | 窗口零新增规格 |
|
|
|
+| RED | 9 | S-cfc-176 1 例 + TaskReview 装置 2 例 + 其他预期 RED 6 例 |
|
|
|
+| YELLOW | 72 | 研发负责人口径 |
|
|
|
+| GREEN | 9 | **+1(S-cfc-178)** |
|
|
|
+| DONE | 15 | 承袭 |
|
|
|
+| 合计 | 105 | 研发侧状态账本口径 |
|
|
|
+
|
|
|
+### 1.6 数据源健康度
|
|
|
+
|
|
|
+| 数据源 | 读取键数 | 是否正常 | 备注 |
|
|
|
+|--------|----------|----------|------|
|
|
|
+| 需求侧(⏳ wish) | 0 | 正常 | SRS 目标池未启用 |
|
|
|
+| 契约常量(contract) | 多组 | 正常 | 13 红类跨轮核验正常 |
|
|
|
+| 测试用例引用(test_case_map) | 308 唯一 TC | 正常 | 台账扫描正常 |
|
|
|
+| 执行结果回填(case_results) | — | 正常 | surefire 369 XML 全量可聚合 |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 二、历史审查记录(阶段 -1 记忆召回)
|
|
|
+
|
|
|
+| 项 | 内容 |
|
|
|
+|---|---|
|
|
|
+| 上次审查 | **R187(2026-11-13 08:30,提交 `aa5c096f0`)**,结论「不通过(有条件)」,全站 3987/3906(98.0%),红 56;langgraph 承袭 45/51;浏览器 frontend 4/6(B-185) |
|
|
|
+| 历史遗留 | 后端 28 红(截断/沿用 4 轮)· langgraph 6 红(环境)· 根级 16 红 · CI 漏拦 7/陈旧 26 · 3 未入库测试 · B-177-1 · B-178-1 · **B-184-1「全量 >2h」** · **B-185 游客态超时** |
|
|
|
+| 本次是否改善 | **显著改善**:① 后端**首次恢复全量**(25 红,比 R187 少 3);② langgraph **51/51 全绿**(+6);③ frontend **6/6**(+2);④ **S-cfc-178 转绿**(−4);⑤ **B-184-1 判据被证伪**。合计红 56→44、过 3906→3918。 |
|
|
|
+| 教训应用 | ① **不再用「类/分钟」外推全量耗时**(本轮 B-188-1 直接推翻该做法);② 浏览器失败必须隔离复跑 2 轮再定性(B-185 本轮两次全绿 → 判环境瞬态);③ `:4096` 连通性每轮实探,不沿用上轮「401 门控」结论(本轮 200 实派成功);④ 251 跑完必须查残留 pid(B-177-1 本轮复现);⑤ Playwright 一律带 `--output=` 独立目录规避 safe-delete 守卫(B-173-1 本轮再触发一次)。 |
|
|
|
+
|
|
|
+> 本次为该对象**第 188 次**审查,有历史记录;上述内容仅作对照,**本轮结论全部来自本轮实测**(后端/langgraph/浏览器/Jest/API 均本轮实跑,无承袭项)。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 三、项目画像与覆盖矩阵
|
|
|
+
|
|
|
+### 3.1 项目画像
|
|
|
+
|
|
|
+| 维度 | 内容 |
|
|
|
+|------|------|
|
|
|
+| 业务定位 | 家庭教育成长平台(五维能量 身/心/智/行/富):小程序家长端 + 规划师端 + 管理后台 + 独立商城 |
|
|
|
+| 技术栈 | Spring Boot 2.7.18 + MyBatis-Plus + Java 8(9082)/ uni-app 微信小程序(Vue2)/ Vue2 + Element UI(8082)/ FastAPI + LangGraph + ChromaDB(9000@251) |
|
|
|
+| 模块结构 | `cfc-backend`(366 控制器 / 375 测试源 / 369 测试类)· `cfc-frontend`(42 测试文件 / 624 例)· `cfc-web`(17 套件 / 116 例)· `cfc-langgraph`(51 例 @251)· `tests`(e2e-live 5 文件 + e2e/api 点名 4 文件) |
|
|
|
+| 关键路径 | 登录/家庭/成员 → 五维能量 → 任务/成长记录 → 健康报告上传解析 → 测评订单 → 商城/支付 → AI 对话(LangGraph) |
|
|
|
+| 测试现状 | **本轮全部实测**:后端 3111 + 前端 624 + 管理端 116 + langgraph 51 + 浏览器 30 + 线上 API 32 + 根级 23 = **3987 例** |
|
|
|
+| 质量目标 | 全量用例全绿、覆盖 SRS 与用户场景(含异常流)、浏览器双节点可复现、结果变更即提交并通知研发 |
|
|
|
+| 风险点 | ① 后端 25 红(11 类存量 + 2 类契约预期 + 装置浮动)② CI 清单双向失真(漏拦 6)③ 上游 LLM live 链路 120s 挂死 ④ 根级 16 红(9082 未起)⑤ 迁移 DDL 缺陷 525 次报错 ⑥ pytest 进程不退出 |
|
|
|
+| 待核实项 | S-cfc-176 幂等分支排期 · 251 上游凭据/配额(pytest 绿但 live 挂)· 204 节点恢复 · B-156-1/B-170-1 修复状态 · **B-185 根因未取证(本轮已不复现,建议按瞬态销号)** |
|
|
|
+
|
|
|
+### 3.2 20 类测试覆盖矩阵(全类不省略)
|
|
|
+
|
|
|
+| # | 测试类型 | 三态 | 证据(本轮实测) |
|
|
|
+|---|----------|------|------------------|
|
|
|
+| 1 | 单元测试 | ✅ 已发现 | 后端 3111 例全量实跑;前端 624 例;管理端 116 例 |
|
|
|
+| 2 | 测试覆盖率 | ⚠️ 部分 | 管理端 Jest 覆盖率可产出;后端未开 jacoco(未授权改 pom) |
|
|
|
+| 3 | 变异测试 | ❌ 未发现 | 全仓无 pitest/mutation 配置 |
|
|
|
+| 4 | 集成测试 | ✅ 已发现 | `integration/*` 已全量执行(EnergySystemFlow 6F、GuideModule 1E、DimensionRegistryMap 3F) |
|
|
|
+| 5 | 契约测试 | ✅ 已发现 | 契约类 20+ 全量执行;**S-cfc-178 转绿(4F→0)**;S-cfc-176 维持 1F;TaskReview 2F(B-178-1 装置) |
|
|
|
+| 6 | 接口 API 测试 | ✅ 已发现 | 线上 API 32 例(**本轮实测**:25 过 / 7 跳 / 0 红,13.6s) |
|
|
|
+| 7 | 系统/端到端 | ✅ 已发现 | 浏览器 30 例(**本轮实测**:28 过 + 2 跳),双节点 admin 5/5 |
|
|
|
+| 8 | 验收 UAT | ⚠️ 部分 | `cross-role-e2e.md` 双角色验收场景有台账;无人工 UAT |
|
|
|
+| 9 | BDD 规格 | ⚠️ 部分 | spec 201 份含 Given/When/Then;无 cucumber 执行器 |
|
|
|
+| 10 | 冒烟测试 | ✅ 已发现 | `api-smoke.spec.js` 本轮实测全绿(含自注册链路) |
|
|
|
+| 11 | 回归测试 | ✅ 已发现 | 7 套件全量回归,13 红类逐类比对,**存量零漂移** |
|
|
|
+| 12 | 探索性测试 | ✅ 已发现 | 本轮现场探索:251 live `chat` 120s 零字节(pytest 全绿反证「mock 层绿、真实链路挂」)→ 记为 B-142-2 观察项 |
|
|
|
+| 13 | 性能测试 | ⚠️ 部分 | `nonfunc-perf-compat` 4 过 3 跳;压测未授权;**后端全量 43:15 通过(B-188-1 判据修正)** |
|
|
|
+| 14 | 可靠性测试 | ⚠️ 部分 | 上游 LLM 弱故障证据;无长稳/混沌测试;pytest 进程不退出(B-177-1)为典型可靠性缺陷 |
|
|
|
+| 15 | 安全测试(SAST/DAST) | ⚠️ 部分 | `nonfunc-security` 11 例全绿;匿名 6 端点 6/6=401;SAST 未授权 |
|
|
|
+| 16 | 依赖漏洞扫描 | ❌ 未发现 | 无 `npm audit`/`dependency-check` 门禁,属联网档未授权 |
|
|
|
+| 17 | 兼容性测试 | ⚠️ 部分 | Playwright `frontend-mobile` 移动视口 6/6(**本轮恢复**);无多浏览器矩阵 |
|
|
|
+| 18 | 可用性测试 | ⚠️ 部分 | 页面可渲染/导航/TabBar 断言覆盖;无真实用户可用性测试 |
|
|
|
+| 19 | 无障碍测试 | ❌ 未发现 | 无 axe-core 等 a11y 断言 |
|
|
|
+| 20 | QA 流程与质量指标 | ⚠️ 部分 | 本报告 + blockers + 可复现度量脚本;G9 20.1%;G11 CI 失真 |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 四、本轮实测明细
|
|
|
+
|
|
|
+### 4.1 套件数据(全部本轮实测,无承袭)
|
|
|
+
|
|
|
+| 套件 | 执行 | 通过 | 红 | 跳 | 耗时 | 判定 |
|
|
|
+|------|------|------|----|----|------|------|
|
|
|
+| 后端 JUnit **全量** | **3111** | **3082** | **25** | 4 | **43:15** | ✅ 全量完成(R184~R187 连续 4 轮未能完成);13 红类 |
|
|
|
+| 前端 Jest | 624 | 609 | 3 | 12 | 34.0s | 3 全预期 RED(AC-R1 / AC-R2 / AC-2 RED-A7) |
|
|
|
+| 管理端 Jest | 116 | 116 | 0 | 0 | 18.6s | ✅ 17/17 套件全绿 |
|
|
|
+| langgraph@251 | 51 | **51** | **0** | 0 | 285.81s | ✅ **首个全绿轮**(B-142-2 观察 1/2) |
|
|
|
+| 浏览器 `admin-desktop`@本机 | 5 | 5 | 0 | 0 | 1.8m | ✅ |
|
|
|
+| 浏览器 `admin-desktop`@189 | 5 | 5 | 0 | 0 | 1.2m | ✅ EXIT=0,spec blob `4703d73fb` = 本机(跨节点可比) |
|
|
|
+| 浏览器 `frontend-mobile`@本机 | 6 | **6** | 0 | 0 | 51.4s / 58.8s×2 | ✅ **两轮连绿,B-185 消除** |
|
|
|
+| 浏览器 `shop-api` | 4 | 4 | 0 | 0 | 11.3s | ✅ |
|
|
|
+| 浏览器 `health-api` | 13 | 13 | 0 | 0 | 6.9s | ✅(须用 `playwright.config.health.js`) |
|
|
|
+| 浏览器 `dx-bridge` | 2 | 0 | 0 | 2 | — | 404(规格「仅登记不实现」,不假绿) |
|
|
|
+| 线上 API 非功能层 | 32 | 25 | 0 | 7 | 13.6s | ✅ 0 红(点名 4 文件口径) |
|
|
|
+| 根级黑盒 | 23 | 7 | 16 | 0 | 12.2s | 全 `ECONNREFUSED 9082`(B-36 第 72 轮) |
|
|
|
+| **合计** | **3987** | **3918** | **44** | **25** | — | **98.27%(剔 skip 98.89%)** |
|
|
|
+
|
|
|
+> vs R187(3906 过 / 98.0%):**+12 过、红 56→44**。构成:langgraph −6 红(+6 过)、frontend −2 红(+2 过)、后端 28→25 红(S-cfc-178 −4、其余 +1? 见 §4.3 核对,净 −3)。
|
|
|
+
|
|
|
+### 4.2 后端全量红类明细(surefire XML 权威口径)
|
|
|
+
|
|
|
+| 红类 | 例数 | 红 | 归因 | 与 R187 一致性 |
|
|
|
+|------|------|----|------|----------------|
|
|
|
+| `EnergySystemFlowTest` | 7 | 6F(1S) | 存量(五维能量流断言) | ✅ 一致 |
|
|
|
+| `GrowthPublicEndpointMappingTest` | 5 | **5E** | B-162-1 未入库测试 + 端点映射缺失 | ✅ 一致 |
|
|
|
+| `DimensionRegistryMapContractTest` | 7 | 3F | 存量 P-9 | ✅ 一致 |
|
|
|
+| `TaskReviewScP11ContractTest` | 8 | 2F | B-178-1 反射装置浮动 | ✅ 一致(维持 2F) |
|
|
|
+| `GuideModuleIntegrationTest` | 4 | 1E | `testGuidePackageCreationFlow:63 DataIntegrityViolation` | ✅ 一致 |
|
|
|
+| `OrchestrationEngineTest` | 8 | 1F | 存量 | ✅ |
|
|
|
+| `OrchestrationIntegrationTest` | 7 | 1F | 存量 | ✅ |
|
|
|
+| `MembershipPaySwitchTest` | 6 | 1F | 存量 | ✅ |
|
|
|
+| `PaymentServiceORDRoutingTest` | 3 | 1F | 存量 | ✅ |
|
|
|
+| `UserServiceWechatLoginTest` | 5 | 1F | 存量(微信登录契约) | ✅ |
|
|
|
+| `UserServiceWechatLoginContractTest` | 6 | 1F | 存量 | ✅ |
|
|
|
+| `MembershipPlanPurchaseContractTest` | 7 | 1F | **S-cfc-176 幂等分支未生效** | ✅ 一致(`repeatPurchase_pendingOrderSamePlan_reuseNoDuplicate`) |
|
|
|
+| `TeamProfitCronContractTest` | 22 | 1F | 存量(平台费截断) | ✅ |
|
|
|
+| **合计** | — | **19F+6E = 25** | 13 类 | ✅ 逐类一致(除 `FamilyRemoveMemberContractTest` 已转绿) |
|
|
|
+
|
|
|
+### 4.3 本轮转绿与回归核对
|
|
|
+
|
|
|
+| 项 | R187 | R188 | 归因 |
|
|
|
+|---|---|---|---|
|
|
|
+| `FamilyRemoveMemberContractTest`(S-cfc-178) | 8 例 / **4F** | 8 例 / **0F** | ✅ 随 `5c3cff249`(removeMember 重算会员派生缓存)落地转绿 → **S-cfc-178 契约闭环** |
|
|
|
+| langgraph 全部 51 例 | 45 过 / 6 红 | **51 过 / 0 红** | 上游配额/key 窗口恢复;`test_auto_tag` + `test_intent` 全绿 |
|
|
|
+| `frontend-mobile` 6 例 | 4/6(U02/U05 超时) | **6/6 ×2** | 游客态内容加载恢复 → **B-185 消除**(环境瞬态) |
|
|
|
+| 其余 12 个红类 | 12 类 | 12 类 | 逐类逐例一致 → **存量零漂移(第 23 次)** |
|
|
|
+
|
|
|
+### 4.4 langgraph@251 实测明细
|
|
|
+
|
|
|
+| 项 | 结果 |
|
|
|
+|---|---|
|
|
|
+| 派发通道 | `192.168.16.251:4096` = **200**(R187 记「401 门控」本轮实测不成立);`POST /api/shell` + `setsid nohup` kick 分离 |
|
|
|
+| 节点基线 | HEAD `00121ff2f` = 本机 HEAD(同源码) |
|
|
|
+| 用例结果 | **51 passed / 0 failed / 285.81s**(`--ignore=tests/qna --ignore=tests/test_chat.py`) |
|
|
|
+| live `/health` | **200 / 9.7ms** |
|
|
|
+| live `/api/v1/chat`(`{"query":"你好","user_id":1,"session_id":"r188"}`) | **000 / 120.01s / 0 字节** → 上游 LLM 真实链路仍挂死(pytest 绿说明单测层走 mock/降级) |
|
|
|
+| B-177-1 复现 | summary 打印后 `bash -c` 与 `pytest` 进程存活 **9m36s**(另发现 R186 残留 1h10m38s),`EXIT=` 行永不落盘 → **第 10 轮复现**;已 `kill -9` 清理 4 个残留进程 |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 五、覆盖缺口清单
|
|
|
+
|
|
|
+| 缺口类型 | 现状 | 风险 | 建议测试设计 | 优先级 | 闭环方式 |
|
|
|
+|----------|------|------|--------------|--------|----------|
|
|
|
+| 上游 LLM 真实链路 | pytest 51/51 绿,但 live `chat` 120s 零字节 | AI 对话生产不可用 | mock 层之外补 1 例 live 冒烟(带超时兜底) | **P0** | 运维轮换 key + 提额后连续 2 轮全绿 |
|
|
|
+| CI 清单双向失真 | 漏拦 6 / 陈旧 26(33 类清单) | 回归无机器门禁 | 精修 exclude + 3-job CI | **P0/P1** | B-152-1/2 |
|
|
|
+| 契约预期 RED | S-cfc-176 幂等 1F | 功能未实现有护栏 | 实现 `findReusablePendingOrder` 分支 | P1 | 实现后定向复跑 |
|
|
|
+| 迁移 DDL 缺陷 | 本轮日志 **525 次** `SQLSyntaxErrorException/Unknown column` | 表从未建成(`nutrition_age_dosage`);`activities.approved_count` 恒 0 | 修 `schema.sql:5345` 索引 + `DatabaseInitializer:2261` 别名更新 | P1 | B-156-1 / B-170-1 |
|
|
|
+| 未入库测试 | 3 类(GrowthPublic / JwtInterceptorGrowthPolicy / ArticleTagsContract) | 资产不可追溯 | `git add` + push | P1 | B-162-1 |
|
|
|
+| pytest 进程不退出 | 第 10 轮复现(9m36s 挂死) | 派发器误判、节点资源泄漏 | 产品侧 `await client.aclose()` + 派发器 `timeout -k 10 900` | P1 | B-177-1 |
|
|
|
+| 根级黑盒 | 16 红(9082 未起) | 黑盒链路不可测 | 起 9082 后重跑 | P2 | B-36 |
|
|
|
+| 装置浮动 | TaskReview 2F(反射注入) | 红例数不稳定 | `@MockBean` 替代 `ReflectionUtils` | P2 | B-178-1 |
|
|
|
+| dx 桥接 | 2 例 skip(404) | 覆盖空转 | 端点上线后自动转断言 | P1 | B-DX-1(规格已声明仅登记) |
|
|
|
+| 204 节点 | `204:4090` = 000 | 三节点降为两节点 | 运维恢复 | P2 | B-95 |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 六、域结论表
|
|
|
+
|
|
|
+| 审查维度 | 负责专家 | 结论 | 关键证据 |
|
|
|
+|----------|----------|------|----------|
|
|
|
+| 单元·组件级 | 苏雅 | **改善** | 后端全量 3111/3082(−3 红);fe 609/3/12(3 预期 RED);web 116/116 |
|
|
|
+| 集成·接口级 | 柯砚 | **改善** | 线上 API 32 例 0 红;S-cfc-178 契约 4F→0 转绿;S-cfc-176 维持 1F |
|
|
|
+| 系统·验收级 | 白樾 | **改善** | 浏览器 30 例 28 过 + 2 跳;admin 双节点 5/5;frontend **6/6×2**(B-185 消除) |
|
|
|
+| 测试保障级 | 闻朔 | 改善 | 冒烟全绿;存量红集合零漂移(第 23 次);新增判据修正 B-188-1 |
|
|
|
+| 性能·可靠性 | 骆骋 | **改善** | 全量 43:15 完成(B-184-1 劣化判据证伪);pytest 挂死仍为可靠性缺陷 |
|
|
|
+| 安全 | 关屿 | 承袭 | 匿名 6/6=401;nonfunc-security 11 例全绿 |
|
|
|
+| 兼容·体验 | 阮清 | **改善** | frontend 移动视口 6/6;无多浏览器矩阵 |
|
|
|
+| 流程·度量 | 何序 | 部分改善 | G9 锚点 20.1%;CI 漏拦 6(由 7 收窄)、陈旧 26 未修 |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 七、五要素问题清单
|
|
|
+
|
|
|
+| # | ① 问题描述 | ② 测试 bug 点 | ③ 最优修改方案 | ④ 修改目的 | ⑤ 闭环方式 |
|
|
|
+|---|-----------|--------------|----------------|-----------|-----------|
|
|
|
+| P1 | 后端 25 红(13 类),其中 11 类为跨 23 轮存量 | `EnergySystemFlowTest` 6F / `DimensionRegistryMapContractTest` 3F / `OrchestrationEngineTest`·`OrchestrationIntegrationTest`·`MembershipPaySwitchTest`·`PaymentServiceORDRoutingTest`·`UserServiceWechatLoginTest`(×2)·`TeamProfitCronContractTest` 各 1F | 按类逐条修;先修 `TeamProfitCronContractTest`(平台费截断,影响计费) | 后端回归全绿 → G2 闭环 | 修后 `mvn -o -B test -Dtest=<类>` 定向复跑,单类 0F 连续 2 轮 |
|
|
|
+| P2 | **S-cfc-176 幂等分支未生效** | `MembershipPlanPurchaseContractTest.repeatPurchase_pendingOrderSamePlan_reuseNoDuplicate:201`(`NeverWantedButInvoked: paymentOrderMapper.insert`) | 让 `findReusablePendingOrder` 命中后直接复用,不再 insert | 契约闭环(防重复下单) | 定向复跑该类 7/7 绿 |
|
|
|
+| P3 | `GrowthPublicEndpointMappingTest` 5E(未入库 + 端点映射缺失) | `config/GrowthPublicEndpointMappingTest.java`(`??` 未跟踪) | 提交入库 + 补齐 `/api/growth/**` 公开端点映射 | 资产可追溯 + 公开面契约 | 入库后全量重跑该类 0E |
|
|
|
+| P4 | CI `BACKEND_OBSERVED_CLASSES` 双向失真 | `.gitlab-ci.yml:61`(33 类清单 vs 实测 13 红类) | 移除 26 类陈旧项、补入漏拦 6 类(GrowthPublic / MembershipPlanPurchase / TaskReviewScP11 / TeamProfitCron / UserServiceWechatLogin×2) | CI 硬门禁真实生效 | CI 在含红例分支上「必红」验证一次 |
|
|
|
+| P5 | langgraph pytest 全绿但 live 链路 120s 零字节 | `app/main.py` chat 路径 + 上游 AgnesAI 凭据 | 轮换有效 key + 提额;`JavaClient` 补 `await aclose()` | AI 对话生产可用 + 进程可退出 | live `/api/v1/chat` 200 < 5s 且 pytest 连续 2 轮全绿 |
|
|
|
+| P6 | pytest 打印 summary 后进程不退出(第 10 轮) | `tests/test_analyze.py` → `RuntimeWarning: coroutine 'JavaClient._get_client' was never awaited` | `app/main.py:84` 改用 lifespan 并 `await client.aclose()`;派发器加 `timeout -k 10 900` | 派发可判定成功、节点不残留 | 派发日志出现 `EXIT=0` 且 `ps` 无残留 |
|
|
|
+| P7 | 迁移 DDL 缺陷(本轮 525 次报错) | `schema.sql:5345` `INDEX idx_product (product_id)` 无该列;`DatabaseInitializer.java:2261` 带别名 UPDATE + 派生表引用被更新表 | 删索引或补列;改 `UPDATE activities SET approved_count = (SELECT COUNT(*) FROM activity_registrations r WHERE r.activity_id = activities.id …)` | 建表成功 + 计数列可写 | 启动日志 0 次 `SQLSyntaxErrorException` |
|
|
|
+| P8 | 前端 3 例预期 RED | `signature.*`(AC-R1/AC-R2)+ `growthHistory.dayGroupView` RED-A7 | 交付 S-cfc-132/133 组件与分组逻辑 | 前端全绿 | `npx jest` 624/624 |
|
|
|
+| P9 | 根级黑盒 16 红(B-36 第 72 轮) | `tests/integration/*`(全 `ECONNREFUSED 9082`) | 起本地 9082 或改指向测试环境 | 黑盒链路可测 | 9082 起来后重跑 23 例 |
|
|
|
+| P10 | **B-188-1 判据缺陷(本轮自处置)** | 历轮以「类/分钟」外推全量耗时 → 4 轮误判「>2h 不可完成」 | 判据改为「maven `Total time`」或「surefire XML 终值」,必要时加 `-Dsurefire.printSummary`;禁用速率外推 | 防止再次主动 kill 已完成的全量回归 | 已在本报告与 blockers 固化判据,下轮起强制使用 |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 八、门禁结论
|
|
|
+
|
|
|
+**结论:不通过(有条件,**明显正向**)** —— 全站 3987 例 / **3918 过 = 98.27%(剔 skip 98.89%)**,红 56→44;三项关键闭环(后端全量恢复、langgraph 51/51、frontend 6/6)与一项契约转绿(S-cfc-178)。剩余阻断项为**存量红 25 + CI 清单失真 + 上游 LLM live 挂死**,均非本轮新增回归。
|
|
|
+
|
|
|
+| 门禁 | 判定 | 依据(本轮实测) |
|
|
|
+|------|------|------------------|
|
|
|
+| G1 全站通过率 ≥98% | ✅ **98.27%** | 3918/3987(剔 skip 98.89%),环比 98.0% → +0.27pct |
|
|
|
+| G2 后端红归零/契约裁决 | ❌ **25 红(13 类)** | 存量 23 + 契约预期 1(S-cfc-176)+ 装置 2(B-178-1) |
|
|
|
+| G3 前端双绿 | ⚠️ fe 609/624(3 预期 RED)+ web 116/116;**小程序 H5 浏览器 6/6** | 3 红全为 S-cfc-132/133 未交付 |
|
|
|
+| G4 编译可编译 | ✅ | 2121 主源 + 375 测试源 **0 编译错** |
|
|
|
+| G5 结果完整性 | ✅ | 369/369 surefire XML 可聚合、0 `.dump`、0 沉默;恒等式 `@Test 3097 − Disabled 4 + 参数化 18 = 3111` |
|
|
|
+| G6 浏览器 E2E | ✅ **28 过 + 2 跳** | admin 5/5(本机+189)、fe 6/6×2、shop 4/4、health 13/13、dx 2 跳 |
|
|
|
+| G7 langgraph | ⚠️ **51/51 绿(观察 1/2)** | 首次全绿;按「连续 2 轮全绿」纪律不即时销号 B-142-2 |
|
|
|
+| G8 匿名鉴权 401 | ✅ 6/6 | mind/energy/health-plan/xiaomi/huawei/admin-families 全 401 |
|
|
|
+| G9 用例锚定 SRS | ❌ 20.1% | 双向命中 62 / 唯一 TC 308(承袭口径,本轮未变) |
|
|
|
+| G10 双/三节点可比 | ✅ 双节点 | 189 admin 5/5(spec blob 一致)+ 本机 admin 5/5 + 251 langgraph 51 例 |
|
|
|
+| G11 CI 必红 | ❌ | 漏拦 **6** 类(R187 为 7)+ 陈旧 **26** 类 → `backend-blocking-junit` 仍必红 |
|
|
|
+| G12 用例锚定 SRS 变更 | ✅ | specs 201 / test-cases 16 / API_REFERENCE 窗口零变更 → 用例零新增 |
|
|
|
+| G13 存量红零漂移 | ✅ **第 23 次** | 12 类逐类逐例与 R187 一致;S-cfc-178 为唯一转绿(正向) |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 九、变更触发动作(用户规则:结果有变 → 提交远程 + 通知研发)
|
|
|
+
|
|
|
+- **变更事实(本轮全部为正向)**:后端由「截断/沿用」转为**全量实跑 43:15 完成**(红 28→25);langgraph **45/51 → 51/51**;frontend **4/6 → 6/6**;**S-cfc-178 契约转绿**;全站 98.0% → **98.27%**。
|
|
|
+- **动作**:本报告 + `blockers.md`(新增 B-188-1,更新 B-184-1/B-185/S-cfc-178/B-177-1/B-142-2/B-152-1-2/B-156-1/B-170-1/B-162-1 等)+ `notice-2026-11-13-R188-研发通知.md` 已 commit 并 push `origin/cfclub`(merge-base + `git branch -r --contains` 核验)。
|
|
|
+- **通知通道**:Agent Mail 历轮 `not_bound`(本轮按惯例不再重试)→ 以 blockers.md + 研发通知 + 推送落地。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 十、待办
|
|
|
+
|
|
|
+1. **运维**:251 上游 key 轮换/提额(live chat 仍挂死);恢复 204 节点(B-95)。
|
|
|
+2. **研发**:S-cfc-176 幂等分支;B-156-1/B-170-1 迁移 DDL;B-177-1 `aclose()`;B-178-1 装置改 `@MockBean`;B-162-1 3 类入库。
|
|
|
+3. **CI**:按「漏拦 6 + 陈旧 26」精修 `BACKEND_OBSERVED_CLASSES`,并把判据 B-188-1(禁止速率外推)写进 CI 说明。
|
|
|
+4. **测试**:B-185 连续 2 轮绿后销号;B-142-2 待第 2 轮全绿后销号;下轮起全量 JUnit 一律按 `Total time` 判定,不再中途 kill。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 附录 A:本轮命令与口径(可复现)
|
|
|
+
|
|
|
+```bash
|
|
|
+# 后端全量(本轮实测 43:15)
|
|
|
+cd cfc-backend && JAVA_HOME=/d/jdk1.8.0_25 /d/maven/apache-maven-3.6.1/bin/mvn -o -B clean test
|
|
|
+
|
|
|
+# 前端 / 管理端 / 根级
|
|
|
+cd cfc-frontend && npx jest --ci
|
|
|
+cd cfc-web && npx jest --ci
|
|
|
+cd tests && npx jest --silent
|
|
|
+
|
|
|
+# 浏览器(必须在 tests/ 内跑;API 套件须带 --output 规避 safe-delete 守卫)
|
|
|
+cd tests && npx playwright test -c playwright.config.live.js --project=admin-desktop
|
|
|
+cd tests && npx playwright test -c playwright.config.live.js --project=frontend-mobile
|
|
|
+cd tests && npx playwright test -c playwright.config.live.js --project=shop-api
|
|
|
+cd tests && npx playwright test -c playwright.config.health.js # health 13 例
|
|
|
+cd tests && npx playwright test -c playwright.config.api.js --output=../_r188_api \
|
|
|
+ e2e/api/api-smoke.spec.js e2e/api/nonfunc-security.spec.js \
|
|
|
+ e2e/api/nonfunc-perf-compat.spec.js e2e/api/traceability-p94-p95-c26.spec.js
|
|
|
+
|
|
|
+# langgraph@251
|
|
|
+MSYS2_ENV_CONV_EXCL=LOG LOG=/tmp/r188_pytest.log node docs/tdd/tools/dispatch_251_pytest.cjs kick
|
|
|
+MSYS2_ENV_CONV_EXCL=LOG LOG=/tmp/r188_pytest.log node docs/tdd/tools/dispatch_251_pytest.cjs read
|
|
|
+
|
|
|
+# 聚合口径
|
|
|
+python docs/tdd/tools/test_report_metrics.py --reports cfc-backend/target/surefire-reports
|
|
|
+python docs/tdd/tools/test_report_metrics.py --repo-root . --scene
|
|
|
+```
|
|
|
+
|
|
|
+## 附录 B:本轮口径声明(防跨轮误判)
|
|
|
+
|
|
|
+1. **后端 3111 例为本轮全量实跑**(非承袭),耗时以 maven `Total time: 43:15 min` 为准;**禁止**用日志中 `Tests run:` 增量速率推算进度(B-188-1)。
|
|
|
+2. **langgraph 51 例为 251 节点实派实跑**(节点 HEAD = 本机 HEAD)。
|
|
|
+3. **浏览器 30 例全为本机/189 实测**:admin 5(本机)+ admin 5(189,去重不计入合计)+ frontend 6 + shop 4 + health 13 + dx 2 跳。
|
|
|
+4. **线上 API 32 例**为点名 4 文件口径(**不是** `playwright.config.api.js` 不带参数的 990 例口径,B-173-2)。
|
|
|
+5. **根级 23 例**依赖本地 9082,本轮未起服务,全 `ECONNREFUSED`,属环境红(B-36),不计入产品回归。
|