report-test-2026-11-10-R116.md 23 KB

测试负责人闭环汇报 · 第 116 轮(2026-11-10 05:40)

汇报轮次:CFC 闭环自动化测试 · 第 116 轮(测试负责人角色,自动化无人值守) 执行档:review(离线) — 白名单内离线套件 + 已授权内网只读 E2E(cfc.iwintrue.com)+ 节点派发(251 / 189) 仓库:D:/cfc;分支 cfclub;基线 HEAD 703e865fd(= origin/cfclub,跑前 git fetch 零新提交) 执行窗口:04:26 → 05:40(后端全量 43:19 串行;其余套件错峰串行) 团队:本轮为自动化闭环轮,八域结论由测试负责人依据实测证据汇总(未启用分布式成员会签),不代写任何成员未产出的结论


一、历史审查记录(阶段 -1 记忆召回)

项 内容
上次审查 第 115 轮(2026-11-10 04:16),结论「不通过(有条件)」
历史遗留缺口 B-112(S-cfc-130 bridgeWrite,已闭环)、B-113(189/251 派发通道,已闭环)、B-69(mind 鉴权)、B-65/B-74/B-82/B-90(langgraph)、B-36(根级黑盒)、B-95(204 失联)、B-114(HL-05 覆盖,后端✓前端/E2E缺)
本次是否改善 B-112/B-113 闭环状态维持(251 实派 pytest 73.4s 取回 43/32/11);无新闭环;B-69/B-65/B-74/B-82/B-90 均未修;新增 B-116(189 本轮 session 派发超时)
声明 历史结论仅作对照,本轮全部数字均为重新取证

二、项目画像(阶段 0 增量)

维度 现状(本轮实测/只读扫描)
业务定位 家庭教育成长平台:家长/孩子/规划师/供应商/运营五端 + 五维能量体系 + 健康报告解析 + 商城分佣
技术栈 cfc-backend Spring Boot 2.7.18 + MyBatis-Plus(JDK8,端口 9082);cfc-frontend uni-app;cfc-web Vue2+Element(8082);cfc-langgraph FastAPI+LangGraph(9000,@251);dan/danshop(8888,方案外)
规模 @RestController 363;测试文件 339;@Test 2854;Playwright spec 96
关键路径 登录/JWT → 家庭与成员 → 五维测评与健康方案 → 健康报告上传解析 → 商城下单分佣 → 管理端审核
本轮窗口变更 零生产提交(04:24 703e865fd 起 0 提交;04:22 46cb414fd 为 R115 测试闭环提交)。docs/superpowers/specs 零变更(200 份);tests/test-cases 零新增(R115 的 health-datasource-bridge.md 已入库)
质量目标(用户口径) ① 全部用例通过;② 覆盖全部 SRS 与用户场景(含异常流);③ SRS/场景变更时更新用例

三、测试覆盖矩阵(20 类 · 三态)

