_test_closure_report_2026-11-05_2242.md 18 KB

测试闭环报告 — 2026-11-05 22:42 (GMT+8)

自动化任务:0f6cf699-7aa0-4315-b7ed-414efa7e06dd(TDD 多智能体研发测试调度) 主理人:陆谨(软件测试专家团 · 测试架构师) 执行档:review(内网 cfc.iwintrue.com→192.168.16.251 已授权;不联网;不提交、不推送) 当前 HEAD:b32d99e18(继承 22:13 轮基线)| 需求闸门基线:9daeaa660 工具链:Maven 3.9.9 / Java 1.8.0_25 / Node 22 / Playwright 1.63.0(chromium 本地就绪)


一、历史审查记录(本对象历史基线)

本对象非首次审查——自 2026-10-28 起已持续每小时闭环。关键历史结论与遗留缺口(仅作对照,本次结论须重新取证):

项 历史稳定基线 最近一轮(22:13, b32d99e18)
cfc-web Jest 12 套件 / 90 用例 长期全绿 同左,连绿
cfc-backend 全量套件 19:44 轮:1664/1538 通过 / 71 失败 / 51 错误 / 4 跳过(38 红类) 契约复验 79 例 74 绿/3 红/2 错;维度合并首验 28 例 26 绿/2 红(B-18)
内网 E2E /frontend 200 可达;/admin 登录脚本缺口(el-select 身份未点选) 同左,整跑仍被沙箱批量删除守卫阻断
已知遗留 B-13 环境红 8 例(硬编码 127.0.0.1:3306)、112 例契约漂移(34 类)、JaCoCo 缺失、历史 E2E 3 红、Jest 覆盖口径差异 同上 + B-18 新增

上次(22:13)结论:不通过(有条件)。本轮在其基础上推进,结论见第十二节。


