report-test-2026-11-10-R130.md 18 KB

测试负责人工作汇报 · 第 130 轮(2026-11-10 20:04~20:5x)

执行档:review(内网 cfc.iwintrue.com/admin + /frontend 已授权浏览器自动化;langgraph@251 分派;未联网装依赖、未启停服务、未改生产代码) 基线 HEAD:df6c57a12(= 起点 origin/cfclub;跑测期间分支未漂移,收尾时 origin 前进至 e759ba830=仅 docs 汇报,后端/前端/ai 源码窗口内 零变更) 分工:189=admin-desktop 浏览器套件|本机=frontend-mobile / shop-api / health 浏览器套件 + Jest|251=langgraph pytest(实派)|204=失联(B-95 第 6 轮) 结论:⛔ 不通过(有条件) — 核心三项延续(G2 红例 54 / G9 锚点 9.9% / G11 无 CI);B-90 langgraph live chat 挂死 9 轮后首次恢复(2/2 × 200)


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

轮次 时间 后端全量 langgraph@251 浏览器 结论
R127 11-10 17:30 2865/2828/33 红 43/43 全绿 28/28 不通过(有条件)
R128 11-10 18:08 2865/2828/33 红 43/43 全绿 28/28 不通过(有条件)
R129 11-10 19:40 2865/2828/33 红(零漂移) 35/43 → 37/43(429 复发) 28/28 不通过(有条件)
R130(本轮) 11-10 20:5x 2865/2828/33 红(第 5 次零漂移) 38/43(5 红全为 429 环境红,定向复跑 5 红稳定复现) 28/28 不通过(有条件)
  • 本轮为该对象第 130 轮持续闭环审查,非首次审查。
  • 与 R129 对比:后端逐类逐例零漂移(33 红例集合完全一致,14 红类一致);langgraph 37→38 绿(唯一变化来自 429 配额窗口);浏览器维持 28/28。
  • 本轮最重要变化:B-90 销号(langgraph live /api/v1/chat 连续 9 轮 90s 零字节,本轮 2/2 返回 200 正文;/api/v1/analyze 亦 200)。但不等于 B-74/B-129 已修——同一实例在 20:07~20:17 的 pytest 中仍 6 次 429,两者是不同失效面(LLM 上游配额 vs 端点挂死)。

2. 项目画像速览

  • 业务:浠艾福 XAF —— 家庭教育 SaaS(家庭成员 / 五维能量 / 成长规划师 / 健康报告解析 / 商城分佣 / AI 管家)。
  • 技术栈:cfc-backend(Spring Boot 2.7.18 + MyBatis-Plus + Java 8,9082)· cfc-web(Vue2 + ElementUI,8082)· cfc-frontend(uni-app H5/小程序)· cfc-langgraph(FastAPI + LangGraph + Chroma,9000,部署 192.168.16.251)· dan/danshop(独立商城 8888)。
  • 关键路径:登录/家庭邀请 → 五维测评 → 成长任务审批 → 健康报告上传解析 → 商城下单分佣(CF)→ AI 对话。
  • 测试现状:后端 339 测试类 / 2865 例(全量可跑,46:17);前端 Jest 26 套件 426 例;管理端 Jest 17 套件 116 例;根级黑盒 23 例;浏览器 live 28 例;langgraph 43 例(251 实派)。
  • 质量目标:20 类全覆盖、G1≥95%、G2≤10 红、G6 28/28、G7 0 红、G9≥80%。
  • 风险点:后端 33 红长期未闭环(第 5 次零漂移 → 研发窗口零进展);LLM 上游 429 配额不稳;204 节点失联;无 CI 全量门禁。

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

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

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