# 类型 状态 证据
1 单元测试 已发现 339 测试类、@Test 2854,本轮实跑 2864 例
2 测试覆盖率 未发现 pom.xml 无 jacoco(grep -c jacoco = 0),无覆盖率产物
3 变异测试 未发现 无 pitest/mutation 配置
4 集成测试 已发现 com.etotem.cfc.integration.**(EnergySystem / GrowthRecordSync / GuideModule / DimensionScore 等)
5 契约测试 已发现 HealthDataSourceBridge 16/16、HealthPlanProductSelection 14/14、UserServiceWechatLogin、JwtInterceptor 31 例等;DimensionRegistryMapContractTest 3 红(P-9 第 5 轮)
6 接口 API 测试 已发现 tests/e2e-live/*.spec.js 接口契约 17 例(shop 4 + health 13),线上实探
7 系统/端到端 已发现 浏览器 28/28(admin 5 + frontend 6 + shop 4 + health 13);189 本轮派发未取回(B-116)
8 验收 UAT 待核实 无 UAT 脚本/签署记录产物
9 BDD 规格 未发现 无 .feature
10 冒烟测试 已发现 tests/e2e/ci-smoke.spec.js、_smoke_browser.spec.js
11 回归测试 已发现 本轮全量 3500 例串行回归(后端 43:19 + 其余)
12 探索性测试 未发现 无 charter/会话记录
13 性能测试 未发现 无 k6/JMeter 脚本(属 execute 档,未授权联网)
14 可靠性测试 待核实 无故障注入/长稳;B-90 挂起观测继续(本轮形态漂移,见 §5.8)
15 安全测试(SAST/DAST/SCA) 未发现 无产物;仅鉴权契约 + 线上 401 探针;B-69 未修
16 兼容性测试 未发现 Playwright 仅 chromium;无多浏览器矩阵
17 可用性测试 未发现 无可用性任务/量表
18 无障碍测试 未发现 无 axe 扫描
19 质量指标 已发现 全量 98.06% / 后端 98.67% / E2E 100%,与 R115 完全一致(见 §5.2)
20 QA 流程与代码审查 已发现 @GetMapping 8 处违「统一 @PostMapping」;CI 无后端全量作业(G-6 延续)

四、测试方案与执行档(阶段 2–3)

项 内容
目标 ① 全部用例通过 ② SRS/场景覆盖可量化 ③ 变更即更新用例
范围 后端 JUnit 全量、前端/管理端 jest、根级 tests jest、langgraph pytest(派 251)、浏览器 E2E(本机 + 189)
排除项 dan/danshop(独立商城,方案外)、tests/test_chat.py(LLM 无超时不收敛 B-84)、tests/qna(收集期错误中断 B-15)
执行档 review:不联网装依赖、不启停服务、不改生产代码;本轮零测试装置改动
授权 用户指令已含内网 E2E 与节点派发授权;未申请 execute 档(压测/DAST 未执行,标注未实测)

五、实测结果

5.1 总账

套件 用例 通过 红 Skip 通过率 备注
后端 JUnit(cfc-backend) 2864 2826 34 4 98.67% 339 类;mvn -o -B clean test,43:19,BUILD FAILURE(仅测试红)
前端 jest(cfc-frontend) 426 423 0 3 100%(剔 skip) 26 suites,21.2s
管理端 jest(cfc-web) 116 116 0 0 100% 17 suites,27.7s
根级 tests jest 23 7 16 0 30.4% B-36 环境门控,零漂移
langgraph pytest @251 43 32 11 0 74.4% 70.72s,251 实派取回
合计(不含 E2E) 3472 3404 61 7 98.04% —
浏览器 E2E(独立计数) 28 28 0 0 100% 本机 live 15 + health 13

全量合计 3500 例 / 3432 过 = 98.06%(含 E2E)。

5.2 与上一实测基线对账(第 115 轮 3500/3432/98.06%)

指标 R115 R116 Δ
后端类数 339 339 0
后端用例 2864 2864 0
后端通过 2826 2826 0
后端通过率 98.67% 98.67% 0
后端红例 34 34 0
全量 3500 / 3432(98.06%) 3500 / 3432(98.06%) ±0

Δ 归因:测试窗口内零生产提交、零规格变更、零用例变更 → 全部套件与 R115 逐项一致,红例集合差集为空,零漂移,无意外退化亦无新闭环。

5.3 后端 34 红三层归因(与 R115 完全相同,零漂移)

类别 例数 分布
A 类 测试装置缺陷 16 CfCommissionServiceSettleTest 8、ArticleAutoTagServiceTest 4、GrowthRecordSyncFlowTest 3(1F+2E)、TaskPlanServiceTest 1
B 类 产品缺陷/契约未决 14 EnergySystemFlowTest 6、MindFortuneControllerTest 1(B-69)、OrchestrationEngineTest 1、OrchestrationIntegrationTest 1、MembershipPaySwitchTest 1、PaymentServiceORDRoutingTest 1、UserServiceWechatLoginContractTest 1、UserServiceWechatLoginTest 1、TeamProfitCronContractTest 1
C 类 数据/环境 1 GuideModuleIntegrationTest 1E(platform_fee Data truncation)
契约待裁决 3 DimensionRegistryMapContractTest 3(P-9 口径未决,第 5 轮)

5.4 浏览器 E2E(28/28 全绿)

套件 例数 结果 关键断言
admin-desktop(/admin,本机) 5 5/5 ✅(5.5/5.2/3.6/11.2/59.6s) 真实登录 + 滑块通过 + 菜单可访问
frontend-mobile(/frontend) 6 6/6 ✅ 首页/TabBar/未登录「我的」鉴权引导/零 requestfailed
shop-api(商城排序契约) 4 4/4 ✅(65~215ms) price asc/desc/默认/非法列白名单
health-contract 13 13/13 ✅(5.7s) 华为 5 + 小米 5 + 健康方案 3 端点未鉴权全 401(B-61 维持)

5.5 节点派发(251 ✅ / 189 本轮未取回)

节点 端口 状态 本轮结果
251 9000 /health 200(ok) —
251 4096 opencode 200 实派 pytest 取回 43/32/11(70.72s)——通道维持(B-113 闭环后连续第 2 轮成功)
189 4090 opencode 200 session 派发 35min 无实质产出(agent 卡在 shell 工具,见 B-116)→ admin 用例以本机 5/5 覆盖,不阻塞
204 4090 000 失联(B-95 第 6 轮)

5.6 线上可用性探针(只读)

探针 结果 判定
POST /api/mind/fortune(匿名) HTTP 200,body {"code":400,"message":"用户不存在"}(1.30s) ❌ B-69 第 15 轮:未入 LOGIN_REQUIRED_PATHS
POST /api/huawei-health/status(匿名) 401 ✅ B-61 维持
POST /api/health/plan/adjust(匿名) 401 ✅
251:9000 POST /api/v1/chat HTTP 422 / 7.4ms(入参校验层快速拒绝) ⚠️ B-90 形态漂移:R115 同参为 000/45s 挂起,本轮校验层先行 422 未穿透业务层;挂起未复证,但 B-65/B-74/B-82 的 11 红(251 实派)持续在案

5.7 SRS / 场景覆盖量化(口径写死在 docs/tdd/tools/test_report_metrics.py)

指标 数值
SRS 规格文件 200(本轮零变更)
用户场景 215;经 TC 映射 155(72.1%);被 spec 字面引用 32(14.9%)
结构化 TC 812(异常流 483 = 59.5%)
TC 有测试资产锚点 86 / 812 = 10.6%
测试资产扫描量 500

本轮用例更新:无(SRS/场景零变更;R115 新增的 health-datasource-bridge.md 使 TC 总数 793→812 已生效)。


六、覆盖缺口清单

缺口 类型 现状 风险 建议测试设计 优先级 闭环方式
G-1 覆盖缺口 TC 锚点 10.6%(86/812) 「设计有用例、脚本无绑定」→ 回归靠人工 按模块补 @DisplayName/spec 注释锚点,优先 P0 P1 锚点率 ≥40% 后纳入门禁
G-2 覆盖缺口 桥接 E-2/E-3(同步→overview 读分、indicators 展示)无 MockMvc 用例 桥接「写进去」有证据、「读出来」无证据 补 2 例 MockMvc 契约 P1 定向复跑全绿入台账
G-3 覆盖缺口 桥接 B-1/B-2 端点与前端绑定链路未实现 用户侧 D/X 价值不可用 实现后补 3 例接口 + 3 条 Playwright P2 实现落地后登记
G-4 覆盖缺口 根级黑盒 23 例 16 红(B-36 连续多轮零漂移) 接口层黑盒长期失效 改为可注入登录态 fixture 或显式 skip P1 0 红或全 skip 明示
G-5 工具缺口 覆盖率/变异/压测/SAST/依赖扫描全无 无法量化内部质量 引入 jacoco + pitest;k6/zap 需 execute 授权 P2 产物入库后纳入门禁
G-6 流程缺口 CI 仅 mvn test-compile + 前端 jest 后端 2864 例不在 CI CI 增 mvn -o test 作业(可先非阻塞) P1 pipeline 出现 Tests run 行
G-7 规范缺口 @GetMapping 8 处(违 AGENTS.md) 契约口径分裂 改 POST 或修订规范 P2 grep 归零
G-8 资产缺口 @Disabled 4 例 + tests/qna 收集期错误 静默失效 修或删 P2 收集期 0 error
G-9 派发缺口 189 本轮 session 通道派发无产出(B-116) 单节点复核失效 改 shell API 直连(参照 251 已验证的 dispatch_shell.cjs)+ 前置 git 状态清理 P1 189 实派 admin 5/5 取回

七、域结论表

审查维度 负责专家 结论 关键证据
单元·组件级 苏雅(unit-component) 不通过 2864 例 98.67%;34 红中 A 类 16(测试装置);覆盖率/变异未实测(无工具)
集成·接口级 柯砚(integration-interface) 不通过 契约桥接 16/16 + 产品多选一 14/14 绿;DimensionRegistryMapContractTest 3 红(P-9);根级黑盒 16 红(B-36)
系统·验收级 白樾(system-acceptance) 通过(E2E 维度) 浏览器 28/28;UAT/BDD 未实测(无资产)
测试保障级 闻朔(test-assurance) 有条件通过 冒烟/回归资产在;探索性无记录;回归全量可复现
性能·可靠性 骆骋(performance-reliability) 未实测 无压测工具/未授权联网;B-90 形态漂移(422 快速拒绝)待下轮复证
安全 关屿(security) 未实测(仅鉴权面) 鉴权契约 13/13;/api/mind/fortune 匿名 200(B-69 第 15 轮);SAST/DAST/SCA 无工具
兼容·体验 阮清(compatibility-experience) 未实测 仅 chromium 单浏览器;无 axe/可用性任务
流程·度量·代码 何序(process-metrics) 不通过 CI 无后端全量;TC 锚点 10.6%;@GetMapping 8 处违约定

八、五要素问题清单

P-1(P1 · A 类 · 16 例,连续第 2 轮)测试装置缺陷致红,掩盖真实回归信号

  • ① 问题描述:CfCommissionServiceSettleTest 8 例 WantedButNotInvoked、ArticleAutoTagServiceTest 4 例 execute 调用次数不符、GrowthRecordSyncFlowTest 3 例(1F+2E)、TaskPlanServiceTest 1 例。与 R115 完全一致,研发/测试两侧均未动。
  • ② 测试 bug 点:CfCommissionServiceSettleTest#settle_F03a发放_自动创建感恩记录 等 8 例;ArticleAutoTagServiceTest#toggleStatus_发布且标签为空_调度自动打标 等 4 例;GrowthRecordSyncFlowTest#parentUploadsHealthReport_Success(NPE 首帧在测试方法内)。
  • ③ 最优修改方案:CfCommission 8 例补档位查询桩;ArticleAutoTag 4 例把「未调度」断言改为 verify(executor, times(n)) 按生产口径对齐(或抽单点计数);GrowthRecordSync 3 例子 @BeforeEach 补齐 mock 依赖。
  • ④ 修改目的:把 16 例噪音从红例池剔除,使红例数直接反映产品缺陷。
  • ⑤ 闭环:定向复跑 4 类 0 红 → 全量红例由 34 降至 ≤18,且红类差集恰为这 4 类。

P-2(P0 · B 类 · 14 例,连续第 2 轮)产品缺陷/契约行为不一致

  • ① 问题描述:EnergySystemFlowTest 6 例 500/语义不符;Orchestration 2 例状态机期望不一致;MembershipPaySwitchTest、PaymentServiceORDRoutingTest、UserServiceWechatLogin* 2 例、TeamProfitCronContractTest 各 1 例。与 R115 完全一致。
  • ② 测试 bug 点:EnergySystemFlowTest#parentQueriesEnergyLogs_Success(expected 200 but 500)等;OrchestrationEngineTest#testOnTaskFailed_FoundNode_ThenMarkFailedAndEvaluateFlow;TeamProfitCronContractTest#refundWithinCooling_cancelAllRecordsFundsNotPaid。
  • ③ 最优修改方案:由研发按类复现——EnergySystem 查 500 堆栈最内层;Orchestration 对齐 task.status 写入口径;TeamProfitCron 按 §8.2 补冷却期退款取消逻辑。
  • ④ 修改目的:消除产品侧真实缺陷,使五维能量/编排/分佣主链路可信。
  • ⑤ 闭环:每类定向复跑 0 红 + 全量红例下降;EnergySystem 需附根因说明。

P-3(P1 · 契约 · 3 例,第 5 轮)DimensionRegistryMap 契约口径未决

  • ① 问题描述:map_unknownLegacy/emptyLegacy 期望 data=null 实返原值;map_missingLegacy 期望 400 实返 200。
  • ② 测试 bug 点:DimensionRegistryMapContractTest#map_unknownLegacy_returnsNullData 等 3 例。
  • ③ 最优修改方案:主理人裁定「未知码映射为 null」并同步改契约或实现;若维持实现则改用例断言并标注口径变更。
  • ④ 修改目的:终止「测试与实现对同一契约各说一套」的长期挂账。
  • ⑤ 闭环:裁定落地后 3 例转绿,automation-status.md 记录裁定条款。

P-4(P0 · 安全 · 第 15 轮)/api/mind/** 鉴权缺口

  • ① 问题描述:线上匿名 POST /api/mind/fortune → HTTP 200 + {"code":400,"message":"用户不存在"}(1.30s);单测 MindFortuneControllerTest#testGetTodayFortuneWithoutAuth 同源红。
  • ② 测试 bug 点:MindFortuneControllerTest#testGetTodayFortuneWithoutAuth。
  • ③ 最优修改方案:JwtInterceptor.LOGIN_REQUIRED_PATHS 增 /api/mind/;控制器内 @RequestAttribute 分支不变。
  • ④ 修改目的:成员私有数据不得匿名称谓探测(B-69 连续 15 轮)。
  • ⑤ 闭环:线上匿名返回 401 + 单测转绿。

P-5(P0 · AI 服务 · 第 8 次,形态漂移)251 chat/analyze 挂起与 checkpointer 缺 thread_id

  • ① 问题描述:test_analyze.py 2 例 assert 500 == 200(checkpointer 缺 thread_id);本轮 POST /api/v1/chat 由既往 000/45s 挂起漂移为 422 快速拒绝(校验层先行拦截,业务层未穿透);/api/v1/analyze 未穿透。
  • ② 测试 bug 点:tests/test_analyze.py::test_analyze_endpoint、::test_analyze_missing_report;探针 POST /api/v1/chat。
  • ③ 最优修改方案:① app/analyze.py ainvoke 传 config={"configurable":{"thread_id":...}} 或去掉 MemorySaver();② LLM/检索调用加 timeout+熔断;③ 复查 chat 入参校验与挂起边界(422 vs 挂起切换点)。
  • ④ 修改目的:AI 主链路可用性与可观测性。
  • ⑤ 闭环:251 实派 analyze 2 例绿 + POST /chat 30s 内返回 2xx/4xx(非 000 非 422 漂移)。

P-6(P1 · 环境/凭据 · 第 17 轮)langgraph test_auto_tag 5 例 + test_intent 4 例

  • ① 问题描述:test_auto_tag.py 5 例失败(251 侧 LLM 401,prompt_service:118 加载失败);test_intent.py 4 例 assert <Intent.CHAT>(意图分类 401 后静默降级 chat,intent_classifier.py:62)。
  • ② 测试 bug 点:tests/test_auto_tag.py::test_auto_tag_endpoint_responds 等 5 例;tests/test_intent.py::test_classify_analysis 等 4 例。
  • ③ 最优修改方案:251 注入有效 LLM 凭据;intent_classifier.py:62 异常时标记 UNKNOWN 上报而非静默降级。
  • ④ 修改目的:把「凭据缺失」与「分类错误」解耦。
  • ⑤ 闭环:251 实派 43 例 0 红。

P-7(P1 · 流程 · 延续)后端全量不在 CI,TC 锚点仅 10.6%

  • ① 问题描述:.gitlab-ci.yml 仅 mvn test-compile + 前端 jest;812 条 TC 仅 86 条有锚点。
  • ② 测试 bug 点:.gitlab-ci.yml(test 阶段无后端 mvn test);tests/test-cases/*.md 锚点缺失。
  • ③ 最优修改方案:新增 backend-test job(mvn -o -B test -Dmaven.test.failure.ignore=true 产 surefire 为 artifact,先非阻塞);用例补 @DisplayName。
  • ④ 修改目的:让「回归」变为提交即反馈。
  • ⑤ 闭环:pipeline 出现 Tests run: N;锚点率月度提升 ≥40%。

P-8(P1 · 派发 · 本轮新增)189 节点 session 通道派发 35min 无产出(B-116)

  • ① 问题描述:189:4090 端口 200、会话创建 200、prompt 200,但 35 分钟内无任何实质文本产出(agent 连续 shell 工具调用无结果回写,git pull ff-only 因本地分叉失败后继续)。
  • ② 测试 bug 点:opencode session ses_e3de7c5c6ffeeoL2CISyfAruqt(189);派发脚本 .tdd/_dispatch_189_admin_r116.py。
  • ③ 最优修改方案:189 改用 shell API 直连(dispatch_shell.cjs,cwd 传 Windows 路径,CMD 用 cmd 兼容写法);派发前对 189 仓库做 git fetch + reset --hard origin/cfclub(避免本地分叉导致 agent 卡在版本同步);或将「git pull 失败即继续」的降级路径前移到 prompt 显式说明。
  • ④ 修改目的:恢复双节点浏览器复核(G10),消除「单节点单任务」纪律下 189 空转占位。
  • ⑤ 闭环:189 实派 admin-desktop 5/5 取回(JSON 含 pass/fail 明细)即闭环;下轮以 shell 直连重派验证。

九、门禁结论

⛔ 不通过(有条件) —— 与 R115 完全一致:质量基线持平(零漂移,后端 98.67%、全量 98.06%),无新闭环、无新退化;但用户「全部用例通过」目标仍未达成,且 B-69(鉴权 P0)、B-65/B-74/B-82(AI 服务)连续 15~17 轮未修。

门禁 判据 实测 结论
G1 全量通过率 ≥98% 98.06%(后端 98.67%) ✅
G2 红例数 0 61(后端 34 + 根级 16 + langgraph 11) ❌
G3 前端 jest 全绿 423/426(3 skip,0 红) ✅
G4 管理端 jest 全绿 116/116 ✅
G5 后端编译完整性 0 错、无沉默 编译 0 错;339/339 类 XML 全产出、沉默 0 ✅
G6 浏览器 E2E 全绿 28/28(本机) ✅
G7 langgraph 0 红 32/43(11 红,251 实派) ❌
G8 鉴权契约 全绿 health 13/13 + /api/mind 1 红 ❌
G9 SRS 锚点 ≥40% 10.6%(86/812) ❌
G10 节点派发 双节点可派 251 ✅(pytest 实派取回)/ 189 ❌(本轮无产出,B-116) 部分
G11 CI 接入 含后端全量 仅 test-compile + 前端 jest ❌
G12 测试资产入库 变更已入库 本轮零变更(零生产提交,用例/规格零变更) ✅

放行建议:维持「不通过(有条件)」,可继续灰度,但 P-4(鉴权)、P-5/P-6(AI 服务)应在下一次发布前闭环;P-1(16 例装置)与 P-8(189 派发)建议本周内清理。

复评条件:G2 红例 ≤18(清 P-1)且 G8/G9 达标,可升「有条件通过(收紧)」;G10 恢复双节点后取消「部分」标注。


十、本轮产出与通知

项 路径
本报告 docs/tdd/orchestration/report-test-2026-11-10-R116.md
阻断库更新 docs/tdd/test/blockers.md(B-69/B-65/B-74/B-82/B-90/B-36/B-95 延续复证 + B-116 新增)
研发通知 docs/tdd/研发交接通知-2026-11-10-第116轮.md
测试用例更新 无(SRS/场景零变更,R115 新增用例已生效)
测试装置变更 零(本轮无 A 类修复)
证据(未入库) _r116_backend.log、_r116_agg.json、_r116_fe.log/_r116_web.log/_r116_root.log、_r116_e2e_live.log、_r116_e2e_health.log、_r116_251_pytest.log

通知通道:Agent Mail 未开通(历史 not_bound)→ 以仓库通知文档 + 推送 origin/cfclub 落地。