|
|
@@ -0,0 +1,252 @@
|
|
|
+# 自动化测试执行报告 · 2026-11-03 13:16(第 25 次 · 真实执行)
|
|
|
+
|
|
|
+> 触发:定时自动化 `ccb91e89-...`|角色:**测试负责人**
|
|
|
+> 用户指令:`@skill:"TDD 多智能体研发测试调度" 作为测试负责人,执行除编译之外的自动化测试`
|
|
|
+> 执行档:**execute(离线 · 除编译之外)**|无人值守,按默认假设执行(不装依赖、不联网、不改源码、不推送)
|
|
|
+> 基线:HEAD `94f87bb4f`(13:12 冒烟提交),`origin/cfclub...HEAD = 0/0`
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 0. 「除编译之外」的口径与本次实际做法
|
|
|
+
|
|
|
+| 项 | 本次做法 |
|
|
|
+|---|---|
|
|
|
+| 是否执行 `mvn compile` / `test-compile` | **未执行**(按指令排除) |
|
|
|
+| 后端测试如何跑 | `mvn -o surefire:test`,**复用 12:57 已编译的 `target/test-classes`** |
|
|
|
+| 产物与源码一致性校验 | `find cfc-backend/src -newermt "2026-11-03 12:57"` → **0 个文件**,即编译产物与 HEAD 源码一致,结果可信 |
|
|
|
+| 报告口径 | 所有数字来自本轮 surefire XML 实测(`mtime ≥ 13:10`),非历史引用 |
|
|
|
+
|
|
|
+> 说明:Maven `test` 生命周期天然包含编译,因此本轮改为**直接调用 surefire 插件目标**,严格不触发编译阶段,同时保证「执行自动化测试」这一动词确实发生。
|
|
|
+
|
|
|
+## 1. 环境真值(实测)
|
|
|
+
|
|
|
+| 项 | 真值 |
|
|
|
+|---|---|
|
|
|
+| Maven | `D:\tools\apache-maven-3.9.9`(**不在 PATH**,需显式指定路径) |
|
|
|
+| JDK | `D:\jdk1.8.0_25` |
|
|
|
+| 离线仓 | `C:\Users\iwt\.m2` 已缓存,`-o` 离线可用 |
|
|
|
+| 后端 9082 | **DOWN**(连接被拒,非 502 代理回包)→ Playwright/接口冒烟本轮不可跑 |
|
|
|
+| AI 服务 9000 | **DOWN** |
|
|
|
+| MySQL(测试数据源) | **本轮可用**(3 个 `@SpringBootTest` 类成功载入上下文,耗时 143s/225s) |
|
|
|
+| pom 陷阱 | `cfc-backend/pom.xml:28` `<skipTests>true</skipTests>` → 必须 `-DskipTests=false`,否则 `Tests are skipped.` + BUILD SUCCESS 假绿 |
|
|
|
+
|
|
|
+## 2. 执行结果(本轮实测)
|
|
|
+
|
|
|
+### 2.1 汇总
|
|
|
+
|
|
|
+| 套件 | 范围 | 类/套件 | 用例 | 通过 | 失败F | 错误E | 红 | 通过率 |
|
|
|
+|---|---|---|---|---|---|---|---|---|
|
|
|
+| cfc-frontend jest | 小程序端全量 | 14 suites | 296 | **296** | 0 | 0 | **0** | **100%** |
|
|
|
+| cfc-backend 纯单测子集 | 154 个非 `@SpringBootTest` | 154 | 1079 | 1036 | 25 | 18 | **43** | 96.0% |
|
|
|
+| cfc-backend 定向 Spring 子集 | Auth/Article 复跑验证 | 2 | 50 | 37 | 8 | 5 | **13** | 74.0% |
|
|
|
+| **后端合计(本轮)** | — | **156** | **1129** | **1073** | **33** | **23** | **56** | **95.0%** |
|
|
|
+
|
|
|
+- 后端红用例分布:**19 个测试类**,其中 17 类来自纯单测子集、2 类来自定向 Spring 子集。
|
|
|
+- 前端连续第 3 轮 296/296 全绿(唯一告警:worker 未优雅退出,属 teardown 泄漏,非用例失败)。
|
|
|
+
|
|
|
+### 2.2 后端未执行集合(如实标注:未实测)
|
|
|
+
|
|
|
+| 集合 | 类数 | 用例 | 说明 |
|
|
|
+|---|---|---|---|
|
|
|
+| 其余 `@SpringBootTest` 类 | 41 | 345 | 本轮未跑(单类 2–4 分钟,41 类超时预算;且上批出现连接池耗尽) |
|
|
|
+| 上一批次产物(12:14–12:38,非本轮) | 41 | 345 | 254 通过 / 87 红 / 4 skip,含 36 条 `Too many connections` 环境噪声 |
|
|
|
+
|
|
|
+> **不得把 41 类 345 例写成通过**:该项为「未实测」。
|
|
|
+
|
|
|
+### 2.3 红因分型(56 条,本轮)
|
|
|
+
|
|
|
+| 分型 | 条数 | 占比 | 归属 |
|
|
|
+|---|---|---|---|
|
|
|
+| 断言值不符(含异常文案/返回码/数值) | 21 | 37.5% | 测试侧过期为主 |
|
|
|
+| NPE | 13 | 23.2% | 混合(见 §5) |
|
|
|
+| Mock/上下文配置(MybatisPlus、Mock 装配) | 4 | 7.1% | 测试侧 |
|
|
|
+| Mockito 匹配器误用(`InvalidUseOfMatchers`) | 3 | 5.4% | 测试侧 |
|
|
|
+| 打桩参数不匹配(`ArgumentsAreDifferent`) | 3 | 5.4% | 测试侧 |
|
|
|
+| 反射注入字段缺失(`NoSuchField`) | 3 | 5.4% | 测试侧 |
|
|
|
+| 其他(业务分支未达/期望状态不符) | 9 | 16.1% | 待研发确认 |
|
|
|
+
|
|
|
+### 2.4 红类明细
|
|
|
+
|
|
|
+| 红数 | 测试类 | 主因 |
|
|
|
+|---|---|---|
|
|
|
+| 9 | `ArticleControllerTest` | 4 断言(list/featured 返回空)+ 5 error(NPE×2 / Mockito×3) |
|
|
|
+| 8 | `CfCommissionServiceSettleTest` | **同根因**:`productOrderMapper` 未打桩 → NPE 被 try 吞 → `basePpoints=0` 提前返回 |
|
|
|
+| 6 | `ProductOrderServiceFulfillmentMultiModeTest` | `setUp` `InvalidUseOfMatchers`×3 + `stubBuyerWithOpenid` NPE×3 |
|
|
|
+| 4 | `AuthControllerTest` | 断言期望 500/200,实际 410/401(废弃接口口径) |
|
|
|
+| 4 | `DanReportParseServiceTest` | A1/A2/B4 解析断言:姓名/百分位/维度得分取不到(疑似产品侧) |
|
|
|
+| 4 | `FamilyJoinRequestServiceReferrerBindTest` | NPE(4 例同型) |
|
|
|
+| 3 | `ArticleWorkflowTest` | 异常文案断言过期(`仅已驳回…` vs 实际 `仅已驳回或已撤回…`) |
|
|
|
+| 3 | `ProductOrderServiceUpdateExpressFieldTest` | 打桩参数不匹配(物流公司/商品明细) |
|
|
|
+| 3 | `TaskProgressUpdateTest` | 反射注入 `platformPointsService` 字段不存在 |
|
|
|
+| 2 | `FortuneServiceTest` | NPE |
|
|
|
+| 2 | `ServiceRoleApproveTest` | NPE |
|
|
|
+| 其余 8 类 | `ReportParserAdminControllerTest`、`OrchestrationEngineTest`、`OrchestrationIntegrationTest`、`ActivityAdminServiceTest`、`ActivityServicePublishTest`、`MembershipPaySwitchTest`、`PaymentServiceORDRoutingTest`、`TaskPlanServiceTest` | 各 1 条:期望 200 实得 500 / 状态不符 / 返回值不符 |
|
|
|
+
|
|
|
+## 3. 覆盖矩阵(20 类,本轮重判)
|
|
|
+
|
|
|
+| # | 测试类型 | 状态 | 本轮证据 |
|
|
|
+|---|---|---|---|
|
|
|
+| 1 | 单元测试 | ✅ present | 后端 1491 `@Test` / 198 文件;本轮实跑 1079 例 |
|
|
|
+| 2 | 测试覆盖率 | ⚠️ partial | 静态 handler 命中 214/1937 = **11.05%**;**无 JaCoCo 行覆盖** |
|
|
|
+| 3 | 变异测试 | ❌ absent | 全仓无 PIT/变异配置 |
|
|
|
+| 4 | 集成测试 | ✅ present | `@SpringBootTest` 43 类 + `integration/` 包;本轮实跑 2 类 |
|
|
|
+| 5 | 契约测试 | ⚠️ partial | 接口冒烟 546 端点 `NOT_FOUND=0`;无 Pact/Spring Cloud Contract |
|
|
|
+| 6 | 接口 API 测试 | ✅ present | Playwright API e2e 51 passed / 3 failed / 3 skipped |
|
|
|
+| 7 | 系统/端到端 | ⚠️ partial | 410 个 Playwright 用例;279 DOM 用例受后端 DOWN 阻塞 |
|
|
|
+| 8 | 验收 UAT | ⚠️ partial | 文档用例 729 条,无 UAT 签字闭环 |
|
|
|
+| 9 | BDD 规格 | ❌ absent | 无 feature 文件/步骤定义 |
|
|
|
+| 10 | 冒烟测试 | ✅ present(**空转**) | 13:12 第 30 次:BIZ_OK 249/546 = 45%,fix=0 reg=0 |
|
|
|
+| 11 | 回归测试 | ⚠️ partial | 无 CI;回归靠人工定时跑 |
|
|
|
+| 12 | 探索性测试 | ❌ absent | 无 charter/记录 |
|
|
|
+| 13 | 性能测试 | ⚠️ partial | `nonfunc-perf-compat.spec.js` 5 例;无压测(需联网未授权) |
|
|
|
+| 14 | 可靠性测试 | ⚠️ partial | TC-P-N02 并发不串数据用例**本轮失败** |
|
|
|
+| 15 | 安全测试 | ⚠️ partial | SAST/DAST 无;`nonfunc-security.spec.js` 11 例,2 红(TC-A-N05 / TC-P-N11) |
|
|
|
+| 16 | 依赖漏洞扫描 | ❌ absent | 无 OWASP DC/Snyk(需联网未授权) |
|
|
|
+| 17 | 兼容性测试 | ⚠️ partial | `nonfunc-perf-compat.spec.js`;真机矩阵无 |
|
|
|
+| 18 | 可用性测试 | ❌ absent | 无 |
|
|
|
+| 19 | 无障碍测试 | ❌ absent | 无 |
|
|
|
+| 20 | QA 流程/度量 | ⚠️ partial | 台账齐全;**无 CI、执行状态未回写** |
|
|
|
+
|
|
|
+## 4. 台账与静态覆盖(脚本刷新)
|
|
|
+
|
|
|
+- `discover_tests.py`:357 控制器 / **1937** handler / 覆盖 **214(11.05%)**;17 全 / 72 部分 / 267 未覆盖 / 1 无 handler;198 测试文件 / 1491 `@Test`。
|
|
|
+- `test_inventory.py`:用例 **2677**(md 729 / Playwright 410 / Python 47 / Java 1491 / 场景 9);已自动化 **279**、待自动化 **738**、未跟踪 990;侧车执行 22 通过 / 5 失败。
|
|
|
+- **P0 结构化用例 79 条 100% 待自动化**(上轮口径修正后未改善)。
|
|
|
+
|
|
|
+## 5. 五要素问题清单
|
|
|
+
|
|
|
+### P1 |`CfCommissionServiceSettleTest` 8 例全红(分润结算零覆盖)
|
|
|
+1. **问题描述**:8 条结算用例全部 `Wanted but not invoked: cfBalanceService.earnByRule(...)`,即 F03a/F03b 一条都没发放。
|
|
|
+2. **测试 bug 点**:`CfCommissionServiceSettleTest.java:102`(`@InjectMocks`)缺 `@Mock ProductOrderMapper productOrderMapper`;产品侧 `CfCommissionService.calcOrderPpoints()` 对 `product` 单依赖 `productOrderMapper.selectById(orderId)`,字段为 null → try 内 NPE 被吞 → `basePpoints=0` → `distributeToReferrers()` 在第 2 个 if 直接 return。
|
|
|
+3. **最优修改方案**:补 `@Mock ProductOrderMapper` + `@Mock OrderItemMapper`,在 `setUp()` 打桩 `selectById(ORDER_ID)` 返回实付=订单金额、`findByOrderId(ORDER_ID)` 返回空列表(单商品路径);并对 `basePpoints` 加一条显式断言。
|
|
|
+4. **修改目的**:让「分润基数 = 本单 P 点」这一核心规则可被机器判定,否则整条推荐分润链路在回归中恒绿假象。
|
|
|
+5. **闭环方式**:`mvn -o -DskipTests=false surefire:test -Dtest=CfCommissionServiceSettleTest -DskipTests=false`,要求 8/8 通过,并纳入 CI。
|
|
|
+
|
|
|
+### P2 |`AuthControllerTest` 4 例断言停留废弃接口口径
|
|
|
+1. **问题描述**:`autoLogin_Success` 期望 200 实得 410;`autoLogin_NoOpenid`/`UserNotFound` 期望 500 实得 410;`switchRole_NotLoggedIn` 期望 500 实得 401。
|
|
|
+2. **测试 bug 点**:`AuthControllerTest.java:193/205/215/560` 未随「自动登录接口废弃(410 Gone)+ Result 分型」同步。
|
|
|
+3. **最优修改方案**:断言改为「410 + 废弃提示语」与「401 未登录」;对 `Result.error()` 分型(见 P8)后的新码再校对。
|
|
|
+4. **修改目的**:消除「接口已废弃但测试仍在期待旧行为」的长期假红,恢复安全语义可判定性。
|
|
|
+5. **闭环方式**:单类复跑 39/39 通过;并列入回归必跑集。
|
|
|
+
|
|
|
+### P3 |`ArticleControllerTest` 9 例(4 断言 + 5 error)
|
|
|
+1. **问题描述**:`list_Success`/`list_LoggedInUser` 返回 null,`featured_Success`/`featured_DefaultSize` 返回 0 条;另有 2 例 NPE、3 例 `Mockito` 异常,均在 `recordRead_*`。
|
|
|
+2. **测试 bug 点**:`ArticleControllerTest.java:70/90/109/132/177/190/201/215/226`——列表分页参数与 VO 包装口径未随实现更新;`recordRead` 三例打桩方法签名与实现不符。
|
|
|
+3. **最优修改方案**:按当前 VO(`PageResult`/`data.list`)重写断言;`recordRead` 改为对齐实现签名(含 duration 可空分支)。
|
|
|
+4. **修改目的**:文章域是内容主链路,9 红长期噪音会掩盖真实回归。
|
|
|
+5. **闭环方式**:`-Dtest=ArticleControllerTest` 复跑 11/11 绿;接入 CI。
|
|
|
+
|
|
|
+### P4 |`DanReportParseServiceTest` 4 例解析断言失败(**疑似产品缺陷,需研发确认**)
|
|
|
+1. **问题描述**:A2 标准核心素养格式取不到姓名(期望「俊辰」得 null);B4 回归检测恒 true;A1 fallback 取不到感知觉百分位;A1 详情页取不到 `processingSpeed_score`。
|
|
|
+2. **测试 bug 点**:`DanReportParseServiceTest.java`(`integration/service/`)用例内联样例文本,断言在测试侧失败,指向 `DanReportParseService` 解析规则未覆盖该版式。
|
|
|
+3. **最优修改方案**:先由研发确认「A2 姓名 / A1 fallback / A1 详情页加工速度 / B4 回归」四条规则是否属当前规格;属规格内 → 修解析器;属规格变更 → 同步用例与规格文档(禁止直接改断言迁就实现)。
|
|
|
+4. **修改目的**:健康报告解析是 DOA/画像上游数据源,静默取空会污染下游全部测评结论。
|
|
|
+5. **闭环方式**:4 例转绿 + 用真实脱敏 PDF 加 1 条端到端解析用例;由测试负责人复验后入库。
|
|
|
+
|
|
|
+### P5 |`ArticleWorkflowTest` 3 例异常文案断言过期
|
|
|
+1. **问题描述**:期望「仅已驳回的文章可重新编辑」,实际「仅已驳回或已撤回的文章可重新编辑」。
|
|
|
+2. **测试 bug 点**:`ArticleWorkflowTest`(`reDraft_notRejected_*` 三例);产品侧 `ArticleService.java:1391` 已支持「已撤回」。
|
|
|
+3. **最优修改方案**:断言改为包含「已驳回或已撤回」;建议断言改用错误码而非中文文案。
|
|
|
+4. **修改目的**:文案耦合导致规格正常演进被记成红,长期消耗排查成本。
|
|
|
+5. **闭环方式**:3 例转绿;同时给「异常文案断言」定规范:优先断言 code。
|
|
|
+
|
|
|
+### P6 |`TaskProgressUpdateTest` 3 例反射注入字段不存在
|
|
|
+1. **问题描述**:`inject:64 ? NoSuchField platformPointsService`,`setUp` 即失败,3 例全部未真正执行。
|
|
|
+2. **测试 bug 点**:`TaskProgressUpdateTest.java:59/64` 反射字段名与实现字段名不一致。
|
|
|
+3. **最优修改方案**:改用 `@InjectMocks` 或按当前字段名/类型反射;字段更名时以编译错误暴露而非运行期失败。
|
|
|
+4. **修改目的**:setUp 失败会掩盖 3 条真实断言,属「假执行」。
|
|
|
+5. **闭环方式**:3 例转绿并确认断言确实运行(surefire 中 `tests=3` 且无 error)。
|
|
|
+
|
|
|
+### P7 |`ProductOrderServiceFulfillmentMultiModeTest` 6 例
|
|
|
+1. **问题描述**:`setUp:37 InvalidUseOfMatchers`×3(stub 混用原始值+匹配器),`stubBuyerWithOpenid:71` NPE×3。
|
|
|
+2. **测试 bug 点**:`ProductOrderServiceFulfillmentMultiModeTest.java:37/71/85/168/247`。
|
|
|
+3. **最优修改方案**:全参数统一用 `eq()/any()`;`stubBuyerWithOpenid` 补 `userMapper`/`memberMapper` 桩。
|
|
|
+4. **修改目的**:发货多模式(快递/虚拟/自提)是履约关键路径,当前 6 例零有效断言。
|
|
|
+5. **闭环方式**:6 例转绿;纳入 CI 快速集。
|
|
|
+
|
|
|
+### P8 |`Result.error()` 恒 `code=500`(结构级,跨轮未修)
|
|
|
+1. **问题描述**:`common/Result.java:37-39` `error()` 硬编码 `setCode(500)`,参数缺失/无权限/不存在全部伪装成服务器错误。
|
|
|
+2. **测试 bug 点**:非测试缺陷,是**测试可判定性缺陷的根因**——`ActivityServicePublishTest.publish_draft_success`、`ActivityAdminServiceTest.review_publish_success` 期望 200 得 500,无法区分「业务拒绝」与「系统故障」;冒烟 `SERVER_ERR` 恒 0 属假安全信号。
|
|
|
+3. **最优修改方案**:新增 `badRequest(400)/forbidden(403)/notFound(404)/conflict(409)` 工厂方法,新代码先用;冒烟脚本按 `code+message` 分桶(`ops_interface_smoke.py:1156` 的 `biz==200` 二值判定同步改)。
|
|
|
+4. **修改目的**:错误语义可判定,才能把 295 条 BIZ_FAIL 拆成「可判定拒绝」与「真实故障」。
|
|
|
+5. **闭环方式**:新增单测覆盖 4 个工厂方法;冒烟报告新增 `EXPECTED_DENY` 分桶,连续 2 轮 `REAL_ERR=0` 视为闭环。
|
|
|
+
|
|
|
+### P9 |`MembershipPaySwitchTest` / `PaymentServiceORDRoutingTest` / `TaskPlanServiceTest` 3 例行为不符
|
|
|
+1. **问题描述**:配置缺失时期望返回 null 却创建了订单(`ORD179368310210400525`,FAMILY/131400);未知前缀回调期望 SUCCESS 实得 FAIL;`applyAndActivate` 期望 100 实得 null。
|
|
|
+2. **测试 bug 点**:`MembershipPaySwitchTest.createOrderWithPayType_virtualEnabled_configMissing_returnsNull`、`PaymentServiceORDRoutingTest.unknownPrefix_routesToHandlePaymentCallback`、`TaskPlanServiceTest.applyAndActivate_…:153`。
|
|
|
+3. **最优修改方案**:逐条先判「实现正确还是用例过期」;支付相关两条**按实现从严**——若实现确实在配置缺失时创建订单,则属资金安全缺陷,须研发修实现而非改用例。
|
|
|
+4. **修改目的**:支付/会员属资金域,不允许「改用例迁就实现」。
|
|
|
+5. **闭环方式**:三条各自给出定性结论(实现修 / 用例修),转绿后由测试负责人 `--mark-green` 前复验。
|
|
|
+
|
|
|
+### P10 |执行机制:假绿 + 未入 PATH(跨轮复发)
|
|
|
+1. **问题描述**:`pom.xml:28 <skipTests>true</skipTests>` → 裸跑 `mvn test` 输出 `Tests are skipped.` + `BUILD SUCCESS`;`mvn` 不在 PATH,需硬编码 `D:\tools\apache-maven-3.9.9`。
|
|
|
+2. **测试 bug 点**:构建配置(非测试代码)。
|
|
|
+3. **最优修改方案**:把 `skipTests` 从 pom 常量改为 profile 开关(默认 false);补 `mvnw` 或在 CI 显式声明 `-DskipTests=false`。
|
|
|
+4. **修改目的**:消除「0 用例也 BUILD SUCCESS」的假绿通道,这是接 CI 的前置条件。
|
|
|
+5. **闭环方式**:CI 中故意改坏 1 条断言,验证流水线确实红灯。
|
|
|
+
|
|
|
+### P11 |41 个 `@SpringBootTest` 类本轮未执行(345 例)
|
|
|
+1. **问题描述**:本轮仅跑 2 个 Spring 上下文类,其余 41 类(345 例)无本轮结果;上批(12:14–12:38)87 红中含 36 条 `Too many connections` 环境噪声。
|
|
|
+2. **测试 bug 点**:测试数据源直连共享 MySQL,无隔离、无连接池上限控制,`@SpringBootTest` 并行启动多上下文即耗尽。
|
|
|
+3. **最优修改方案**:测试数据源改 H2/Testcontainers 或独立 schema + `spring.datasource.hikari.maximum-pool-size=2`;surefire `forkCount=1`、`reuseForks=true`(上下文复用)。
|
|
|
+4. **修改目的**:把「环境噪声」从信号里剔除,87 红才有解释价值。
|
|
|
+5. **闭环方式**:41 类全量重跑,红数应与纯单测红因分布同量级(<20 条)且 `Too many connections` = 0。
|
|
|
+
|
|
|
+### P12 |`.last-run.json` 自相矛盾
|
|
|
+1. **问题描述**:`tests/test-results/.last-run.json` 为 `status=failed` 且 `failedTests=[]` 空数组(被 git 跟踪,HEAD 为 `passed`)。
|
|
|
+2. **测试 bug 点**:Playwright reporter 写入时机/字段映射缺陷。
|
|
|
+3. **最优修改方案**:改为在 `onEnd` 统一写入 `{status, failedTests:[{file,title,error}]}`;无失败则 `status=passed`。
|
|
|
+4. **修改目的**:执行结果文件是自动化消费入口,空数组会让下游误判「无失败」。
|
|
|
+5. **闭环方式**:跑一轮含 1 条预期失败,校验文件字段完整。
|
|
|
+
|
|
|
+## 6. 冒烟 / e2e 证据(非本轮执行,引自 13:12 产物)
|
|
|
+
|
|
|
+- 接口冒烟:**546 端点 / BIZ_OK 249(45%)/ BIZ_FAIL 295 / CONN_ERR 2 / NOT_FOUND 0 / SERVER_ERR 0**,`fix=0 reg=0`——连续第 30 次同结果,判**空转**(无收敛退出码、无与上轮 diff、无 REAL_ERR 派单)。
|
|
|
+- API e2e:**51 passed / 3 failed / 3 skipped**;3 条红为 `TC-P-N02/X-N01`(并发不串数据)、`TC-A-N05`(非管理员访问后台未拒)、`TC-P-N11`(非 PDF 上传未拒)。
|
|
|
+- TDD 状态机:2 键仍 `RED`(`health.report.createReport`、`dan.assessment.getActiveMaterial`),停滞超 25h;2 个影子测试仍 `??` 未入库。
|
|
|
+
|
|
|
+## 7. 覆盖缺口清单(按优先级)
|
|
|
+
|
|
|
+| 缺口 | 现状 | 风险 | 建议测试设计 | 优先级 | 闭环方式 |
|
|
|
+|---|---|---|---|---|---|
|
|
|
+| 分润结算零有效覆盖 | 8 例全红(P1) | 资金错发无法被机器发现 | 补 `productOrderMapper` 桩 + `basePpoints` 断言 + 两级引荐人矩阵 | **P0** | 8/8 绿 + CI |
|
|
|
+| 41 个 Spring 上下文类无有效结果 | 345 例未实测 | 集成层真实回归被环境噪声掩盖 | 数据源隔离 + `forkCount=1` | **P0** | 全量重跑,连接错误=0 |
|
|
|
+| 归属类断言不可判定 | `Result.error()` 恒 500 | 业务拒绝与系统故障不可区分 | 4xx 工厂方法 + 冒烟 `EXPECTED_DENY` 分桶 | **P0** | REAL_ERR 连续 2 轮=0 |
|
|
|
+| 报告解析规则无有效回归 | 4 例红(P4) | 下游画像/DOA 数据污染 | 真实脱敏 PDF 端到端解析用例 | **P0** | 4 例绿 + 1 条 E2E |
|
|
|
+| 后端覆盖率 11.05% | 1937 handler 覆盖 214 | 大部分接口无护栏 | 按 `AdminController` 等未覆盖 Top10 排期 | P1 | ≥30% |
|
|
|
+| P0 文档用例 79 条零自动化 | 0/79 | 核心业务只有文档无脚本 | 批量转 Playwright API spec | P1 | 100% |
|
|
|
+| 无 CI | 无 workflow | 红灯不阻断合并 | GitHub Actions:`surefire:test` + jest + 冒烟 | P0 | CI 阻断红灯 |
|
|
|
+| 无 JaCoCo | 覆盖数字来自静态命中 | 覆盖率不可审计 | 加 jacoco-maven-plugin | P2 | 行覆盖报表 |
|
|
|
+| 变异测试/BDD/无障碍/依赖扫描 | absent | 断言强度/规格可读性无保障 | 先 PIT 限定 2 个核心 Service | P2 | 各 1 个试点 |
|
|
|
+| 冒烟 fix/reg 无因果 | 30 次空转 | 「修复/回归」计数无意义 | 基线改 `git show HEAD:interface_test_report.tsv` + CONN_ERR 三次重试 | P1 | 连续 2 轮 fixed>0 |
|
|
|
+
|
|
|
+## 8. 结论
|
|
|
+
|
|
|
+**门禁结论:不通过**
|
|
|
+
|
|
|
+| 门槛 | 判定 | 依据 |
|
|
|
+|---|---|---|
|
|
|
+| G1 可执行环境 | ⚠️ 部分 | Maven 3.9.9 可得但不在 PATH;后端 9082 / AI 9000 DOWN |
|
|
|
+| G2 前端套件全绿 | ✅ 达成 | 296/296 |
|
|
|
+| G3 后端套件全绿 | ❌ 未达成 | 本轮实测 56 红 / 19 类(另 345 例未实测) |
|
|
|
+| G4 结果可复现 | ✅ 达成 | 纯单测子集 1079/25F/18E 与 12:56 批次逐条一致,确定性红 |
|
|
|
+| G5 覆盖 ≥30% | ❌ 未达成 | 11.05%(静态命中) |
|
|
|
+| G6 安全冒烟 11/11 | ❌ 未达成 | TC-A-N05 / TC-P-N11 仍红 |
|
|
|
+| G7 P0 用例自动化 100% | ❌ 未达成 | 0/79 |
|
|
|
+| G8 CI 阻断红灯 | ❌ 未达成 | 无任何 workflow |
|
|
|
+
|
|
|
+**正向变化**:前端连续 3 轮全绿;本轮首次把「红因」从「147 条笼统红」收敛到「56 条可定位红 + 8 类精确根因」,其中 P1(8 例同根因)与 P4(4 例疑似产品缺陷)是新增的可执行结论。
|
|
|
+
|
|
|
+**最快翻盘顺序**:①P1 补桩 → 8 例转绿;②P10 关掉 `skipTests=true` 假绿;③P11 数据源隔离后跑完 41 类;④P8 `Result` 4xx 分型;⑤P2/P3/P5/P6/P7 测试侧修断言;⑥建最小 CI。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+### 未实测项(如实标注,不得视为通过)
|
|
|
+
|
|
|
+- 41 个 `@SpringBootTest` 类 / 345 例:**未执行**(时间预算 + 连接池风险)。
|
|
|
+- Playwright 410 例、接口冒烟:**未执行**(9082/9000 DOWN)。
|
|
|
+- `cfc-web` jest:`node_modules` 未装(需联网)。
|
|
|
+- `cfc-langgraph` pytest 47 例:无 `.venv`/pytest(需联网)。
|
|
|
+- JaCoCo 行覆盖:**未测**(无插件)。
|
|
|
+- 性能压测、依赖漏洞扫描:需联网未授权。
|
|
|
+- 变异测试、BDD、无障碍:无资产。
|