report-test-2026-11-10-R128.md 21 KB

测试负责人工作汇报 · 第 128 轮(2026-11-10 17:26~18:08)

执行档:review(内网 cfc.iwintrue.com 已授权;离线 mvn -o;未联网装依赖) 基线 HEAD:b6ed4af4a(= origin/cfclub,跑测期间分支/HEAD 未漂移;窗口内仅 docs/chore 提交,无源码变更) 分工:189=admin 浏览器套件|本机=frontend/shop/health 浏览器套件 + Jest + 后端全量|251=langgraph pytest|204=失联(B-95) 结论:⛔ 不通过(有条件) — 三项阻塞延续:G2 49 红 / G9 可执行锚点 9.9% / G11 无 CI 全量


1. 历史审查记录(仅作对照,不作为本轮结论依据)

轮次 时间 后端全量 langgraph 结论 遗留缺口
R123 11-10 13:30 2865 例 / 2828 过 / 98.71% / 33 红 43/42/1 不通过(有条件) G2 50 红、G9 17.1%、G11
R125 11-10 14:55 3501/3445=98.40%(引用上一轮后端) 43/43 全绿 不通过(有条件) G2 49、G9、G11
R127 11-10 17:30 2865 例 / 2828 过 / 98.71% / 33 红 43/43 全绿 不通过(有条件) G2 49、G9 9.9%、G11
R128(本轮) 11-10 18:08 2865 例 / 2828 过 / 98.71% / 33 红(与 R127 逐字段一致) 43/43 全绿 不通过(有条件) G2 49、G9 9.9%、G11
  • 本轮为该对象第 128 轮持续闭环审查,非首次。
  • 与 R127 对比:后端逐类逐例零漂移(2865/2828/33 红,红类集合完全一致:CfCommission 8 / EnergySystem 6 / ArticleAutoTag 4 / GrowthRecordSync 3 / DimensionMap 3 + 散例 9)→ 研发窗口内无后端源码变更(窗口内提交 b6ed4af4a 后仅 docs/chore)。
  • B-74(langgraph LLM 401)连续 2 轮未复现(R127、R128 均 43/43 全绿)→ 按纪律销号,需运维确认凭据状态后移除风险登记。
  • SRS / 用户场景 / 测试用例零变更(git log 窗口内无 hits)→ 按「变更才更新用例」纪律,本轮不新增/更新用例(合规,G12 ✅)。

2. 项目画像速览

  • 业务:浠艾福 XAF —— 家庭教育 SaaS(家庭成员/五维能量/成长规划师/健康报告/商城分佣/AI 管家)。
  • 技术栈:cfc-backend(Spring Boot 2.7.18 + MyBatis-Plus + Java 8,9082)· cfc-web(Vue2 + ElementUI,Jest 116 例)· cfc-frontend(uni-app H5/小程序,Jest 426 例)· cfc-langgraph(FastAPI + LangGraph + Chroma,9000)· dan/danshop(独立商城 8888)。
  • 关键路径:登录/家庭邀请 → 五维测评 → 成长任务 → 健康报告上传解析 → 商城下单分佣(CF)→ AI 对话。
  • 测试现状:后端 339 测试类 / 2865 例(全量可跑);前端 Jest 27 套件;浏览器硬契约 28 例;langgraph 43 例。
  • 质量目标:20 类全覆盖、G1≥95%、G2≤10 红、G6 28/28、G7 0 红、G9≥80%。
  • 风险点:后端 33 红中 14 例产品类未闭环;SRS 锚点率长期 <30%(B-124 口径未统一);无 CI 全量门禁;B-90 langgraph live chat 仍挂死。

3. 20 类测试覆盖矩阵(三态:已实测 / 未发现 / 待核实)

