report-test-2026-11-10-R125.md 22 KB

测试闭环报告 · 第 125 轮(2026-11-10 14:55 GMT+8)

主理人:陆谨(软件测试专家团 · 测试架构师) 执行档:review 档(内网 cfc.iwintrue.com 已授权;无联网外部请求;未装依赖;未改生产代码) 对象:d:/cfc(浠艾福 XAF) 触发:定时自动化「测试负责人闭环(全部用例通过 + 覆盖 SRS/场景含异常流)+ 浏览器走 /admin 与 /frontend(189/本机每节点单任务)+ langgraph 派 251 + 结果有变提交远程并通知研发」


0. 本轮结论速览

项 值
基线 cfclub @ 75bf2c841(pull --rebase 后与 origin 同步;R124 后源码零变更)
全量用例 3501 例 / 3445 过 = 98.40%(红 49 / 跳过 7)
对比上轮(R124 98.37% / 3444 过) langgraph 红例 1→0(+1 过),其余套件零漂移
后端全量 采信 R124(源码零变更):2865 例 / 2828 过 = 98.71%,30F+3E+4S,14 红类 / 33 红例
浏览器自动化 28/28 全绿(live 15 + health 13)
langgraph @ 251 43 例 / 43 过 / 0 红(756.13s)——B-74 连续 22 轮红例后首次全绿
门禁 不通过(有条件) — 见 §9

三件必须让研发看到的事

  1. langgraph@251 首次全量全绿(B-74 重大转机):R103~R124 连续 22 轮 test_auto_tag.py 5 例红(LLM API key 401,红例名 content_relevance/valid_format 漂移)后,本轮 43/43 全绿(0 红,756.13s)。251 已 git reset --hard origin/cfclub(f5a014a46)对齐远端。按判据需连续 ≥2 轮全绿才销号,本轮为观察第 1 轮无复现。
  2. B-123 达销号判据(连续 3 轮探针通过):R123/R124/R125 三轮均前置环境探针(java 1.8.0_25 / Maven 3.6.1 / 磁盘充足)且无「凭记忆判环境」导致的 Maven 类降级 → 销号。
  3. B-121 销号后持续稳定:TC-A-U05 本轮 56.7s 通过、首轮即绿无重跑(R124 销号后第 1 轮),「admin 登录滑块偶发自愈」结论成立。

1. 历史审查记录

项 内容
上次本对象审查 R124 @ 2026-11-10 14:20(67b5f6325,即本轮起点 HEAD 前身)
上次结论 不通过(有条件):G2 50 红 / G7 langgraph 1 红(凭据 401)/ G9 锚点 / G11 无 CI
上次遗留缺口 ① B-74 LLM 凭据 401(已实锤、未闭环)② B-125 派发等待未自适应 ③ 覆盖率/变异/压测/安全 长期未实测
本次是否改善 ① B-74 首次全绿(观察第 1 轮) ✅ ② B-123 连续 3 轮 → 销号 ✅ ③ B-125 继续观察(本月度工具改进项)④ 未变(execute 档未授权)
是否首次审查 否。同对象已连续审查 ≥125 轮

本节仅作对照。本轮全部结论均以本轮实测取证;仅「后端全量」因源码零变更采信 R124 实跑结果(纪律允许),并仍以 R124 红类清单为口径。


2. 项目画像

