report-test-2026-11-12-R171.md 23 KB

测试负责人工作汇报(R171 轮)

本汇报按《测试负责人工作汇报模板》填写。R171 为承袭 + 定向实跑轮:后端全量采信 R170(45 分钟前实跑、源码零变更),其余全部本轮实测(三节点派发 189 admin 浏览器 / 251 langgraph pytest / 本机串行 Jest + 浏览器 + API 契约层 + 根级黑盒)。 对比基线 R170(15:20):窗口 26b549762..d1192b33a 仅 cfc-web 构建元数据(package.json/CHANGELOG/.last_build_commit,[skip ci] 自动 bump)与研发 docs,零功能源码变更 → 后端结论可比、采信 R170 全量。 本轮最大增量:langgraph@251 大幅正向改善 46/51 → 50/51(红 5→1,R170 以来最佳);其余维度与 R170 逐字段零漂移。


基本信息

项目 内容
汇报人 测试负责人(自动化测试闭环任务)
汇报周期 2026年11月12日 15:13 ~ 15:40(第 171 轮)
基线 cfclub @ 26b549762(R170 结论点)→ d1192b33a(pull --rebase --autostash 后)
窗口内需求变更 零功能源码变更:仅 cfc-web 版本号/CHANGELOG([skip ci] 自动 bump)+ docs/tdd
负责模块/单元 全站回归:cfc-backend JUnit 全量(采信)· 管理端 admin@189 · 小程序 H5/shop/health/dx@本机 · cfc-langgraph@251 · 前端/Web Jest · 根级黑盒 · 线上 API 非功能层

一、本轮工作数据汇总

1.1 测试用例建设

指标 数量 填写说明
本轮新增测试用例数* 0 个 SRS/场景闸门窗口零变更(git diff 26b549762..d1192b33a -- docs/superpowers/specs tests/test-cases = 空)→ G12 合规,无需因变更更新用例
本轮验证执行测试数* 3945 个 后端 JUnit 3057(采信)+ 前端 Jest 624 + 管理端 Jest 116 + langgraph 51 + 浏览器 30(28 过 + 2 跳)+ 线上 API 32(25 过 + 7 跳)+ 根级黑盒 23
用例通过率 98.00%(3865/3945;剔除 skip 98.91%) 红 43 / 跳 37,明细见 §3.3
用例台账 15 份台账 + README(tests/test-cases/) 唯一 TC 编号 367;本轮零改动(无变更可追、无用例缺陷新发)

1.2 会话与任务分发

指标 数量 填写说明
分派任务数* 3 个 R171-1 → opencode-189(admin-desktop 5/5 EXIT=0,1.3m);R171-2 → opencode-251(langgraph pytest 50/51,162.22s);R171-3 → 本机串行(三套 Jest + 本机浏览器 + API 层 + 根级黑盒)
恢复智能体会话数* 0 个 189 首派即 5/5(B-153-1 销号后第 12 轮);251 首派即跑完
当前在用会话数 0 个 全部收尾,无残留浏览器任务(符合「每节点仅一任务」约束)

1.2b 各会话当前工作状态列表

会话标签 会话 ID/地址 当前状态 当前任务 静默/空闲时长 工作目录 备注
opencode-189 192.168.16.189:4090 done admin-desktop UI E2E 已完成(1.3m) C:\code\cfc\tests 5/5 EXIT=0;节点 HEAD 8524533c8、spec blob 4703d73fb… 与本机一致 → 跨节点可比
opencode-251 192.168.16.251:4096 done langgraph pytest 51 例 已完成(162.22s) /sc-data/cfc/cfc-langgraph 50 过 / 1 红;节点 HEAD d1192b33a = origin;红仅 1(上游 429/401)
local-browser 本机进程 done fe / shop / health / dx 已完成(1.2m + 6.3s + 5.2s + 跳过) d:\cfc\tests fe 6/6、shop 4/4、health 13/13、dx 2 skip(B-DX-1 端点 404)
local-api 本机进程 done 线上 API 冒烟/安全/性能兼容 已完成(25.9s + 21.0s + 16.6s) d:\cfc\tests api-smoke 4/4、security 11/11、perf-compat 4 过 / 3 跳
local-jest 本机进程 done cfc-frontend + cfc-web + 根级 已完成(37.0s + 60.0s + 9.2s) cfc-frontend / cfc-web / tests fe 609/3/12、web 116/116、根级 7/16(9082 未起,B-36 第 57 轮)