# 维度 命令/方式 节点 结果
1 后端全量 mvn -o -B clean test(JDK1.8.0_25 + Maven 3.6.1) 本机 339 类 / 2865 例 / 2828 过 / 30F+3E+4S / 33 红 = 98.71%(剔 skip 98.85%),46:17,BUILD FAILURE(仅测试红);339/339 XML 无沉默;testCompile 345 源 0 错;target/classes 2325
2 恒等式核对 源码统计 本机 @Test 2854 − @Disabled 4 + 参数化/早退净增 15 = 2865,误差 0
3 红例集合比对 与 R129 JSON 逐例 diff 本机 零漂移:ArticleAutoTag 4 / CfCommissionSettle 8 / DimensionRegistryMap 3 / EnergySystem 6 / GrowthRecordSync 3 / GuideModule 1 / MembershipPaySwitch 1 / OrchestrationEngine 1 / OrchestrationIntegration 1 / PaymentORD 1 / TaskPlan 1 / TeamProfitCron 1 / UserWechatLogin 2 = 33
4 cfc-web Jest CI=true npx jest --ci --runInBand --coverage 本机 ✅ 17 套件 / 116 例全绿(169.7s);覆盖率 10.09 / 6.12 / 7.50 / 9.97
5 cfc-frontend Jest CI=true npx jest --ci --runInBand 本机 ✅ 26 套件 / 426 例 = 423 过 / 3 skip / 0 红(46.5s)
6 根级黑盒 Jest npx jest -c tests/jest.config.js --ci 本机 ⚠️ 23 例 = 7 过 / 16 红(ECONNREFUSED 9082 未启,B-36 第 32 轮零漂移)
7 管理端 UI E2E playwright -c live --project=admin-desktop 189 ✅ 5/5(1.4m,TC-A-U01~U05 含滑块 + 真实登录入主框架)
8 小程序 H5 E2E --project=frontend-mobile 本机 ✅ 6/6(57.3s,TC-F-U01~U06)
9 商城排序契约 --project=shop-api 本机 ✅ 4/4(15.1s,TC-S-U01~U04)
10 健康鉴权契约 -c playwright.config.health.js 本机 ✅ 13/13(9.9s,含 health/plan/generate 401)
11 线上鉴权探针 curl -X POST 4 端点匿名 本机 ✅ 4/4 = 401(B-69 销号维持第 4 轮)
12 langgraph pytest 251 POST /api/shell 实派 + setsid 分离落盘 251 ⚠️ 43 例 / 38 过 / 5 红 / 150.93s(R129 为 37 过);5 红 = auto_tag 3 + intent 2,全为 429
13 langgraph 定向复跑 251 复跑 test_auto_tag.py + test_intent.py 251 ⚠️ 10 例 / 5 过 / 5 红 / 67.42s(红集合与首跑一致,429 稳定复现)
14 ★ langgraph live chat POST /api/v1/chat(query/user_id/conversation_id) 本机→251 ✅ 2/2 HTTP 200:25.53s / 703B、13.03s / 215B(9 轮零字节后首次恢复)
15 ★ langgraph live analyze POST /api/v1/analyze 本机→251 ✅ HTTP 200 / 4.20s / 1019B
16 节点探活 curl 4 节点 251:4096=200 / 251:9000 /health=200(6.8ms) / 189:4090=200 / 204:4090=000(B-95 第 6 轮)

合计:3501 例 / 3440 过 = 98.26%(红 54 = 后端 33 + 根级 16 + langgraph 5),skip 7。

langgraph 5 红证据(/tmp/r130_pytest.log 与 /tmp/r130b_pytest.log)

  • test_auto_tag.py::test_auto_tag_content_relevance / short_content / empty_content — 端点返回 500(assert 500 == 200)
  • test_intent.py::test_classify_analysis / test_classify_mind — assert <Intent.CHAT> == <Intent.ANALYSIS>
  • 两文件日志均命中 RateLimitError("Error code: 429 ... You've reached the API rate limit for free users ... AgnesAI_error"),intent_classifier.py:62 捕获后默认回落 chat → 断言失败的直接表现被包装成「分类错误」,实际根因是上游配额。
  • 归类:C 环境红(LLM 配额 429),非代码回归(窗口内 cfc-langgraph/app 与 tests 零 commit)。

5. 覆盖缺口清单

# 缺口类型 现状 风险 建议测试设计 优先级 闭环方式
G-130-1 LLM 上游配额不稳 pytest 6 次 429;live chat 却 200 红线误判为产品回归 LLM 依赖用例标 @pytest.mark.llm,CI 拆为非门禁套件;断言侧区分 401/429 环境异常 P0 运维升级 Token 计划后连跑 2 轮全绿
G-130-2 后端 33 红 第 5 次零漂移,研发窗口零进展 产品回归无法区分 逐类修复 + 每轮集合比对(已脚本化) P0 研发修完复跑该类 + 全量,连 2 轮绿销号
G-130-3 锚点率 TC 827 行 / 唯一 TC ID 57 / 指向可执行用例 82(9.9%) 用例→代码追溯弱 锚点口径固化为「TC 末列含可执行用例名或 spec 路径」 P2 研发补锚点至 ≥80%
G-130-4 场景覆盖 SC 244 / 被 TC 引用 149(61.1%) 95 个场景无用例 按未引用 SC 生成用例骨架 P1 补 95 场景的 TC 映射
G-130-5 CI 全量门禁 无 CI 跑全量 回归无法自动拦截 落地 CI 全量 job(需联网建管道,未授权) P1 研发/运维建 pipeline
G-130-6 204 节点 :4090 连续 6 轮 000 无第三节点冗余 204 恢复前维持 189+本机拆跑 P2 运维恢复
G-130-7 用例更新纪律 SRS / 场景 / API_REFERENCE 窗口零变更 → 未新增用例 — 变更触发流程(合规) — 已满足(G12)