# 测试类型 状态 证据
1 单元测试 ✅ 已实测 后端 339 类 2865 例(surefire);web 116;fe 426
2 组件测试 ✅ 已实测 Vue shallowMount 组件用例(Families/AuditDetailDrawer 等 17+26 套件)
3 接口 API 测试 ✅ 已实测 后端 364 Controller 的 MockMvc/直调用例;线上 4 端点鉴权探针 401
4 集成测试 ✅ 已实测 integration.* 实跑(EnergySystem 6×500 / GrowthRecordSync 3 / GuideModule 1 / DimensionMap 3 红)
5 系统/端到端 E2E ✅ 已实测 浏览器 28/28(admin 5 / frontend 6 / shop-api 4 / health 13)
6 冒烟测试 ✅ 已实测 浏览器 28 例 + Jest 全绿即冒烟面
7 回归测试 ✅ 已实测 与 R127 后端逐字段零漂移;web/fe 零漂移;langgraph 43/43
8 探索性测试 ⚠️ 待核实 本轮只做定向探针(鉴权 4 端点 + langgraph live),无 chartered 探索会话
9 验收 UAT / BDD ⚠️ 待核实 无 BDD(cucumber/gherkin)执行证据
10 性能测试 ⛔ 未授权未执行 压测属 execute 档(需联网授权),本轮未做
11 可靠性测试 ⚠️ 待核实 无混沌/恢复演练;仅观察 B-90 挂死窗口
12 安全测试(SAST/DAST/SCA/渗透) ⛔ 未授权未执行 依赖漏洞扫描/DAST 需联网;仅剩静态项(见 §7 #10)
13 兼容性测试 ⚠️ 待核实 仅 Chromium 单浏览器;无 iOS/Android/多浏览器矩阵
14 可用性测试 ⚠️ 待核实 无真实用户可用性证据
15 无障碍测试 ⚠️ 待核实 无 axe/WCAG 扫描
16 覆盖率度量 ⚠️ 已实测(低) cfc-web 语句 10.09% / 分支 6.12% / 函数 7.50% / 行 9.97%(与 R127 一致);后端 JaCoCo 未接入
17 变异测试 ⛔ 未发现 无 PIT/mutation 资产
18 契约测试 ✅ 已实测 鉴权契约 4/4 401(含 /api/mind/**);健康契约 13/13 401;商城排序契约 4/4
19 QA 流程 ⚠️ 待核实 128 轮闭环可追溯;门禁未脚本化(G11)
20 全项目代码审查 ⚠️ 待核实 本轮仅做规范扫描(@GetMapping 8 处仍违 AGENTS.md),未跑全量静态审查

4. 实测结果明细(本轮真实信号,全部本机/节点实跑,无引用)

# 维度 命令/方式 节点 结果
1 后端全量 mvn -o -B clean test(JDK1.8.0_25 + Maven 3.6.1,39m20s) 本机 339 类 / 2865 例 / 2828 过 / 30F+3E+4S = 98.71%;33 红例 / 红类集合与 R127 完全一致;339/339 XML 无沉默;testCompile 345 源 0 错;target/classes 2325 class
2 cfc-web Jest CI=true npx jest --ci --runInBand --coverage 本机 ✅ 17 套件 / 116 例全绿(201s)
3 cfc-frontend Jest CI=true npx jest --ci --runInBand 本机 ✅ 26 套件 / 426 例 = 423 过 / 3 skip / 0 红(61s)
4 根级黑盒 Jest npx jest -c tests/jest.config.js --ci 本机 ⚠️ 23 例 = 7 过 / 16 红(ECONNREFUSED 9082 未启,B-36 第 31 轮零漂移;mini-game 13 + plan-chain 3)
5 langgraph pytest 251 POST /api/shell 实派 .venv/bin/python -m pytest tests --ignore=tests/qna --ignore=tests/test_chat.py 251 ✅ 43 passed / 0 红(692.94s);进程正常退出(GONE@1003s,本轮无 124 挂起)
6 管理端 UI E2E playwright -c live --project=admin-desktop 189 ✅ 5/5(1.3m,TC-A-U01~U05 含滑块+真实登录入主框架)
7 小程序 H5 E2E --project=frontend-mobile 本机 ✅ 6/6(1.8m,TC-F-U01~U06)
8 商城排序契约 --project=shop-api 本机 ✅ 4/4(16.5s,TC-S-U01~U04)
9 健康鉴权契约 -c playwright.config.health.js 本机 ✅ 13/13(5.3s,全部 401)
10 线上鉴权探针 curl -X POST 4 端点匿名 本机 ✅ 4/4 = 401(/api/mind/fortune、/api/energy/overview、/api/health/plan/list、/api/huawei-health/status)→ B-69 连续 3 轮闭环(销号维持)
11 langgraph live POST /api/v1/chat(90s cap) 本机→251 ❌ chat 90s 零字节(HTTP 000) → B-90 延续(/health ok、analyze 422 schema 校验正常,仅 LLM 链路挂死)
12 节点探活 curl 4 节点 251:4096=200 / 251:9000={"status":"ok"} / 189:4090=200 / 204:4090=000(B-95)

全量计数(去重口径:后端 2865 + web 116 + fe 426 + 根级 23 + langgraph 43 + 浏览器 28)

  • 合计 3501 例,通过 3445 = 98.40%,红 49(后端 33 + 根级 16),skip 7(后端 4 + fe 3)。与 R127 严格零漂移。

5. 覆盖缺口清单

缺口 现状 风险 建议测试设计 优先级 闭环方式
G-128-1 SRS 可执行锚点 827 TC 行,末列锚点非空 234(28.3%),指向可执行用例仅 82(9.9%) 需求→用例不可双向追溯,改动无法判断回归面 为每个 spec 章节强制登记 ≥1 个可执行 anchor(用例名/测试类#方法) P1 test-cases/*.md 末列补锚点后重算 ≥80% 才过 G9
G-128-2 场景覆盖 SC 244,被 TC 引用 146(59.8%) 98 个场景无用例,验收无据 按 P0 场景优先补三类流(正常/异常/边界) P1 sc-key-map 与 TC 台账双向对账
G-128-3 后端产品红 14 例 EnergySystem 6×500、Orchestration 2、UserWechatLogin 2、MembershipPay 1、PaymentORD 1、TeamProfitCron 1、platform_fee 1 五维能量与微信登录为高频入口,可能真实不可用 先线上复现(可用账号)再定产品/装置 P0 研发修复后定向复跑转绿
G-128-4 装置红 16 例 CfCommission 8、ArticleAutoTag 4、GrowthRecordSync 3、TaskPlan 1 掩盖真实分佣/打标回归 按 §7 #1~#4 修装置(测试侧自处置) P1 定向复跑 16/16 绿
G-128-5 langgraph live chat 挂死 单测 43/43 通过,但 live chat 90s 零字节(B-90) 生产 AI 对话不可用,单测覆盖不到真实 LLM 链路 ① 给 LLM 调用加显式超时与降级 ② 补 live 契约(真实 HTTP 调用断言 200+body) P0 live chat/analyze 200 有 body 且连续 2 轮
G-128-6 无 CI 后端全量 后端 2865 例只在本地人工跑 回归不可持续,红例长期沉淀 GitLab CI 增 blocking 全量 job(可离线缓存 m2) P1 CI 绿/红可查 + 阻断合并
G-128-7 覆盖率空白 后端无 JaCoCo;web 语句 10.09% 无法度量单测有效性 后端接 jacoco-maven-plugin,报告入库 P2 覆盖率报告产出并可复算
G-128-8 204 节点失联 4090 等端口全 000 浏览器任务无冗余节点 运维恢复并登记节点能力 P2 探活 200 + 实派 1 例绿

6. 域结论表

审查维度 负责专家 结论 关键证据
单元·组件级 苏雅 不通过(局部) 后端 33 红中 16 例装置型(Mockito 误用/夹具无值);web 覆盖率 10.09% 偏低
集成·接口级 柯砚 不通过(局部) integration.* 4 例红类(EnergySystem 6×500、GrowthRecord 3、GuideModule 1、DimensionMap 3)
系统·验收级 白樾 有条件通过 浏览器 28/28 连续多轮;但无 UAT/BDD,验收仅靠 E2E 硬契约
测试保障级 闻朔 有条件通过 27 轮零漂移回归有效;冒烟面 = 28 例;探索性无 chartered 记录
性能·可靠性 骆骋 未实测(未授权) 压测需 execute 档授权;仅有 langgraph 90s 零字节的可靠性观察(B-90)
安全 关屿 不通过(局部) 鉴权 4/4 401 达标;但 @GetMapping 8 处违 AGENTS.md、application.yml 明文凭据 B-31 未改造
兼容·体验 阮清 待核实 仅 Chromium;无多端矩阵、无 axe 无障碍扫描
流程·度量·代码 何序 不通过(局部) G9 口径三套并存(B-124);无 CI 全量(G11);测例台账 827 行但可执行锚点 9.9%

7. 五要素问题清单

#1【P1·装置】CfCommissionServiceSettleTest 8 例「Wanted but not invoked」— 与 R127 相同

  • ① 问题描述:settle_* 8 例全部失败,报 cfBalanceService.earnByRule(...) / ppointConsumptionLogMapper.insert(...) 未被调用,触发提前 return 后断言不成立。
  • ② 测试 bug 点:cfc-backend/src/test/java/com/etotem/cfc/service/CfCommissionServiceSettleTest.java(settle_F03a发放_自动创建感恩记录、settle_两级销售奖_F03a按团队档位_F03b按自身档位、settle_同家庭引荐人跳过_顺延到下一级拿F03a、settle_商品订单实付与分润基数分离、settle_推荐人分润只走earnByRule_不再写旧分佣流水、settle_最多两级_第三级引荐人不发放、settle_档位比例超规则上限_按上限封顶、settle_落P点消费日志_基数与订单对应)。
  • ③ 最优修改方案:先补 settle 路径前置守卫桩(订单状态、受益人解析、家庭关系),mock 返回真实形态对象;断言由精确 any() 改为 ArgumentCaptor 捕获后校验实付/基数/档位。
  • ④ 修改目的:消除 8 例装置假红,恢复分佣链路资金守护(CF 结算为资金链路)。
  • ⑤ 闭环:mvn -Dtest=CfCommissionServiceSettleTest test(surefire 2.22.2 只认逗号分隔)复跑 12/12 绿;连续 2 轮稳定。

#2【P1·装置】ArticleAutoTagServiceTest 4 例线程池调用次数断言 — 与 R127 相同

  • ①:3 例 Wanted 1 time 未发生、1 例 Never wanted here 反被调用(异步时序)。
  • ②:cfc-backend/src/test/java/com/etotem/cfc/unit/ArticleAutoTagServiceTest.java(auditArticle_…、publishByUser_…、toggleStatus_发布且标签为空_调度自动打标、toggleStatus_标签非空_不调度自动打标)。
  • ③:用 verify(executor, timeout(1000)).execute(any()) 容忍异步提交;标签非空用例先 clearInvocations(executor) 再断言 never。
  • ④:区分「异步调度」与「同步执行」,避免时序差异误判功能缺失。
  • ⑤:定向复跑 4/4 绿,连续 2 轮稳定。

#3【P1·装置】GrowthRecordSyncFlowTest 3 例(2 处 NPE + 1 处布尔断言)— 与 R127 相同

  • ①:parentCreatesRecordWithOrder_Success:164、parentUploadsHealthReport_Success:204 抛 NullPointerException;parentCreatesRecordWithoutChild_Fails:130 期望 true 得 false。
  • ②:cfc-backend/src/test/java/com/etotem/cfc/integration/GrowthRecordSyncFlowTest.java:130/164/204。
  • ③:164/204 补 mock 返回值(重构后改走 getXxxByFamilyMember);130 改断言业务响应码/message。
  • ④:消除重构遗留夹具滞后,恢复成长记录同步回归保护。
  • ⑤:定向复跑 10/10 绿。

#4【P2·装置】TaskPlanServiceTest 1 例 — 与 R127 相同

  • ①:applyAndActivate_无active实例时新建并置active 期望 100 得 null。
  • ②:cfc-backend/src/test/java/com/etotem/cfc/unit/TaskPlanServiceTest.java。
  • ③:补 insert 回填主键 mock(doAnswer 设置 id),或 ArgumentCaptor 校验保存对象。
  • ④:使激活路径可断言。
  • ⑤:定向复跑 4/4 绿。

#5【P0·产品】EnergySystemFlowTest 6 例全 500(五维能量核心链路)— 与 R127 相同

  • ①:parentGetsEnergyOverview/parentQueriesEnergyLogs/taskCompletionGrantsEnergy/childExchangesWishWithEnergy 期望 200 得 500;childExchangesWithInsufficientEnergy_Fails 期望 true 得 false;userWithoutFamily_Fails 期望 500 得 5001。
  • ②:cfc-backend/src/test/java/com/etotem/cfc/integration/EnergySystemFlowTest.java:116/150/182/212/246/282。
  • ③:取 500 的 Caused by 最内层,对照 /api/energy/* 在「孩子→家庭成员」重构后的成员解析;5001 若为设计错误码写入契约。
  • ④:五维能量是产品主线,6 例常红意味着能量查询/兑换可能对真实用户不可用。
  • ⑤:修复后定向复跑 7 例全绿 + 线上 /api/energy/overview 带 token 实返 200。

#6【P1·产品】Orchestration 2 例 — 与 R127 相同

  • ①:失败原因枚举落库时机与断言不匹配。
  • ②:cfc-backend/src/test/java/com/etotem/cfc/orchestration/OrchestrationEngineTest.java:176、OrchestrationIntegrationTest.java:105。
  • ③:核对失败原因枚举落库时机;若异步回写则用例改轮询终态。
  • ④:编排引擎失败态判定直接影响任务流转与结算。
  • ⑤:定向复跑 2 类全绿 + 补「失败→重试→终态」回归。

#7【P1·产品】微信登录 2 例 + MembershipPaySwitch 1 例 + PaymentServiceORD 1 例 — 与 R127 相同

  • ①:微信首次登录返回 null 而非 jwt-token-1;虚拟支付配置缺失未短路;ORD 未知前缀未路由。
  • ②:service/UserServiceWechatLoginTest.java、UserServiceWechatLoginContractTest.java:110、MembershipPaySwitchTest.java:209、PaymentServiceORDRoutingTest.java:83。
  • ③:微信登录按契约核对返回体;配置缺失短路返回 null;ORD 补前缀白名单。
  • ④:登录与支付是营收入口。
  • ⑤:3 类定向复跑全绿 + 线上登录取 token 冒烟 1 次。

#8【P1·产品】TeamProfitCronContractTest 冷静期退款未全撤销 — 与 R127 相同

  • ①:refundWithinCooling_cancelAllRecordsFundsNotPaid 断言 cancelled=0 应为 true。
  • ②:cfc-backend/src/test/java/com/etotem/cfc/unit/TeamProfitCronContractTest.java。
  • ③:退款回调置 cancelled 且不发放;核对定时任务与退款回调竞态。
  • ④:冷静期退款错发是资金损失。
  • ⑤:定向复跑 22 例全绿 + 竞态顺序用例。

#9【P0·契约待裁决】DimensionRegistryMapContractTest 3 例(P-9,第 10 轮)— 与 R127 相同

  • ①:未知/缺失/空 legacyCode 的期望与实际不符(null vs 透传、400 vs 200)。
  • ②:cfc-backend/src/test/java/com/etotem/cfc/integration/controller/DimensionRegistryMapContractTest.java:76/85/92。
  • ③:需主理人裁决「未知 legacyCode 语义——透传 or 归 null」后单向修改(改实现或用例其一)。
  • ④:同一契约连续 10 轮红,已成为 G2 固定分母,掩盖真实回归。
  • ⑤:裁决落地后定向复跑 7/7 绿,P-9 台账销号。

#10【P1·安全和流程】@GetMapping 8 处仍违 AGENTS.md + 明文凭据未改造 — 与 R127 相同

  • ①:@GetMapping 8 处(规范统一 @PostMapping);application.yml 7 处明文凭据(B-31)。
  • ②:grep -rn "@GetMapping" cfc-backend/src/main/java;cfc-backend/src/main/resources/application.yml。
  • ③:改 @PostMapping(同步前端);凭据改 ${ENV_VAR} + 部署注入 + gitleaks 预检。
  • ④:GET 暴露参数于 URL/日志;明文凭据可被仓库读权限者直取。
  • ⑤:grep -c @GetMapping = 0;gitleaks 扫描 0 命中。

8. 度量快照

指标 数值 环比
测试类(后端) 339 与 R127 一致
后端用例 2865 一致
用例台账 TC 行 / 唯一编号 827 / 284 一致(SRS 零变更)
可执行锚点 82(9.9%)/ 末列非空 234(28.3%) 口径见 B-124
用户场景 SC 244,TC 引用 146(59.8%) 一致
Controller 364 —
@GetMapping 违规 8 一致(未整改)
测试文件 / testCompile 345 源,0 错 —
web 覆盖率 10.09% / 6.12% / 7.50% / 9.97% 一致

9. 门禁结论

门禁 判据 实测 结论
G1 全量通过率 ≥95% 98.40%(3445/3501) ✅
G2 红例数 ≤10 49(后端 33 + 根级 16) ❌
G3 前端 Jest 0 红 423 过 / 0 红 / 3 skip ✅
G4 管理端 Jest 0 红 116/116 ✅
G5 编译与完整性 testCompile 0 错 + XML 无沉默 345 源 0 错;339/339 XML ✅
G6 浏览器 28/28 28/28(4 套件) ✅
G7 langgraph 0 红 0 红(43/43,B-74 连续 2 轮绿 → 销号) ✅
G8 鉴权契约 全 401 线上 4/4 + 契约 13/13(含 /api/mind/**) ✅
G9 SRS 锚点 ≥80% 9.9%(严格)/ 28.3%(宽松) ❌
G10 双节点派发 251 + 189 均实派 251 ✅(43 例)/ 189 ✅(5/5) ✅
G11 CI 含后端全量 存在 blocking 全量 无 ❌
G12 用例入库 本轮有新增/更新 SRS 窗口零变更 → 不新增(合规) ✅

总裁决:不通过(有条件)

  • 阻塞放行三项(环比未变):G2 49 红、G9 可执行锚点 9.9%、G11 无 CI 全量。
  • 环比改善:G7(B-74)连续 2 轮 43/43 → 销号;G6 浏览器 28/28 连续第 3 轮;B-69 鉴权 4/4=401 连续 3 轮;结束彻底零漂移。
  • 环比持平:后端 2865/2828/98.71% 与 R127 逐字段一致;49 红构成不变;web/fe 零漂移。
  • 延续风险:B-90 langgraph live chat 90s 零字节(生产 AI 对话不可用),与「pytest 43/43 全绿」并存 → 单测覆盖不到 LLM 真实链路,需补 live 契约(G-128-5)。
  • 放行建议:内网灰度可放(核心浏览/登录/商城/健康鉴权均绿);不支撑对外正式发布,除非 §7 #5/#7/#8 产品红有结论或已修复。

10. 本轮执行合规声明

  • 未联网安装依赖、未启停线上服务、未修改生产源码;仅新增测试侧脚本与本报告/台账。
  • 未触碰他人 WIP(跑前跑后 git status --porcelain 已跟踪改动 0)。
  • 浏览器任务严格「每节点单任务」:189 跑 admin,本机串行跑 frontend→shop→health(workers:1)。
  • 8 类套件全部