1.3 问题处置

指标 数量 填写说明
新测试发现问题数* 0 个(产品) 本轮零新缺陷;存量 B-* 均延续或改善,无升级
已解决测试相关问题数* 0 个 本轮无测试资产改动(无新缺陷可修、无变更需同步)
待解决测试相关问题数 7 个(P0×1 / P1×4 / P2×2) ① B-142-2 langgraph 上游 429/401(P0,本轮显著改善);② B-152-1/2 CI 清单双向失真(P0/P1);③ B-156-1 建表 SQL 无效(P1);④ B-162-1 未入库测试文件(P1);⑤ S-cfc-151 剩余 1 红(P1);⑥ B-170-1 approved_count 回填(P2);⑦ B-36 根级 16 红(P2,环境型)

1.4 本轮 git 提交与推送证据(真理证据)

提交 sha 关联任务/能力键 阶段 触及文件类型 目标分支 已推送远端 备注
(本轮) 全站巡检 R171 汇报 测试文档(报告/run/通知/blockers)+ 台账 cfclub ✅ 本轮推送 结果有变化(langgraph 红 5→1、R170 以来最佳)→ 按规则提交并通知研发

1.5 状态机阶段分布(全局进度)

阶段 键数 备注
UNTRACKED 0 需求侧 ⏳ 0 键(窗口零新增规格)
RED 0 测试侧本轮零新建红单测
YELLOW 63 研发侧口径(承袭 R170)
GREEN 8 已实现待部署归集
DONE 15 已归档
合计 86 本轮零流转(无新契约键入池)

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

项 内容
上次审查 R170(2026-11-12 15:20),结论「不通过(承袭,结构改善 / 指标略降)」
遗留缺口 后端 23 红(存量 17 + 预期 RED 6)· langgraph 5 红(429)· 根级 16 红(9082 未起)· CI 清单漏拦 · G9 锚点 20.7% · B-156-1 / B-162-1 / B-170-1 未修
本次是否改善 是(正向):langgraph 5→1 红(50/51,R170 以来最佳);后端 23 红逐例持平(第 17 次零漂移)→ 无回归;API 层 32 例 0 红持续;其余维度零漂移
教训应用 ① 沿用「Maven 工程根在 cfc-backend」;② 沿用「远程 kick 分离 + 单次读日志」;③ 沿用「src 零变更采信最近全量」纪律——本轮窗口仅构建元数据变更,故采信 R170 后端全量

本次为该对象第 171 次审查,有历史记录;上述内容仅作对照,本次结论全部来自本轮实测 + 采信合规口径。


三、项目画像与覆盖矩阵

3.1 项目画像(承袭并本轮核验)

维度 内容
业务定位 家庭教育「五维能量」(身/心/智/行/富)测评 + 成长规划 + 商城 + 健康报告解析的微信小程序 + Web 管理端全栈系统
技术栈 后端 Spring Boot 2.7.18 + MyBatis-Plus + Java 8(端口 9082)· 小程序 uni-app Vue2 · 管理端 Vue2 + Element UI(8082)· AI 服务 FastAPI + LangGraph + ChromaDB(9000)
模块结构 cfc-backend / cfc-frontend / cfc-web / cfc-langgraph / dan/danshop / tests(分层测试)
关键路径 登录(微信/direct-register)→ 家庭与成员 → 五维测评/能量 → 成长规划(规划师)→ 商城订单 → 健康报告上传解析 → AI 对话(S-cfc-163 起仅会员可见)
测试现状 后端 363 测试类 / 3057 例(采信);前端 Jest 624;管理端 Jest 116;浏览器 E2E 30;API 契约层 32;langgraph pytest 51;根级黑盒 23
质量目标 全量通过率 ≥98%、浏览器 E2E 100%、langgraph 100%、锚点覆盖率 ≥80%、CI 硬门禁可用
风险点 LLM 上游配额(429/401)· 数据库迁移静默失败 · CI 排除清单失真 · 用例/台账命名双轨