二、项目画像(速览,只读)

  • 模块与技术栈:cfc-backend(Spring Boot 2.7.18 + MyBatis-Plus + Java 8,端口 9082)、cfc-web(Vue2 + Element UI 管理端 8082)、cfc-frontend(uni-app 微信小程序)、cfc-langgraph(Python FastAPI + LangGraph)、dan/danshop(独立商城)。
  • 约定:统一 @PostMapping;JWT 拦截 /api/**;DB 迁移唯一入口 DatabaseInitializer.runMigrations();pom.xml 默认 skipTests=true(须 -DskipTests=false)。
  • 可测范围与关键路径:
    • cfc-web:12 个 Jest 测试文件,用 axios-mock-adapter mock API,只验组件/工具逻辑,不断言真实服务端行为。
    • cfc-backend:220 测试类 / 1716 @Test;其中 integration 包为 @SpringBootTest 需真实 DB/Redis,common/config/controller 多为纯单元或 Mockito。
    • tests/:Playwright E2E(69 个 spec)+ integration + unit(node)套件;globalSetup 会执行 reset-db.sh(对目标库做重置,破坏性)。
  • 质量目标:后端 BUILD SUCCESS 且零失败/零错误;真实服务端行为须 E2E 验证;Jest 仅作组件级回归。

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

# 类别 状态 证据
1 单元测试 已发现 backend 220 类/1716@Test;cfc-web 12 jest
2 组件测试 已发现 cfc-web ProductPicker.radio/ProductSkuEditor.mode 等组件测试
3 集成测试 待核实 backend integration 包存在,但本沙箱无测试 DB,不可执行
4 接口 API 测试 已发现 tests/integration/plan-chain、mini-games-api;历史接口冒烟 543 例
5 系统/端到端 E2E 已发现(执行降级) tests/e2e 69 spec;本轮仅做只读探针,未整跑
6 冒烟测试 已发现 历史接口冒烟脚本 543 例;playwright.config.smoke.js
7 回归测试 已发现 每小时闭环复跑即回归机制
8 探索性测试 未发现 仓库未见探索性测试资产
9 契约测试 已发现 DimensionRegistryMapContractTest、AuthWechatLoginContractTest、SC-X-22 契约测试
10 性能测试 未授权未执行 需联网压测,超出 review 档
11 可靠性测试 待核实 未实测(依赖真实环境长稳观测)
12 安全测试 已发现(部分) nonfunc-security.spec.js 2 红;SAST 未跑
13 兼容性测试 未发现 待核实
14 可用性测试 未发现 待核实
15 无障碍测试 未发现 待核实
16 测试覆盖率 已发现(部分) cfc-web jest --coverage 9.5%/5.3%/7.2%;backend 无 JaCoCo,覆盖率不可测
17 变异测试 未发现 未跑
18 静态代码分析 SAST 未发现 未跑
19 依赖漏洞扫描 未授权未执行 需联网,超出 review 档
20 QA 流程 / 代码审查 已发现 本专家团全项目代码审查;gitlab-ci.draft.yml 仅 when:manual,CI 未启用

四、测试方案与执行档

  • 目标:在 review 档内取得可读真实数据,对比历史基线识别新增回归,按 SRS 闸门增量编写/设计测试。
  • 范围:cfc-web Jest(必跑)、cfc-backend 纯单元(必跑)、内网 E2E 只读探针(/admin、/frontend)。
  • 执行档:review(内网已授权,严禁公网)。
  • 优先级:Jest > backend 纯单元 > E2E 探针 >(需联网项全部降级)。
  • 排除项:依赖漏洞扫描、性能压测、Playwright 公网安装浏览器(需联网,未授权)。

五、实测结果(执行范围 / 用例数 / 覆盖率)

维度 本轮实测 说明
cfc-web Jest 12 套件 / 90 用例,全部通过 CI=true npx jest --ci,约 206s;mock API,不断言真实服务端
└ 覆盖率 语句 9.5%(211/2215)、分支 5.3%(136/2578)、函数 7.2%(83/1157) 来自 coverage-final.json;仅 12 文件被覆盖(全仓 239 文件)
cfc-backend 纯单元(本轮实跑) 43 用例 / 43 通过 AdminRolesTest/ResultCodeFactoryTest/TestRoles/AttributionStage1FoundationTest/FamilyAccessInterceptorTest/JwtInterceptorLoginRequiredTest;离线 -o,BUILD SUCCESS
cfc-backend 全量套件(继承基线) 契约 79 例 74 绿/3 红/2 错;维度合并 28 例 26 绿/2 红(B-18);全量 1664/1538/71/51/4(38 红) 取自 22:13 契约复验 + 19:44 全量基线(源码自 19:44 后仅增量,22:13 已复验)
内网 E2E 探针 /admin=302、/frontend=302 均可达 hosts 解析 192.168.16.251 确认;未做整跑(见第十一节降级)
SRS 闸门 触发 自 9daeaa660 起新增 specs(见第六节)

注:backend 纯单元仅覆盖可离线运行的 6 个类;占绝大多数的 @SpringBootTest 集成测试因本沙箱无测试 DB/资源(src/test/resources 为空)不可执行,遵循降级规则标注「未实测」。


六、SRS/需求变更与测试用例编写产出

闸门触发判定:自需求闸门基线 9daeaa660(17:45 设定)起,检测到需求文档新增/修订:

  • aa6ccb2dd 统一维度体系合并(21:07,P0 增量 + P1 + P2 多级混排/评分口径)
  • abc0b932d T41 成长页小游戏入口设计定稿(21:13,spec 文档)

编写决策(仅测试目录,绝不改生产源码;本轮未提交、未推送):

需求/变更 编号 现有测试资产 本轮动作 理由
SC-X-22 CF 值获取预估 SC-X-22 已闭环(RewardEstimateControllerEstimateTest 11 例 + RewardRuleServiceEstimateTest 4 例,17:45 落库,持续绿) 不重复 已覆盖,无缺口
统一维度体系合并 aa6ccb2dd DimensionRegistryMapContractTest 等已存在;22:13 首验 28 例(26 绿/2 红 = B-18) 不新增,标记 B-18 红 缺口为「已知红」而非「缺失用例」;避免重复落库造成仓库抖动
T41 成长页小游戏入口 T41 无(cfc-frontend 为 uni-app,本工作树无 jest/单测 harness;tests/ 仅 Web Playwright,小程序页面无可执行单测载体) 产出测试设计,标待核实,本轮不落库 无安全可执行的测试载体;不臆造断言

本轮新增/修订可执行测试用例文件:无(闸门触发但无安全可落库的载体)。 本轮产出测试设计:见第七、十一节(T41 小程序测试设计、E2E 执行设计、JaCoCo 引入设计)。


七、覆盖缺口清单

# 缺口类型 现状 风险 建议测试设计 优先级 闭环方式
G1 T41 小程序无自动化测试载体 uni-app 无 jest;无小程序 E2E harness 入口卡/死链回归无守护 引入 uni-app 单测(@vue/test-utils + jest)或微信小程序自动化;先补「入口卡渲染 + 死链修复」用例 P1 owner 评估小程序测试 harness 后落库
G2 B-13 环境红 8 例 3 类测试硬编码 127.0.0.1:3306 非代码缺陷,污染套件结果 配置化 DB 地址(test profile / env),CI 可跑 P0 改 3 类测试读环境变量后复跑零错误
G3 112 例契约漂移(34 类) 状态码 500↔410/403/400、术语 childId→memberId、Mockito 误用 掩盖真实回归 按 SC 逐一二分修正断言/Mock P0 达 BUILD SUCCESS 零失败/错误
G4 JaCoCo 缺失 cfc-backend pom 无 jacoco 插件 后端覆盖率不可度量 引入 jacoco 并设阈值门禁(不擅改构建,需 owner 确认) P1 出覆盖率报告并对齐阈值
G5 /admin 登录脚本缺口 el-select 身份未点选 → 按钮 disabled E2E /admin 不可断言 修正 tests/e2e/roles/admin/login.spec.js 身份选择步骤 P1 重跑 /admin 得真实通过/失败
G6 历史 E2E 3 红未重验 nonfunc-security.spec.js:75/:121 等 安全面风险未闭环 凭据就绪后整跑 E2E 复核 P2 复验转绿或登记缺陷
G7 cfc-web Jest 覆盖低(9.5% 语句) 仅 12 文件,239 文件大量 0% 组件回归盲区 按业务优先级扩充 jest 用例(重点 admin 关键页) P2 覆盖率逐步抬升

八、域结论表

审查维度 负责专家 结论 关键证据
单元·组件(cfc-web Jest) 苏雅 通过 12 套件/90 用例全绿;覆盖率 9.5%/5.3%/7.2%(mock API)
单元·组件(cfc-backend 纯单元) 苏雅 通过 43/43 绿(6 类,离线可执行)
集成·接口(backend 全量/E2E 接口) 柯砚 有条件通过 全量 1664/1538/71/51/4;E2E 仅探针未整跑
系统·验收(E2E /admin /frontend) 白樾 待核实(降级) 302 可达;登录脚本缺口 + reset-db 风险 → 未整跑
测试保障(冒烟/回归) 闻朔 通过(机制) 每小时复跑;Jest 连绿、后端契约复验无新增回归
性能·可靠性 骆骋 未实测 需联网压测,未授权
安全 关屿 部分通过 nonfunc-security 2 红待复核;SAST 未跑
兼容·体验·无障碍 阮清 未发现/待核实 无对应资产
度量·流程·代码审查 何序 有条件通过 JaCoCo 缺失(G4);CI 未启用;全项目审查沿用历史缺口

九、五要素问题清单

问题 1 — B-13 环境硬编码 DB 地址(8 例错误)

① 问题描述:3 类集成测试启动即因无法连接 127.0.0.1:3306 报 Error,污染套件结果、掩盖真实回归。 ② 测试 bug 点(用例名):AdminFamilyOverviewControllerTest、FamilyAdminOverviewServiceTest、UserServiceFamilyNameLinkTest(硬编码 127.0.0.1:3306)。 ③ 最优修改方案:将 DB 地址改为从测试环境变量/test profile 读取,提供可指向内网测试库的配置,避免写死回环地址。 ④ 修改目的:消除环境红,使集成测试可在 CI/内网稳定执行,恢复对真实回归的灵敏度。 ⑤ 问题闭环:修改后 mvn -o -DskipTests=false test 该 3 类由 ERROR→PASS;通过标准:全量套件 ERROR 归零。

问题 2 — B-18 维度合并引入 2 红

① 问题描述:统一维度体系合并(aa6ccb2dd)后,HealthDimensionControllerTest 2 例失败,22:13 首验定位为 currentMemberId 兜底传参不符预期。 ② 测试 bug 点(用例名):HealthDimensionControllerTest(2 红,根因 currentMemberId 兜底传参)。 ③ 最优修改方案:核对维度合并后 HealthDimensionController 的成员解析契约,修正测试用例的入参/期望值或修正生产兜底逻辑(依规格定责任归属)。 ④ 修改目的:闭环维度合并带来的回归,确保五维健康接口契约稳定。 ⑤ 问题闭环:修正后该 2 例转绿;通过标准:22:13 基线 28 例全绿。

问题 3 — /admin 登录脚本缺口

① 问题描述:E2E /admin 登录步骤未点选 el-select 身份,导致提交按钮 disabled,无法完成登录断言。 ② 测试 bug 点(用例名):tests/e2e/roles/admin/login.spec.js(身份选择步骤缺失)。 ③ 最优修改方案:在登录流程中显式选择管理员身份(el-select 选项),再点击登录。 ④ 修改目的:打通 /admin E2E 真实登录断言,覆盖后台关键路径。 ⑤ 问题闭环:修正后整跑 /admin 得到真实通过/失败数;通过标准:登录→关键页可达断言通过。

问题 4 — JaCoCo 缺失致后端覆盖率不可测(G4)

① 问题描述:cfc-backend pom.xml 无 JaCoCo 插件,后端行/分支覆盖率无法采集。 ② 测试 bug 点(文件):cfc-backend/pom.xml(build/plugins 无 jacoco-maven-plugin)。 ③ 最优修改方案:引入 jacoco-maven-plugin 并在 verify 阶段生成报告 + 设阈值(需 owner 确认,不擅改构建)。 ④ 修改目的:使后端覆盖率可度量、可设门禁,对齐质量目标。 ⑤ 问题闭环:引入后 mvn test 产出 coverage 报告;通过标准:报告可见且达约定阈值。

问题 5 — T41 小程序无测试载体(G1)

① 问题描述:T41(成长页小游戏入口卡 + 死链修复)已合入生产,但 cfc-frontend 为 uni-app,工作树无 jest/单测 harness,小程序页面无可执行单测。 ② 测试 bug 点(文件):cfc-frontend(缺测试 harness);docs/superpowers/specs/2026-11-05-miniapp-games-entry.md(需求编号 T41)。 ③ 最优修改方案:搭建 uni-app 组件单测(@vue/test-utils + jest)或微信小程序自动化,优先覆盖「入口卡渲染 + 死链修复」路径。 ④ 修改目的:为小程序高频入口提供回归守护,防止死链/入口回归。 ⑤ 问题闭环:harness 就绪后落库 T41 用例并接入定时闭环;通过标准:T41 用例绿且接入本轮。


十、待核实项

  1. cfc-backend 全量套件 19:44 基线是否被 22:13 后源码变更(如 9195a4b37 T41 前端、750f3d8b2 健康报告成员选择)影响——22:13 已复验契约 79 例,全量未重跑,待复核。
  2. cfc-web Jest「12/90 vs 历史 296」口径差异(Q5)——需 owner 澄清历史 296 来源。
  3. 历史 E2E 3 红(nonfunc-security.spec.js:75/:121 等)是否仍红——需凭据整跑复核。
  4. 依赖/性能/兼容性/无障碍测试——本环境无工具或未授权,全部待核实。
  5. T41 是否还有小程序之外可测的 Web 等价面——待核实。

十一、需用户单独授权才能继续的项(标注「未授权未执行」并给测试设计)

项 现状 未授权未执行原因 测试设计(若授权)
内网 E2E 整跑(/admin、/frontend) 仅只读探针(302 可达) ① globalSetup 执行 reset-db.sh 会重置目标库(破坏性),需 owner 确认是否对授权内网目标执行;② /admin 登录脚本缺口未修;③ 历史被沙箱批量删除守卫阻断 授权后:先禁 reset-db 或指向隔离测试库 → 注入 machine.json 凭据(MACHINE_JSON_PATH)→ 修登录脚本 → 跑 playwright.config.func.js 得真实通过/失败
依赖漏洞扫描(OWASP DC/Snyk) 未执行 需联网拉取漏洞库 授权后离线镜像或联网扫描 cfc-backend/cfc-web 依赖
性能压测(JMeter/k6 打到内网) 未执行 需联网且会打到目标环境 授权后对内网目标做受控压测,设 RPS/阈值
Playwright 公网安装浏览器 未执行 需公网下载 chromium_headless_shell 授权后 npx playwright install 补齐缺省浏览器
JaCoCo 引入(改 pom) 未执行 改动构建配置,需 owner 确认 见第九节问题 4

凭据处理说明:本环境凭据存于 machine.json(机级,不入 git),报告与日志不回显明文口令/令牌;本轮未触发 E2E 整跑,故未注入。


十二、门禁结论

结论:不通过(有条件)

裁决依据:

  • 正向增量(本轮确认):cfc-web Jest 90/90 连绿 + 覆盖率可采集(9.5%/5.3%/7.2%);cfc-backend 纯单元 43/43 绿;SRS 闸门触发并给出 T41/维度合并的覆盖缺口与测试设计;内网探针 /admin、/frontend 可达。
  • 遗留阻断项(沿用历史,未闭环):B-13 环境红 8 例、B-18 维度合并 2 红、112 例契约漂移(34 类)、JaCoCo 缺失、E2E /admin 脚本缺口、历史 E2E 3 红、T41 无测试载体。
  • 全量套件仍 BUILD FAILURE(仅因测试失败,非编译阻断),不符合「BUILD SUCCESS 零失败/零错误」质量目标。

复评条件(满足任一即向「通过」靠拢):

  1. 修 B-13(3 类环境红)+ 二分修 112 例契约漂移 → mvn -o -DskipTests=false test BUILD SUCCESS 且零失败/零错误;
  2. 引 JaCoCo 并对齐覆盖率阈值;
  3. 修 /admin 登录脚本缺口 → E2E /admin+/frontend 整跑得到真实结果(须先确认 reset-db 不对授权内网目标执行);
  4. 复核并闭环历史 E2E 3 红;
  5. T41 小程序测试 harness 就绪并落库用例,接入本轮闭环。

本轮回合未提交、未推送任何文件(含测试产出),遵守「仅写入测试目录、不改动生产源码、不提交不推送」约束。下次定时轮将复用本基线并复评上述条件。