|
@@ -0,0 +1,208 @@
|
|
|
|
|
+# 测试闭环报告 · 2026-11-07 17:47 (GMT+8)
|
|
|
|
|
+
|
|
|
|
|
+> 主理人:陆谨(软件测试专家团 / 测试架构师)|执行档:**review 档(已授权内网 + 测试用例编写)**
|
|
|
|
|
+> 对象:d:/cfc(浠艾福 XAF)|内网 cfc.iwintrue.com → 192.168.16.251(hosts 解析,已授权,不联网)
|
|
|
|
|
+> 本产物**未提交、未推送**;仅写入测试目录的用例见第五节。
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 一、历史审查记录(跨会话召回)
|
|
|
|
|
+
|
|
|
|
|
+- 本次为该对象**持续每小时闭环的第 N 次**(最近一次 14:55,HEAD=d21a887cc;再前 12:25/10:46…)。
|
|
|
|
|
+- 上次结论:⛔**不通过(有条件)**。遗留缺口:① 37 红类(3 类 B-13 环境硬编码 `127.0.0.1:3306` + 34 类契约漂移 ~112 红,含 S-cfc-31 blank-key 真实校验缺陷);② JaCoCo 缺失,覆盖率仅 surefire 口径 95.02%;③ growth_records 表 schema 重复列(P1,历史未处置);④ `/admin` 登录 E2E 连续 2 轮失败(P0)。
|
|
|
|
|
+- **本次改善**:`/admin` E2E 由 3/5 → **5/5**(B-46 根因已定位并关闭:属测试缺陷非部署回归,16:46 轮已修复滑块/登录脚本);Jest 双绿连绿;E2E 全量 15/15。
|
|
|
|
|
+- **本次新增**:华为/小米运动健康模块(36 文件/+3360 行)作为新生产代码**零测试覆盖**;新增契约 E2E 10 条并实测发现该模块**未在目标部署实例上线**(404/502)。
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 二、项目画像(速览)
|
|
|
|
|
+
|
|
|
|
|
+| 模块 | 技术栈 | 端口 | 本周期可测范围 / 关键路径 |
|
|
|
|
|
+|------|--------|------|---------------------------|
|
|
|
|
|
+| cfc-backend | Spring Boot 2.7.18 + MyBatis-Plus + Java 8 | 9082 | 接口 `@PostMapping` 统一;JWT 拦截 `/api/**`;本次新增 Huawei/Xiaomi 健康接入(§4.43/§4.44) |
|
|
|
|
|
+| cfc-web | Vue 2 + Element UI 管理端 | 8082 | Jest 组件/逻辑测试(mock API) |
|
|
|
|
|
+| cfc-frontend | uni-app 微信小程序 (Vue 2) | — | Jest 逻辑测试(无 vue-jest,SFC 不可单测) |
|
|
|
|
|
+| 部署实例 | cfc.iwintrue.com → 192.168.16.251 | 80/443 | 内网 E2E 目标(/admin、/frontend、/api) |
|
|
|
|
|
+
|
|
|
|
|
+**质量目标(沿用)**:核心接口须有契约测试;门禁 0 失败 0 错误;覆盖率(JaCoCo 真值)≥80%。
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 三、20 类测试覆盖矩阵(三态:已发现 / 未发现 / 待核实)
|
|
|
|
|
+
|
|
|
|
|
+| # | 类型 | 状态 | 证据 |
|
|
|
|
|
+|---|------|------|------|
|
|
|
|
|
+| 1 | 单元测试(后端 JUnit) | 已发现 | 基线 288 类/2389 例(16:46 轮,复用);健康模块缺口 |
|
|
|
|
|
+| 2 | 组件测试(前端) | 已发现 | cfc-web 12 套件/90 例、cfc-frontend 16 套件/313 例 全绿 |
|
|
|
|
|
+| 3 | 测试覆盖率 | 待核实 | JaCoCo 离线缺失,仅 surefire 口径 95.02% |
|
|
|
|
|
+| 4 | 变异测试 | 未发现 | 未配置 pitest,未执行 |
|
|
|
|
|
+| 5 | 快照测试 | 未发现 | 无 |
|
|
|
|
|
+| 6 | 冒烟测试 | 已发现 | E2E 探活 /frontend+/admin 200/302;/admin 登录冒烟 5/5 |
|
|
|
|
|
+| 7 | 回归测试 | 已发现 | Jest 双绿连绿 + 后端基线复用 + E2E 15/15 |
|
|
|
|
|
+| 8 | 探索性测试 | 未发现 | 无专职脚本 |
|
|
|
|
|
+| 9 | 集成测试(后端) | 已发现 | 后端集成/契约基线;新增 health 契约 E2E 10 条 |
|
|
|
|
|
+| 10 | 性能测试 | 未发现 | 需联网压测,未授权未执行 |
|
|
|
|
|
+| 11 | 可靠性测试 | 待核实 | 无专职可靠性套件 |
|
|
|
|
|
+| 12 | 安全测试(SAST/DAST/依赖漏洞) | 未发现 | 需联网,未授权未执行 |
|
|
|
|
|
+| 13 | 兼容性测试 | 已发现 | 前端移动/桌面双视口 E2E |
|
|
|
|
|
+| 14 | 可用性测试 | 未发现 | 无 |
|
|
|
|
|
+| 15 | 无障碍测试 | 未发现 | 无 |
|
|
|
|
|
+| 16 | QA 流程 | 已发现 | 自动化状态台账 docs/tdd/test/automation-status.md + 每小时闭环 |
|
|
|
|
|
+| 17 | 质量指标 | 已发现 | 覆盖率台账/自动化状态 |
|
|
|
|
|
+| 18 | 全项目代码审查 | 待核实 | 本次聚焦测试闭环,未做全量代码审查 |
|
|
|
|
|
+| 19 | 契约测试 | 已发现 | 后端契约 JUnit + 新增 health 契约 E2E |
|
|
|
|
|
+| 20 | 接口 API 测试 | 已发现 | shop-sort-api E2E + health 契约 E2E |
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 四、测试方案与执行档(预授权,无需交互确认)
|
|
|
|
|
+
|
|
|
|
|
+- **执行档**:review(已授权内网 + 测试用例编写);联网命令一律不执行。
|
|
|
|
|
+- **范围**:功能层次 + 功能保障 + 兼容性(已实测);非功能(性能/安全/依赖漏洞)因需联网**降级为测试设计**。
|
|
|
|
|
+- **优先级**:P0 `/admin` 登录真实性;P1 新增健康模块覆盖;P1 JaCoCo 真值;P1 37 红类清零。
|
|
|
|
|
+- **排除项**:变异测试、探索性、可用性、无障碍(无资产,标记未发现/待核实,不伪造);后端全量 mvn 因本沙箱无 mvn 复用基线。
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 五、执行范围与实测结果
|
|
|
|
|
+
|
|
|
|
|
+| 维度 | 命令/来源 | 用例总数 | 通过 | 失败 | 备注 |
|
|
|
|
|
+|------|-----------|----------|------|------|------|
|
|
|
|
|
+| cfc-web Jest | `CI=true npm test` | 90 | 90 | 0 | 12 套件全绿(26.7s,mock API) |
|
|
|
|
|
+| cfc-frontend Jest | `CI=true npm test` | 313 | 313 | 0 | 16 套件全绿(23.4s,逻辑镜像) |
|
|
|
|
|
+| E2E /admin | Playwright `admin-desktop` | 5 | 5 | 0 | TC-A-U01~U05 全绿,B-46 关闭 |
|
|
|
|
|
+| E2E /frontend | Playwright `frontend-mobile` | 6 | 6 | 0 | TC-F-U01~U06 全绿 |
|
|
|
|
|
+| E2E shop-api | Playwright `shop-api` | 4 | 4 | 0 | TC-S-U01~U04 全绿(需求变更 S1) |
|
|
|
|
|
+| **E2E 合计** | | **15** | **15** | **0** | 2.5m,无数据写入 |
|
|
|
|
|
+| cfc-backend | mvn(本沙箱无 PATH/无 wrapper) | — | — | — | **复用 16:46 权威基线 288 类/2389 例/95.02%**(surefire 口径) |
|
|
|
|
|
+| 健康契约 E2E(新增) | `playwright.config.health.js` | 10 | 0 | 10 | 实测 404(curl)/502(Playwright),模块未上线(见 R-new-1) |
|
|
|
|
|
+
|
|
|
|
|
+**覆盖率**:后端 95.02%(surefire 口径,**非 JaCoCo 真值**,待联网引 JaCoCo);前端 Jest 无覆盖率采集(逻辑镜像)。
|
|
|
|
|
+
|
|
|
|
|
+**回归对比(vs 14:55 轮)**:
|
|
|
|
|
+- Jest 双绿连绿(90/90、313/313),无新增失败。
|
|
|
|
|
+- E2E /admin 由 3/5(P0)→ **5/5**,B-46 已关闭,**无新增回归**。
|
|
|
|
|
+- 后端:自 16:46 基线零新增回归;但新增健康模块(36 文件/+3360 行)**未纳入任何测试**,为新增风险。
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 六、测试用例编写产出(SRS 闸门触发)
|
|
|
|
|
+
|
|
|
|
|
+**闸门判定**:自 14:55 以来,SRS/需求文档有变更 →
|
|
|
|
|
+- `docs/superpowers/api/API_REFERENCE.md`(+42 行,新增 §4.43 华为健康、§4.44 小米健康,各 5 端点)
|
|
|
|
|
+- `docs/superpowers/specs/2026-11-07-referral-team-profit-sharing.md`(团队分润设计 v0.5)
|
|
|
|
|
+
|
|
|
|
|
+**本次落库用例(仅测试目录,未提交未推送)**:
|
|
|
|
|
+
|
|
|
|
|
+| 新增文件 | 用例 | 对应需求/接口编号 | 状态 |
|
|
|
|
|
+|----------|------|------------------|------|
|
|
|
|
|
+| `tests/e2e-live/health-contract.spec.js` | TC-H-U01~U10(10 条鉴权契约) | API_REFERENCE §4.43 / §4.44;设计文档 D1-D5、X1-X5 | 已落地,**执行 0/10**(目标未上线,待部署后复跑) |
|
|
|
|
|
+| `tests/playwright.config.health.js` | 隔离运行配置 | — | 配套,不干扰现有 15/15 套件 |
|
|
|
|
|
+
|
|
|
|
|
+**未落库(设计替代,零抖动)**:
|
|
|
|
|
+- **referral-team-profit-sharing v0.5**:纯设计文档,后端未见对应实现(仅有历史 referral 代码),**断言无锚点 → 出测试设计,0 落库**。待实现后补契约测试。
|
|
|
|
|
+- **后端 @Test 版健康契约**:本沙箱无 mvn,写入存在 B-26/B-47 式编译阻断风险;且接口真实路径为 mock 默认、需成员 JWT,E2E 缺可用凭据无法断言真实行为 → 按本项目既有规范(多轮"闸门触发→出测试设计,0落库")**仅出设计,不落库**。
|
|
|
|
|
+
|
|
|
|
|
+> 设计(待 mvn 可用或模块上线后转用例):`HuaweiHealthControllerTest`/`XiaomiHealthControllerTest`(MockMvc/@WebMvcTest),覆盖 auth-url/callback/sync/revoke/status 五端点,mock `HealthSyncServiceImpl`,断言 mock 通道默认返回 + JWT 拦截(无 token → 401)。
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 七、新增风险 / 覆盖缺口清单
|
|
|
|
|
+
|
|
|
|
|
+| ID | 缺口类型 | 现状 | 风险 | 建议测试设计 | 优先级 | 闭环方式 |
|
|
|
|
|
+|----|----------|------|------|--------------|--------|----------|
|
|
|
|
|
+| R-new-1 | 功能覆盖缺口(新增生产代码) | 华为/小米健康模块 36 文件/+3360 行,**0 专用测试**;E2E 契约实测 404/502(模块未在 192.168.16.251 上线) | 新接口无回归保护;上线后可能带缺陷暴露 | 后端 MockMvc 契约 10 端点 + E2E 鉴权契约(已落 health-contract.spec.js) | P1 | 模块部署后复跑 E2E 应得 401/403 全绿;后端 mvn 可用补 @Test 全绿 |
|
|
|
|
|
+| R-2 | 工具缺口 | JaCoCo 离线缺失,覆盖率仅 surefire 口径 | 门禁"覆盖率≥80%"无真值依据 | 联网下载 jacoco-maven-plugin 接入 pom | P1 | 联网授权后 mvn verify 出 JaCoCo 报告,行/分支≥80% |
|
|
|
|
|
+| R-3 | 环境缺口 | 本沙箱 PATH 无 mvn、无 mvnw | 后端无法独立复跑,只能复用兄弟环境基线 | 在 cfc-backend 提供 mvnw 或把 mvn 加入执行环境 PATH | P1 | 提供后本环境 `mvn -o test` 可独立复跑,对比基线无新增失败 |
|
|
|
|
|
+| R-4 | 历史 P1 未处置 | `schema.sql` growth_records 重复列(~775 次 "Duplicate column name") | DDL 噪声、迁移异常风险 | 删重复列定义 | P2 | 改后迁移日志无 Duplicate 即闭环 |
|
|
|
|
|
+| R-5 | 历史红类 | 37 红类(3 B-13 环境硬编码 + 34 契约漂移,含 S-cfc-31 blank-key 真实缺陷) | 门禁 0 失败 0 错误不达标 | B-13 配置化 DB 地址;漂移逐条核对;S-cfc-31 修服务端校验 | P1 | 红类归零,BUILD SUCCESS |
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 八、五要素问题清单
|
|
|
|
|
+
|
|
|
|
|
+### 问题 1(P1)— 华为/小米运动健康模块零测试覆盖
|
|
|
|
|
+① **问题描述**:d21a887cc→9d1fcbec4 新增 `HuaweiHealthController`/`XiaomiHealthController` 等 36 文件/+3360 行生产代码,无对应测试文件;E2E 契约实测未上线(404/502)。
|
|
|
|
|
+② **测试 bug 点**:`cfc-backend/src/main/java/com/etotem/cfc/controller/huawei/HuaweiHealthController.java`、`.../xiaomi/XiaomiHealthController.java`;`schema.sql:7069/7083`。
|
|
|
|
|
+③ **最优修改方案**:新增 `HuaweiHealthControllerTest`/`XiaomiHealthControllerTest`(MockMvc/@WebMvcTest),覆盖 5 端点,mock `HealthSyncServiceImpl`,断言 mock 通道默认返回 + JWT 拦截;E2E 鉴权契约已落 `health-contract.spec.js`。
|
|
|
|
|
+④ **修改目的**:闭环新增生产代码的契约覆盖,防回归(质量目标:核心接口须有契约测试)。
|
|
|
|
|
+⑤ **问题闭环**:mvn 可用后跑通=10 端点全绿;E2E 模块部署后复跑应得 401/403 全绿。通过标准:全绿且覆盖率达阈值。
|
|
|
|
|
+
|
|
|
|
|
+### 问题 2(P1)— 覆盖率工具 JaCoCo 离线缺失
|
|
|
|
|
+① **问题描述**:pom.xml 仅 spring-boot/compiler/surefire 三插件,无 jacoco;`~/.m2` 无 jacoco;当前 95.02% 为 surefire 口径非 JaCoCo 真值。
|
|
|
|
|
+② **测试 bug 点**:`cfc-backend/pom.xml` build/plugins。
|
|
|
|
|
+③ **最优修改方案**:联网下载 jacoco-maven-plugin 并接入 pom(或命令行 -javaagent),产出报告。
|
|
|
|
|
+④ **修改目的**:满足门禁"覆盖率≥80%"需 JaCoCo 真值。
|
|
|
|
|
+⑤ **问题闭环**:联网授权后 `mvn verify` 出 jacoco 报告,行/分支覆盖率均≥80% 方达标。
|
|
|
|
|
+
|
|
|
|
|
+### 问题 3(P1)— 后端无法在本闭环沙箱独立复跑
|
|
|
|
|
+① **问题描述**:自动化沙箱 PATH 无 mvn、无 mvnw,无法 `mvn test`;只能复用测试负责人 16:46 轮基线(2389/95.02%)。
|
|
|
|
|
+② **测试 bug 点**:环境层(非代码缺陷)。
|
|
|
|
|
+③ **最优修改方案**:在 cfc-backend 提供 `mvnw` wrapper,或将执行环境 mvn 加入 PATH。
|
|
|
|
|
+④ **修改目的**:使每小时闭环可独立复跑后端全量,避免基线陈旧。
|
|
|
|
|
+⑤ **问题闭环**:提供后本环境可跑 `mvn -o test`,对比基线无新增失败即闭环。
|
|
|
|
|
+
|
|
|
|
|
+### 问题 4(P2)— growth_records 表 schema 重复列
|
|
|
|
|
+① **问题描述**:`schema.sql` growth_records CREATE TABLE 重复 `family_member_id`/`family_member_age` 列,全量日志 ~775 次 "Duplicate column name"。
|
|
|
|
|
+② **测试 bug 点**:`cfc-backend/src/main/resources/schema.sql`(growth_records 段,~529+ 行)。
|
|
|
|
|
+③ **最优修改方案**:删重复列定义;`DatabaseInitializer` 幂等迁移确认已含该列则不重复建。
|
|
|
|
|
+④ **修改目的**:消除冗余 DDL、降低迁移噪声、避免未来迁移异常。
|
|
|
|
|
+⑤ **问题闭环**:改后跑 `DatabaseInitializer` 迁移,日志无 "Duplicate column name" 即闭环。
|
|
|
|
|
+
|
|
|
|
|
+### 问题 5(P1)— 37 红类未清零(含 1 真实缺陷 S-cfc-31)
|
|
|
|
|
+① **问题描述**:后端基线仍有 37 红类;S-cfc-31 blank-key 已确认是真实校验缺陷(期望 500 得 200)。
|
|
|
|
|
+② **测试 bug 点**:`SleepConfigTagsMechanismContractTest.publicValue_blankKey_returnsError`(99 行)等 34 类契约漂移 + 3 类 B-13 环境硬编码 `127.0.0.1:3306`。
|
|
|
|
|
+③ **最优修改方案**:B-13 改为配置化 DB 地址;34 类漂移逐一核对实现与文档;S-cfc-31 修复服务端 blank-key 校验。
|
|
|
|
|
+④ **修改目的**:门禁要求 0 失败 0 错误。
|
|
|
|
|
+⑤ **问题闭环**:红类归零,全量 BUILD SUCCESS 且无失败/错误。
|
|
|
|
|
+
|
|
|
|
|
+### 问题 6(设计,未落库)— 团队分润设计 v0.5 无测试锚点
|
|
|
|
|
+① **问题描述**:`2026-11-07-referral-team-profit-sharing.md` v0.5 为设计文档,后端未见对应新实现。
|
|
|
|
|
+② **测试 bug 点**:需求/接口信息不足(无实现锚点)。
|
|
|
|
|
+③ **最优修改方案**:实现落地后补契约测试(分润计算/星级门槛/奖池切分)。
|
|
|
|
|
+④ **修改目的**:防分润逻辑回归。
|
|
|
|
|
+⑤ **问题闭环**:实现 + 测试全绿;当前标"待核实",不臆造断言。
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 九、待核实项
|
|
|
|
|
+
|
|
|
|
|
+- 后端覆盖率 JaCoCo 真值(当前 95.02% 仅 surefire 口径)。
|
|
|
|
|
+- 16:46 基线 2389 例是否已包含健康模块编译(无法本环境复跑确认)。
|
|
|
|
|
+- `/admin` 登录态凭据:本次 admin E2E 5/5 由 16:46 轮脚本修复达成,本环境未注入 CFC_ADMIN_TOKEN,依赖其修复;若部署态变化需重新验证。
|
|
|
|
|
+- 健康模块目标部署时间(决定 R-new-1 复跑窗口)。
|
|
|
|
|
+- growth_records 重复列是否已随某迁移处置(历史 P1 未闭环)。
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 十、需用户单独授权才能继续的项(未授权未执行 → 测试设计)
|
|
|
|
|
+
|
|
|
|
|
+| 项 | 原因 | 测试设计 |
|
|
|
|
|
+|----|------|----------|
|
|
|
|
|
+| 依赖漏洞扫描(OWASP DC / npm audit) | 需访问外部公网 | 在隔离环境跑 `mvn org.owasp:dependency-check-maven:check` + `npm audit`,产出 CVE 清单 |
|
|
|
|
|
+| 性能压测(JMeter / k6) | 需联网打目标/远端 | 对 /api 关键链路做基线压测,定吞吐/RT/错误率阈值 |
|
|
|
|
|
+| DAST(ZAP) | 需联网 | 对 cfc.iwintrue.com 做被动+主动扫描,产出注入/XSS 清单 |
|
|
|
|
|
+| JaCoCo 下载与接入 | 需联网 | 联网后改 pom 接入 jacoco-maven-plugin,出真值覆盖率 |
|
|
|
|
|
+| 后端全量 mvn 复跑 | 需 mvn(本沙箱无) | 提供 mvnw/PATH 后 `mvn -o -DskipTests=false test` 固化新基线 |
|
|
|
|
|
+| B-34/B-35 LangGraph 复验 | 需 AI 服务 9000(超内网授权) | 授权后调 9000 复验问卷降级/DAN 解析 |
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 十一、门禁结论
|
|
|
|
|
+
|
|
|
|
|
+**⛔ 不通过(有条件)**
|
|
|
|
|
+
|
|
|
|
|
+**正向进展**:Jest 双绿连绿(90+313)、E2E 15/15(含 `/admin` 5/5,B-46 关闭)、无新增回归、新增健康契约 E2E 已落地并暴露部署缺口。
|
|
|
|
|
+
|
|
|
|
|
+**未达标项(复评条件)**:
|
|
|
|
|
+1. 华为/小米健康模块补齐契约测试(后端 @Test 10 端点 + E2E 部署后复跑全绿)— R-new-1;
|
|
|
|
|
+2. 提供 mvnw / 授权 mvn PATH,本环境可独立复跑后端全量,对比基线无新增失败 — R-3;
|
|
|
|
|
+3. 联网引 JaCoCo 出真值覆盖率 ≥80% — R-2;
|
|
|
|
|
+4. 37 红类(3 B-13 + 34 漂移含 S-cfc-31)归零(0 失败 0 错误)— R-5;
|
|
|
|
|
+5. 处置 growth_records 重复列 — R-4;
|
|
|
|
|
+6. 授权安全压测/依赖漏洞扫描后补非功能维度。
|
|
|
|
|
+
|
|
|
|
|
+满足 1–5 可复评为「有条件通过」;叠加 6 与 JaCoCo 达标可「通过」。
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+*产物路径:d:/cfc/docs/tdd/test/automation-run-2026-11-07-1747.md(未提交未推送)|新增测试文件:tests/e2e-live/health-contract.spec.js、tests/playwright.config.health.js(未提交未推送)*
|