维度 结论
业务定位 家庭教育 SaaS:家长/孩子(能登录/不能登录用户)双角色、成长规划师、五维能量、健康报告解析、测评订单、商城、AI 管家
技术栈 后端 Spring Boot 2.7.18 + MyBatis-Plus + Java 8(9082);小程序 uni-app Vue2;管理端 Vue2 + Element UI;AI 侧 Python FastAPI + LangGraph + ChromaDB(9000,生产 ai.etotem.com.cn);独立商城 Spring Boot(8888)
规模(本轮实测) 测试文件 345、@Test 2853、控制器 363、handler 1969(覆盖 442=22.5%);SRS 规格 200 份
关键路径 登录鉴权(JWT 拦截 + 8 公开路径)→ 家庭成员/关系 → 成长任务与能量 → 健康报告上传-解析-入库 → 测评订单 → 商城下单/分润 → AI 对话/画像
质量目标 全量用例通过率、SRS/场景锚点覆盖、线上鉴权契约、浏览器双端可用性、跨节点可派发
本轮风险点 后端 33 红(A 装置 16 + B 产品 13 + C 数据 1 + 契约 3)待派单;G9 锚点率 17.1%(B-124 未闭环);189 节点仓库陈旧(B-122);251 派发等待时长未自适应(B-125)

3. 20 类测试覆盖矩阵

图例:● 已发现(有资产且有本轮/近期实测证据)/○ 未发现(扫描未命中)/◐ 待核实(有资产但本轮未实测或被降级)

# 类别 状态 证据
1 单元测试 ● 后端 2865 例(采信 R124 实跑);cfc-web 116、cfc-frontend 426 Jest 本轮实跑
2 组件测试 ● 后端 *ControllerTest(MockMvc)+ 前端 Vue 组件 __tests__
3 接口 API 测试 ● health 契约 13 例(全 401)+ shop-sort 4 例本轮实跑
4 系统 / 端到端 ● /admin 5 例 + /frontend 6 例真浏览器实跑(Playwright 1 worker)
5 验收 UAT ◐ 198 场景文档映射存续,无独立 UAT 执行记录(凭据不全)
6 冒烟测试 ● 每轮固定 28 例 live/health 冒烟;本轮全绿
7 回归测试 ● 后端全量 + 三套 Jest + 浏览器 = 本轮回归基线
8 探索性测试 ○ 无 chartered 探索会话记录
9 契约测试 ● health 13 + shop-sort 4 + 后端 *ContractTest(DimensionRegistryMap 3 红待裁决等)
10 性能测试 ○ 无压测脚本与基线(execute 档,需联网授权)
11 可靠性测试 ○ 无故障注入/恢复演练
12 安全测试 ◐ 鉴权契约 23 端点实测(全 401);SAST/DAST/依赖扫描未执行
13 兼容性测试 ◐ 仅 Chromium;多浏览器/多机型矩阵未执行
14 可用性测试 ○ 无真实用户可用性证据
15 无障碍测试 ○ 无 WCAG 检查
16 覆盖率度量 ◐ 后端 JaCoCo 离线不可用;handler 覆盖 442/1969=22.5%(静态口径)
17 变异测试 ○ 无 PIT/mutation 配置
18 质量指标 ● 通过率/红例分布/桶分布本轮重算(§8)
19 QA 流程 ● 自动化闭环 125 轮可追溯;门禁脚本化不足(G11)
20 代码审查 ● 本轮抽检后端红类清单与 R124 一致(14 红类)

4. 测试方案(本轮实际执行)

项 内容
目标 验证 R124 后是否零漂移;重点复核 langgraph B-74 红例;SRS/场景变更检测;浏览器双端可用性
范围 浏览器 live 15 + health 13、cfc-web 17 套、cfc-frontend 26 套、根级 3 套、langgraph@251 43 例;后端采信 R124(源码零变更)
覆盖维度 功能层次 5 类 + 功能保障 4 类 + 非功能鉴权(部分)
执行档 review(离线白名单);内网 HTTP 探针与 cfc.iwintrue.com 浏览器访问均属已授权范围
优先级 P0:浏览器双端 + 鉴权契约 + 251 派发;P1:前端 jest;P2:台账刷新
排除项 压测、DAST/SCA、变异、多浏览器矩阵、UAT 全流量(未授权/无凭据)——报告中标「未实测」,不计通过

5. 执行结果明细

5.1 后端全量(采信 R124,源码零变更)