6. 域结论表

审查维度 负责专家 结论 关键证据
单元·组件级 苏雅 可用 后端 2865 例 46:17 全量可跑;web 116 / fe 426 全绿;变异测试缺失
集成·接口级 柯砚 有缺口 integration 红类与 R129 逐例一致;契约 17/17 绿(health 13 + shop 4)
系统·验收级 白樾 ✅ 本轮绿 浏览器 live 28/28(189+本机);UAT/BDD 证据缺
测试保障级 闻朔 ✅ 零回归 后端第 5 次零漂移;web/fe 零漂移;冒烟面全绿
性能·可靠性 骆骋 未授权未执行 压测未做;429 配额窗口观察
安全 关屿 静态趋稳 + 动态缺失 鉴权 4/4 = 401;SAST/DAST/SCA 未授权未执行
兼容·体验 阮清 待核实 单 Chromium;无可用性/无障碍证据
流程·度量·代码 何序 有缺口 锚点 9.9%、场景 61.1%、@GetMapping 8 处、无 CI
langgraph 专项(251 实派) 陆谨汇总 ⚠️ 环境红 38/43;5 红全为 429;live chat/analyze 200

7. 五要素问题清单

P1-1 后端 33 红(G2,第 5 轮零漂移)

  1. 问题描述:2865 例中 33 红(30F + 3E),14 个测试类,与 R129/R128/R127 逐例完全一致;窗口内后端源码零 commit,故为存量缺陷而非新回归。
  2. 测试 bug 点:ArticleAutoTagServiceTest(4)、CfCommissionServiceSettleTest(8)、DimensionRegistryMapContractTest(3)、EnergySystemFlowTest(6)、GrowthRecordSyncFlowTest(3)、GuideModuleIntegrationTest(1)、MembershipPaySwitchTest(1)、OrchestrationEngineTest(1)、OrchestrationIntegrationTest(1)、PaymentServiceORDRoutingTest(1)、TaskPlanServiceTest(1)、TeamProfitCronContractTest(1)、UserServiceWechatLoginContractTest(1)、UserServiceWechatLoginTest(1);清单见 _r130_agg.json。
  3. 最优修改方案:按类分三批——① 产品类(EnergySystem 6×500、Orchestration 2、MembershipPay 1、PaymentORD 1、WechatLogin 2、TeamProfitCron 1)由研发定位实现;② 装置类(CfCommission 8、ArticleAutoTag 4、GrowthRecordSync 3、TaskPlan 1)由测试侧对齐 mock/夹具;③ 契约待裁决(DimensionRegistryMap 3)由研发确认 P-9 口径后二选一。
  4. 修改目的:使 G2 ≤10 红,令全量通过率成为可信门禁而非「存量噪声」。
  5. 闭环方式:每类修复后定向复跑该类,连续 2 轮绿 + 全量零漂移集合变小即销号。

P1-2 langgraph LLM 429 配额(B-74 / B-129 延续,第 3 轮)

  1. 问题描述:251 实派 43 例,5 红(auto_tag 3 + intent 2);定向复跑同 2 文件 10 例仍 5 红;两次日志均 6 次 RateLimitError 429 (AgnesAI_error)。同实例 live /api/v1/chat 20:20 起却 2/2 返回 200。
  2. 测试 bug 点:tests/test_auto_tag.py(3 例,断言 500 == 200)、tests/test_intent.py::test_classify_analysis / test_classify_mind;源码 app/agents/intent_classifier.py:62 捕获异常后 默认 chat,把 429 包装成「分类错误」。
  3. 最优修改方案:① 运维升级 251 LLM Token 计划或轮换配额充足凭据;② intent_classifier 在 429/401 时抛 ExternalServiceError 而非静默回落,测试断言可直接区分「环境异常」与「分类错误」;③ 用例加 @pytest.mark.llm,CI 拆非门禁套件。
  4. 修改目的:避免上游配额波动被统计为产品回归,保住 G2/G7 的红线语义。
  5. 闭环方式:运维换凭据后 251 连跑 2 轮 43 例全绿即销号。