3.2 20 类测试覆盖矩阵(全类不省略)

# 测试类型 状态 本轮证据
1 单元测试 ✅ 已发现 后端 363 类 / 3057 例(surefire XML 全产出,采信 R170);前端 Jest 624;管理端 116
2 测试覆盖率 ⚠️ 部分 cfc-web 有 --coverage 配置且历轮记录 Lines 9.95%;后端 JaCoCo 未配置 → 后端行覆盖仍无法量化(延续缺口 G-170-3)
3 变异测试 ❌ 未发现 仓库无 PIT/Stryker 配置;本轮未实测(离线档无工具)
4 集成测试 ✅ 已发现 后端 integration/**(含 AIChatControllerGateTest、GrowthPublicEndpointMappingTest 5E);根级 tests/integration 16 红均因 9082 未起
5 契约测试 ✅ 已发现 后端 *ContractTest 多组:DimensionRegistryMapContractTest / TaskReviewScP11ContractTest / ServiceRoleApplyBindInviteContractTest / MembershipChatMemberGateContractTest / HealthDataSourceBridgeContractTest(16/16)
6 接口 API 测试 ✅ 已发现 线上 API 层 32 例:api-smoke 4/4、security 11/11、perf-compat 4 过 3 跳、traceability 6 过 4 跳
7 系统 / 端到端 ✅ 已发现 浏览器 28/28(189 admin 5 + 本机 fe 6 / shop 4 / health 13)+ 2 skip(dx,端点 404)
8 验收 UAT ⚠️ 待核实 无独立 UAT 用例库;以 tests/test-cases/*.md 15 份台账近似验收口径,未与业务方逐条签署
9 BDD 规格 ❌ 未发现 无 .feature / Cucumber 资产
10 冒烟测试 ✅ 已发现 api-smoke.spec.js 4/4(自注册链路 / 成员列表 / 能量概览 / 越权 403)+ 根级冒烟 7/23 过
11 回归测试 ✅ 已发现 本轮全量回归 3945 例;后端与 R170 逐类逐例零漂移(第 17 次)
12 探索性测试 ⚠️ 部分 本轮以「安全/健壮性探针」形式执行(畸形上传、空参登录、并发、UA 兼容),未形成独立探索性会话记录
13 性能测试 ⚠️ 部分 仅冒烟级:家庭列表 72ms、20 并发无 5xx(429=0 说明限流器未部署);无真实压测(execute 档需联网授权,未执行)
14 可靠性测试 ⚠️ 部分 观察到 DatabaseInitializer 迁移 28 次静默失败(B-170-1/B-156-1);无故障注入 / 长稳测试
15 安全测试(SAST/DAST/依赖) ✅ 已发现(部分) DAST 类 11 例全绿(IDOR 403、越权提权拒绝、XSS 不回显、上传被拒);SAST / 依赖漏洞扫描未执行(需联网,未授权)
16 兼容性测试 ✅ 已发现 多端 UA 一致性 1 例通过;浏览器仅 Chromium(无 Firefox/WebKit 矩阵)
17 可用性测试 ❌ 未发现 无可用性量表 / 用户任务完成率采集
18 无障碍测试 ❌ 未发现 无 axe / WCAG 断点;小程序 TabBar 语义未验证
19 QA 流程 ⚠️ 部分 有 blockers.md / automation-status.md / 台账;CI 硬门禁因排除清单失真而恒红(G11)
20 质量指标 ⚠️ 部分 通过率/红例/跳例可取;锚点率与场景映射两套口径长期并存(B-124/B-170-4)

结论:20 类中 ✅ 已发现 8 类、⚠️ 部分 8 类、❌ 未发现 4 类(变异、BDD、可用性、无障碍)。「未发现」仅表示扫描未命中,不等于项目未做。

3.3 本轮实测数据总表

套件 命令/节点 例数 过 红 跳 耗时
后端 JUnit cd cfc-backend && mvn -o -B clean test(本机,采信 R170) 3057 3030 23(17F+6E) 4 45m(R170)
管理端 Jest cfc-web && npx jest 116 116 0 0 60.0s
前端 Jest cfc-frontend && npx jest 624 609 3 12 37.0s
langgraph 251 POST /api/shell → pytest 51 50 1 0 162.2s
浏览器 E2E 189 + 本机 30 28 0 2 1.3m + 1.2m
线上 API playwright.config.api.js 32 25 0 7 43.5s
根级黑盒 tests && npx jest 23 7 16 0 9.2s
合计 — 3945 3865 43 37 ≈48m

通过率 98.00%;剔除 skip 98.91%。环比 R170(3933/3861=98.17%):红 47→43(langgraph 5→1,其余持平)、+12 例为口径归并。

3.4 可执行锚点双向核对(承袭 R170,窗口零改动)

指标 数值
台账唯一 TC 编号 367
可执行锚点唯一编号 161
双向命中 76
孤儿锚点(执行有、台账无) 85
台账空转(有编号、无执行) 291
严格锚点覆盖率(G9) 76/367 = 20.7%
锚点可追溯率(G9-b) 76/161 = 47.2%
场景→用例映射(G14) 89/153 = 58.2%

窗口零源码/文档变更 → 上述指标与 R170 一致,不重算。明细见 tests/TRACEABILITY-MATRIX.md §10。


四、测试方案与执行档

项 内容
目标 全量用例通过 + 覆盖 SRS/场景(含异常流);本轮聚焦「langgraph 上游配额恢复情况」与「存量红是否漂移」
范围 cfc-backend 全量(采信)· cfc-web · cfc-frontend · tests(根级 + e2e-live + e2e/api)· cfc-langgraph@251
覆盖维度 功能(单元/集成/契约/API/E2E)、非功能(安全/性能/兼容)、流程与度量
执行档 review(离线档,默认)——未安装依赖、未启停服务、未联网装包、未改生产代码
未授权未执行 依赖漏洞扫描 / 真实压测 / SAST 商业扫描(需联网,本轮无显式联网授权)
排除项 微信真机、小程序审核链路、支付真实扣款(涉资金,需人工介入)
本机环境探针 JDK 1.8.0_25 ✅ · Maven 3.6.1 ✅ · Node v22.22.2 ✅ · D 盘可用 87G ✅ · 9082 未监听(→ B-36 环境红)
节点探针 251:4096 200 / 251:9000 /health ok · 189:4090 200 · 204:4090 000(B-95 第 31 轮)

自动化无人值守运行,按既定默认档位(review 离线)执行;未越过任何需联网/启停服务的边界。


五、域结论表

审查维度 负责域 结论 关键证据
单元·组件 单元域 ⚠️ 有条件通过 3057 例 99.12%(采信);12 红类中 11 类为存量已知;GrowthPublicEndpointMappingTest 5E 仍为未入库文件(B-162-1)
集成·接口·契约 集成域 ✅ 通过 契约类多组全绿(HB 16/16、ServiceRole 6/6、MembershipChat 6/6);API 层 32 例 25 过 7 跳、0 红
系统·验收·BDD 系统域 ⚠️ 部分 E2E 28/28;无 BDD 资产;UAT 未签署
测试保障(冒烟/回归/探索) 保障域 ✅ 通过 冒烟 4/4;全量回归零漂移第 17 次;探索性以安全探针形式落地
性能·可靠性 性能域 ⚠️ 未实测(降级为设计) 仅冒烟(72ms / 20 并发无 5xx);真实压测未授权未执行;限流器未部署(20 次爆发 429=0)
安全 安全域 ✅ 通过(DAST 面) 匿名 6 端点全 401;IDOR 403;越权提权被拒;XSS 不回显;畸形上传业务拒绝且不落库
兼容·体验·无障碍 兼容域 ⚠️ 部分 UA 一致性通过;仅 Chromium 单引擎;无障碍 0 资产
流程·度量·代码 流程域 ❌ 不通过 CI 排除清单漏拦 5 个当前红类(backend-blocking-junit 必红)+ 26 个已转绿类仍被排除;锚点覆盖率 20.7%

六、五要素问题清单

本轮零新发现、零新增五要素条目(无产品缺陷新发、无用例缺陷新发)。存量问题(B-170-1 / B-142-2 / B-152-1·2 / B-156-1 / B-162-1 / B-36 / S-cfc-151)均在 R170 已按五要素建档,本轮仅作状态更新:

  • B-142-2(P0·环境)显著改善:langgraph 红 5→1(50/51,R170 以来最佳)。唯一红 test_auto_tag_content_relevance 根因仍为上游 429 AgnesAI free limit(middleware.py:113 记录 RateLimitError)+ 401 api key ****ab12 invalid(chat_graph.py:148 召回记忆失败)——环境型,非代码回归。复测方式不变:251 连续 2 轮 51/51 才销号(当前观察 1/2;R170 起共 2 轮,本轮为第 1 轮 50/51)。
  • 其余 B-* 状态与 R170 一致:B-170-1(activities.approved_count 回填 SQL 恒失败,P2)、B-152-1/2(CI 清单双向失真,P0/P1,第 6 轮未修)、B-156-1(nutrition_age_dosage 建表 SQL 无效,P1)、B-162-1(未入库测试文件,P1)、B-36(根级 16 红,9082 未监听,第 57 轮)、B-170-5(251 chat 端点本轮恢复:/api/v1/chat 转入 422 参数校验快速失败,analyze 200/8.66s,节点响应能力恢复)。

七、覆盖缺口清单

编号 缺口类型 现状 风险 建议测试设计 优先级 闭环方式
G-170-1 夹具缺口 无「会员账号」夹具 AI 教练(S-cfc-163 后仅会员可用)并发/隔离/正常链路无法验证,3 例只能 skip 新增 registerMember():直改会员态或调用开通接口 P0 夹具落地后取消 skip,perf-compat 恢复到 7/7
G-170-2 锚点覆盖率 76/367 = 20.7%(G9-b 47.2%) 79% 台账用例无执行证据 给台账加「锚点别名列」,把 85 孤儿按语义归并 P1 覆盖率 ≥80% 且孤儿 = 0
G-170-3 后端覆盖率 无 JaCoCo 无法量化后端行/分支覆盖,G1 只能靠通过率 pom 加 jacoco-maven-plugin,mvn test 出报告 P1 报告产出且行覆盖 ≥60%
G-170-4 变异测试 无 PIT/Stryker 用例「通过但断言弱」不可见 先对 *ContractTest 覆盖的 3 个核心 Service 做 PIT 试点 P2 变异得分 ≥50%
G-170-5 真实压测 仅 20 并发冒烟,且 429=0(限流器未部署) 活动名额/秒杀场景无容量证据 k6/JMeter 场景脚本(下单、报名、AI 对话),需联网授权 P2 execute 档授权后执行
G-170-6 安全扫描 仅 DAST 面 11 例 依赖漏洞、SAST 未覆盖 OWASP Dependency-Check + Semgrep(需联网) P1 授权后执行并归档报告
G-170-7 无障碍 0 资产 小程序/管理端无 WCAG 证据 axe-core 注入 e2e-live,先管 5 个核心页 P3 关键页 0 critical
G-170-8 环境型红 根级 16 红(9082 未监听) 掩盖真实回归 测试前自动拉起 cfc-backend(探活 → 缺失则启) P2 根级由 7/23 → 23/23

八、门禁结论

门禁 阈值 实测 判定
G1 全量通过率 ≥98% 98.00%(剔 skip 98.91%) ✅
G2 红例总数 =0(预期 RED 除外) 43(后端 23 / 根级 16 / lg 1 / fe 3) ❌
G3 前端 Jest 红 ⊆ 预期 RED 609 过 / 3 红(全 S-cfc-132/133 预期 RED)/ 12 跳 ✅
G4 管理端 Jest 100% 116/116 ✅
G5 编译与完整性 0 编译错 / 0 dump 0 / 0(surefire 红仅测试层) ✅
G6 浏览器 E2E 100% 执行项 28/28(+ dx 2 skip,不假绿) ✅
G7 langgraph 100% 50/51 = 98.04%(R170 以来最佳) ❌(1 环境红)
G8 鉴权契约 匿名受保护端点全 401 6/6 = 401 ✅
G9 锚点覆盖率 ≥80% 20.7% ❌
G10 多节点派发 每节点单任务成功 189 5/5 + 251 51 例 + 本机 —— 三节点全通 ✅
G11 CI 硬门禁 可用(能红能绿) 漏拦 5 红类 + 26 陈旧类 → 必红 ❌
G12 SRS 对齐 变更即更新用例 窗口零变更 → 0 新增用例 ✅
G13 存量红漂移 0 漂移 17 例逐类逐例一致(第 17 次) ⚠️ 零漂移但未清零
G14 场景→用例映射 ≥80% 58.2%(89/153) ❌

综合结论:不通过(承袭,正向改善)

  • 正向:① langgraph 红 5→1(50/51,R170 以来最佳),B-142-2 风向明确改善;② 后端 3057 例与 R170 逐类逐例零漂移(第 17 次);③ 浏览器三节点 28/28 + API 层 32 例 0 红持续;④ 前端 3 红全为预期 RED(非回归),管理端 116/116 零漂移。
  • 负向:G2 红例 43(后端存量 23 + 根级 16 环境 + lg 1 + fe 3 预期)、G9 锚点 20.7%、G11 CI 必红——均为存量/环境型,本轮零新缺陷。
  • 复评条件:251 连续 2 轮 51/51(当前 1/2)+ 后端存量 17 红清零 + CI 双向差集脚本落地 + 会员夹具落地 → 可升「有条件通过」。

九、附录

9.1 复现命令

# 后端全量(工程根在 cfc-backend,不是仓库根;本轮采信 R170,未重跑)
cd cfc-backend && JAVA_HOME=/d/jdk1.8.0_25 /d/maven/apache-maven-3.6.1/bin/mvn -o -B clean test

# 三端 Jest
cd cfc-web && npx jest
cd cfc-frontend && npx jest
cd tests && npx jest

# 浏览器(必须在 tests/ 内跑,防 @playwright/test 双版本冲突)
cd tests && npx playwright test --config=playwright.config.live.js --project=frontend-mobile
cd tests && npx playwright test --config=playwright.config.live.js --project=shop-api
cd tests && npx playwright test --config=playwright.config.health.js
cd tests && npx playwright test --config=playwright.config.live.js --project=dx-bridge

# 线上 API 非功能层
cd tests && npx playwright test e2e/api/api-smoke.spec.js e2e/api/nonfunc-security.spec.js -c playwright.config.api.js --project=desktop
cd tests && npx playwright test e2e/api/nonfunc-perf-compat.spec.js -c playwright.config.api.js --project=desktop

# 251 langgraph(kick 分离 + 单次读日志)
MSYS_NO_PATHCONV=1 node docs/tdd/tools/dispatch_251_pytest.cjs kick
MSYS_NO_PATHCONV=1 node docs/tdd/tools/dispatch_251_pytest.cjs read

# 189 admin E2E
MSYS_NO_PATHCONV=1 node docs/tdd/tools/dispatch_189_admin.cjs

9.2 本轮 langgraph 关键证据

  • 50 过 / 1 红(162.22s,0:02:42):红仅 test_auto_tag_content_relevance(tests/test_auto_tag.py:93,assert 500 == 200,chat 端点 500)。
  • 根因(环境型):middleware.py:113 记录 RateLimitError("429 … AgnesAI_error") + chat_graph.py:148 记录 401 api key ****ab12 invalid → 上游配额/凭证未恢复完整,非代码回归。
  • 节点 HEAD d1192b33a = origin/cfclub(与本机一致,零 diff);EXIT= 未落盘(B-126 第 6 轮复现,bash -c 单引号修法待落地)。
  • live 探针:/health 200 3.9ms;POST /api/v1/chat → 422 参数校验快速失败(R170 为 000/90s 挂死 → 节点响应能力恢复,B-170-5 改善)。

9.3 日志噪声与稳定性观测(承袭 R170)

  • cfc-scheduler 线程行数 8255 / 46357(17.8%);SQLSyntaxErrorException 980 次,其中 Key column 'product_id' doesn't exist 与 Unknown column 'a.id' 各 28 次(= 上下文启动次数,B-156-1 / B-170-1);Duplicate key name 系列各 28 次(幂等 index 重复,属正常但应由 ensureIndex 吞掉而非抛到日志)。
  • dump 文件 0 个 → 无 JVM crash。