项 值
结果(R124 实跑) 2865 例 / 2828 过 / 30F + 3E + 4S = 98.71%(34:03)
红类 / 红例 14 类 / 33 例
完整性 surefire XML 339/339,沉默 0
本轮采信依据 git diff 167387161..HEAD -- src 全模块 为空(仅 docs + bump/changelog)

33 红三层归因(与 R124 逐类一致):A 装置 16(CfCommission 8 / ArticleAutoTag 4 / GrowthRecordSync 3 / TaskPlan 1)· B 产品 13(EnergySystem 6 / Orchestration 2 / MembershipPaySwitch / PaymentORD / WechatLogin 2 / TeamProfitCron)· C 数据 1(GuideModule platform_fee)· 契约待裁决 3(DimensionRegistryMap)。

5.2 前端 / 管理端 / 根级(本轮实跑)

套件 套件数 例数 过 红 跳过 与基线
cfc-web Jest 17 116 116 0 0 零漂移
cfc-frontend Jest 26 426 423 0 3 零漂移
tests 根级 Jest 3 23 7 16 0 零漂移(B-36,9082 未启动)

5.3 浏览器自动化(workers=1,单节点单任务)

套件 例数 结果 耗时
admin-desktop(/admin) 5 5/5 U04 9.5s / U05 56.7s(首轮即绿)
frontend-mobile(/frontend) 6 6/6 3.3~9.1s
shop-api 4 4/4 59~147ms
health-api(契约) 13 13/13 4.1s(全 401)

合计 28/28 全绿,与 R118/R120/R123/R124 基线一致。

5.4 langgraph @ 192.168.16.251(实派)

项 值
通道 _r125_dispatch_251.cjs(kick 分离写盘 → sleep 620s → 单次读),port 4096
节点 HEAD f5a014a46(随 kick 内 git reset --hard origin/cfclub 对齐远端)
结果 43 passed / 0 failed / 8 warnings in 756.13s
对比 R124 R124 42/1(auto_tag_valid_format,LLM 401)→ 本轮 B-74 红例首次消失
观察 待连续 ≥2 轮全绿后按判据销号(本轮为第 1 轮全绿)

5.5 节点可达性