P1-3 根级黑盒 16 红(B-36 第 32 轮)

  1. 问题描述:npx jest -c tests/jest.config.js → 7 过 / 16 红,全部 ECONNREFUSED 127.0.0.1:9082(本机后端未启动)。
  2. 测试 bug 点:tests/integration/mini-games-api.spec.js(13)、tests/integration/plan-chain.spec.js(3)。
  3. 最优修改方案:起本机 9082(或注入 API_BASE_URL 指向 cfc.iwintrue.com)后重跑,以区分真红/环境红;同时补 tests/.env.test 凭据夹具(B-16)。
  4. 修改目的:消除环境噪声对红例统计的干扰(当前占总红 30%)。
  5. 闭环方式:9082 探活 + 重跑 23 例,红数归零或全部转「真实断言失败」即闭环。

P1-4 G9 锚点率 9.9%(B-124 第 4 轮)

  1. 问题描述:tests/test-cases/*.md 827 行 TC、唯一 TC ID 仅 57、指向可执行用例 82 个 → 锚点率 9.9%,远低于 80% 目标。
  2. 测试 bug 点:docs/tdd/tools/test_report_metrics.py 三套正则口径未统一(严格 17.1% / 宽松 28.3% / 可执行 9.9%)。
  3. 最优修改方案:在 tests/test-cases/README.md 固化「TC 行末列必须为可执行用例名或 spec 路径」,并用脚本校验新增 TC 合规。
  4. 修改目的:让「用例→代码」可双向追溯,使覆盖结论可验证。
  5. 闭环方式:脚本校验锚点率 ≥80% 并纳入每轮度量。

P1-5 204 节点失联(B-95 第 6 轮)

  1. 问题描述:192.168.16.204:4090 连续 6 轮 HTTP 000;189 / 251 均正常。
  2. 测试 bug 点:不涉及代码,属节点运维。
  3. 最优修改方案:运维恢复 204 的 opencode 服务;恢复前浏览器任务维持 189(admin)+ 本机(fe/shop/health)拆跑。
  4. 修改目的:恢复第三节点冗余,避免单节点故障导致浏览器面归零。
  5. 闭环方式:204:4090 返回 200 后实派一次 admin 套件通过即销号。

8. 门禁结论

⛔ 不通过(有条件)

门禁 阈值 本轮 判定
G1 全量通过率 ≥95% 98.26%(后端 98.71%) ✅
G2 红例数 ≤10 54(后端 33 + 根级 16 + langgraph 5) ❌
G3 前端 Jest 0 红 426 = 423 过 / 3 skip / 0 红 ✅
G4 管理端 Jest 0 红 116/116 ✅
G5 编译 / 产物完整性 0 错 / 无沉默 345 源 0 错;339/339 XML;classes 2325 ✅
G6 浏览器硬契约 28/28 28/28 ✅
G7 langgraph 红 0 5(全 429 环境红) ❌
G8 鉴权 / 契约 0 红 4/4 = 401 + health 13/13 ✅
G9 TC 锚点率 ≥80% 9.9% ❌
G10 节点分派 251 + 189 251 pytest ✅ / 189 admin ✅ ✅
G11 CI 全量 有 无 ❌
G12 用例随 SRS 更新 变更即更新 SRS/场景/契约零变更 → 无需更新 ✅

正向:浏览器 live 28/28(189 admin 5/5 + 本机 fe 6/6 + shop 4/4 + health 13/13);web/fe Jest 542 例零红;后端第 5 次逐例零漂移;B-90 langgraph live chat/analyze 恢复 200(9 轮后首次);B-69 鉴权 4/4 维持销号。

阻断:① 后端 33 红 5 轮零进展;② langgraph 429 配额(3 轮);③ 根级 16 环境红;④ G9/G11 长期不达标;⑤ 204 失联。

复评条件:① 研发逐类修后端 33 红;② 运维升级/轮换 LLM 凭据后 251 连跑 2 轮全绿;③ 起 9082 后根级 23 例重跑;④ 锚点补至 ≥80%;⑤ 204 恢复。


9. 下一步(R131 重点)

  1. 复验 langgraph 43 例(关注 429 是否随配额窗口消退),live chat 连续 3 次 <30s 即正式销 B-90。
  2. 推动研发:后端 33 红按「产品类 14 / 装置类 16 / 契约 3」分批修复(G2)。
  3. 推动运维:LLM 配额、204 节点。
  4. 启动 G9 锚点补录(95 个未引用 SC 优先)。
  5. 浏览器维持 189 + 本机双节点 28/28。