节点 端口 结论
本机 — 浏览器 28/28 全量承担(单任务)
192.168.16.189 4090 OPEN 不可承载(B-122 第 3 轮):仓库 feature/user-is-child @ e3e52ca38、`tests\e2e-live=False → 未派发
192.168.16.251 4096/9000 OPEN langgraph 实派成功(43/43 全绿)
192.168.16.204 — 延续失联(B-95)

5.6 线上鉴权与可达性(curl 探针)

目标 结果
GET http://cfc.iwintrue.com/admin 302(登录墙)
GET http://cfc.iwintrue.com/frontend 302
POST /api/mind/fortune(匿名) 401(B-69 维持销号)
POST /api/energy/overview(匿名) 401

6. 覆盖缺口清单

编号 缺口类型 现状 风险 建议测试设计 优先级 闭环方式
G-125-1 性能测试 无脚本无基线 健康报告解析/AI 对话为长耗时链路 k6 对 POST /api/health/report/upload、/api/v1/chat 做 20/50 并发阶梯,记录 P95 P2 execute 档授权后执行
G-125-2 可靠性 无故障注入 EnergySystem 500 类问题生产直接暴露 MySQL 断连 + LLM 超时各注入 1 次,断言降级 P2 与研发约定注入窗口
G-125-3 安全扫描 仅鉴权契约 覆盖仅 23 端点未鉴权路径 SAST(Semgrep)+ 依赖漏洞(mvn dependency-check) P2 execute 档授权
G-125-4 兼容性/无障碍 仅 Chromium 小程序多机型、WCAG 均空 Playwright 加 firefox/webkit;axe-core 扫 /admin 5 页 P3 增配置后纳入冒烟
G-125-5 覆盖率 后端 JaCoCo 离线不可得 通过率≠行覆盖率 预置 jacoco agent 后 mvn test jacoco:report P1 预置依赖后补测
G-125-6 变异测试 无 高通过率可能掩盖弱断言 EnergySystemService/CfCommissionService 引 PIT,kill ≥60% P3 专项排期
G-125-7 UAT / BDD 198 场景仅文档映射 场景与断言未一一绑定 锚点规范落到 tests/test-cases,每场景 ≥1 可执行断言 P1 B-124
G-125-8 A/B 类红例 后端 33 红连续多轮零漂移 真实产品缺口被装置红掩盖 批量派研发处置 B 类 13 例 + 测试侧自修 A 类 16 例 P0 派单 + 自修双线
G-125-9 根级黑盒 23 例 16 红(ECONNREFUSED) 环境未起被计为产品失败 根级套件加 beforeAll 探活 skip P1 B-36

7. 域结论表

审查维度 负责专家 结论 关键证据
单元·组件级 苏雅 有条件通过 后端 2865 例 98.71%(采信 R124);14 红类(A 装置 16 阻塞口径);web 116/116、frontend 423/426
集成·接口级 柯砚 不通过(局部) 契约 23 端点全 401 ✅;DimensionRegistryMap 3 例待裁决、platform_fee 1 例
系统·验收级 白樾 有条件通过 浏览器 28/28 ✅;UAT 全流量未执行(无凭据)
测试保障级 闻朔 通过 冒烟 28/28;回归全量连续多轮可复跑;探索性缺失(登记缺口)
性能·可靠性 骆骋 未实测(降级) execute 档未授权 → G-125-1/2
安全 关屿 有条件通过 匿名 23 端点全 401(含 /api/mind/**,维持销号);SAST/SCA 未执行
兼容·体验 阮清 未实测(降级) 仅 Chromium;无 axe/WCAG → G-125-4
流程·度量·代码 何序 不通过(局部) @GetMapping 8 处仍违规范;G9 锚点 3 套口径未统一(B-124);B-125 等待未自适应

8. 五要素问题清单

#1 langgraph B-74 首次全绿——观察而非销号(根因仍待凭据确认)

  • ① 问题描述:R103~R124 连续 22 轮 test_auto_tag.py 红例(LLM API key ****ab12 401)后,本轮 251 实派 43/43 全绿(0 红)。红例名漂移(content_relevance→valid_format)本轮消失;test_analyze/test_intent 同步全绿。
  • ② 测试 bug 点:cfc-langgraph/tests/test_auto_tag.py(5 例依赖 LLM 语义输出,历史在主断言无固定桩时随凭据状态漂移)。
  • ③ 最优修改方案:① 运维确认 251 上 LLM 凭据状态(是否已轮换/注入),如已轮换则稳定闭环;② 测试侧按 R124 建议把主断言改确定性桩(mock 固定标签集)+ @pytest.mark.llm 真链路冒烟;③ 251 .venv 装 pytest-timeout 防挂起(B-125 同源)。
  • ④ 修改目的:把「凭据/网络」与「打标逻辑回归」彻底分离,使该维度可稳定门禁;凭据轮换解决的是线上 LLM 能力可用性(直接影响真实用户)。
  • ⑤ 闭环:下轮(R126)251 复跑连续第 2 轮全绿 → 按判据销号;或凭据轮换后 5/5 稳定绿。

#2 B-123 达销号判据(连续 3 轮探针通过)

  • ① 问题描述:R122 曾以「本机无 Maven」降级致后端整模块漏测;R123~R125 三轮均前置环境探针(java/mvn/df)且实测通过。
  • ② 测试 bug 点:SOP(已修复,探针输出入报告固定节)。
  • ③ 最优修改方案:维持「每轮固定探针,未跑探针不得写降级」。
  • ④ 修改目的:杜绝「凭记忆判环境」导致整模块漏测。
  • ⑤ 闭环:连续 3 轮达成 → 本轮销号(B-123-Update 已登记)。

#3 A 类夹具 16 红(装置缺陷,非产品)

  • ① 问题描述:CfCommissionServiceSettleTest 8、ArticleAutoTagServiceTest 4、GrowthRecordSyncFlowTest 3、TaskPlanServiceTest 1 红(Wanted but not invoked / execute 未命中 / NPE)。
  • ② 测试 bug 点:CfCommission...settle_* 8 例;ArticleAutoTag...toggleStatus_* 4 例。
  • ③ 最优修改方案:CfCommission 逐例核对 mock 方法签名与生产 7 参 overload;ArticleAutoTag 注入同步 Executor 替身;TaskPlan 补齐 @Mock 返回值;GrowthRecordSync 读 Caused by 最内层。
  • ④ 修改目的:16 红退出统计,暴露真实产品缺口。
  • ⑤ 闭环:定向复跑 4 类全绿(mvn -Dtest 精确集)。

#4 B 产品 13 红(连续多轮零漂移,可批量派单)

  • ① 问题描述:EnergySystemFlowTest 6(5×500)、Orchestration 2、MembershipPaySwitch 1、PaymentORD 1、WechatLogin 2、TeamProfitCron 1——与 R123/R124 逐例同名同型,连续 3 轮零漂移。
  • ② 测试 bug 点:EnergySystemFlowTest:parentGetsEnergyOverview_Success 等 6 例;TeamProfitCronContractTest:refundWithinCooling_cancelAllRecordsFundsNotPaid。
  • ③ 最优修改方案:EnergySystem 5 例 500 抓服务端堆栈定位(疑 DB/事务);TeamProfitCron 冷静期退款未置 cancelled 核对 §8.2 实现;WechatLogin 2 例疑 mock 凭据缺失。
  • ④ 修改目的:把「疑似产品缺陷」转成可派研发的具体缺陷单。
  • ⑤ 闭环:对应类 0 红 + 线上同路径 200。

#5 platform_fee 列溢出(C 数据,第 14 轮)

  • ① 问题描述:GuideModuleIntegrationTest 写库报 Data truncation: Out of range value for column 'platform_fee'。
  • ② 测试 bug 点:GuideModuleIntegrationTest::testGuidePackageCreationFlow(造数金额超出列宽)。
  • ③ 最优修改方案:核对 guide_order.platform_fee 列类型与业务上限;合法则扩列(DatabaseInitializer 迁移 + schema.sql 同步),否则修造数。
  • ④ 修改目的:避免真实大额订单写库失败。
  • ⑤ 闭环:迁移后该类转绿 + 边界值(上限 ±1)复测。

#6 DimensionRegistryMap 契约 3 例待裁决

  • ① 问题描述:unknown_legacy/empty 期望 data=null 实为原值/空串;missing 期望 400 实为 200。
  • ② 测试 bug 点:DimensionRegistryMapContractTest 三例。
  • ③ 最优修改方案:产品/研发对「未知 legacy 键」语义拍板,单向修正契约或用例,写入 SRS。
  • ④ 修改目的:消除长期悬空契约。
  • ⑤ 闭环:契约条款落 SRS 后 3 例按新条款全绿。

#7 根级黑盒 16 红(B-36,第 28 轮零漂移)

  • ① 问题描述:tests/ 根级 23 例稳定 7 绿 / 16 红,全部 ECONNREFUSED(后端 9082 未启动)。
  • ② 测试 bug 点:tests/integration/*.spec.js 硬编码 http://127.0.0.1:9082,无「服务未起则 skip」保护。
  • ③ 最优修改方案:beforeAll 探活,未起则 test.skip + 打印启动指引。
  • ④ 修改目的:消除「环境未起被计为产品失败」的长期噪声。
  • ⑤ 闭环:连续 1 轮根级 0 红(或 16 例显式 skip 而非 fail)。

#8 251 派发等待时长未自适应(B-125 第 3 轮观察)

  • ① 问题描述:本轮首读 sleep 620s 仍只读到 35 个点(pytest 756.13s 未写完,缓冲未 flush),需第 2 次探活读取。
  • ② 测试 bug 点:_r125_dispatch_251.cjs 固定 WAIT_MS,无「pytest 进程退出」判据。
  • ③ 最优修改方案:等待循环改为「探测 pytest 进程存活,退出后再读文件」;或装 pytest-timeout 限制 LLM 网络重试挂起时长。
  • ④ 修改目的:首读取回率从 ~50% 提到 ~100%,减少往返。
  • ⑤ 闭环:同一脚本连续 2 轮首读即得完整 summary。

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 无沉默 采信 R124:343 源 0 错、339/339 ✅
G6 浏览器 28/28 28/28 ✅
G7 langgraph 0 红 0 红(43/43,B-74 观察第 1 轮) ✅(观察)
G8 鉴权契约 全 401 23/23(含 /api/mind/**) ✅
G9 SRS 锚点 ≥80% 17.1%(严格) ❌
G10 双节点派发 251 + 189 均实派 251 ✅ / 189 ⚠️(B-122 第 3 轮) ⚠️ 部分
G11 CI 含后端全量 存在 blocking 全量 无 ❌
G12 用例入库 本轮有新增/更新 无 SRS 变更 → 不新增(合规) ✅

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

  • 阻塞放行的三项延续:G2 49 红、G9 锚点 17.1%、G11 无 CI 全量。
  • 相比 R124:G1 +0.03pp(langgraph 红例 1→0)、G7 首次全绿(观察第 1 轮)、B-123 销号、B-121 销号后稳定;其余套件严格零漂移。
  • 放行建议:全量多轮零漂移 + 鉴权契约全绿 + langgraph 首次全绿,支持内网灰度;不支撑对外正式发布,除非 G2 中 13 例 B 类产品红有明确结论或在研修复。
  • 建议下步:研发对 13 例 B 类产品红批量派单;运维确认 251 LLM 凭据状态(如已轮换则 B-74 走向销号);测试侧推进 A 类 16 例自修。

10. 窗口内变更登记(SRS 闸门)

检查项 结果
docs/superpowers/specs 200 份 窗口内(14:20→14:55)零变更
docs/tdd/user-scenarios 零变更
docs/superpowers/api/API_REFERENCE.md 零变更
代码侧变更 远端仅 chore: auto bump/研发汇报/docs,零源码变更
结论 不新写用例;SRS→用例映射关系保持,缺口转 §6 G-125-7

11. 度量

指标 值
测试文件 / @Test 345 / 2853
控制器 / handler / 覆盖 363 / 1969 / 442(22.5%)
SRS 规格 / 用例台账 200 / 14
场景(^## 场景) 198(沿用,窗口零变更)
TC 严格 / 宽松 333 / 866(沿用)
可执行 TC 锚点 165
锚点率 17.1%(严格,B-124 沿用口径)

12. 本轮方法论沉淀

  1. langgraph 全绿 ≠ 凭据已修复:连续 22 轮红例后首次全绿,原因可能是 251 git reset --hard 拉到最新代码(f5a014a46)、或 LLM 服务端瞬时恢复。判断依据是「连续 2 轮全绿」而非单轮结果——单轮全绿只能转观察,不销号。
  2. 「pytest 进程退出」优于固定 sleep:620s 仍读到 35 点(缓冲未 flush),探活确认进程退出后才拿到完整 summary——B-125 判据从「固定时长」改为「进程退出 + 文件读完」。
  3. 远端 reset --hard 是双刃剑:251 对齐 origin/cfclub 保证测的是最新代码,但也可能静默丢弃 251 本地未提交实验——每月派发前应确认 251 无 WIP。

报告结束。所有结论以本轮实测数据为准,未沿用历史数字作为通过依据。后端全量采信依据为「源码零变更」纪律,R124 实跑结果仍有效。