# 数字能量小程序测试策略评估报告 **日期**: 2026-05-31 **评估人**: 数字能量小程序测试工程师 --- ## 1. 现有测试资产总览 ### 1.1 后端测试(10个JUnit类,共 2,683 行) | 测试类 | 被测模块 | 行数 | 覆盖程度 | 质量评估 | |--------|---------|------|---------|---------| | `CalculatorServiceTest` | 命盘计算引擎 | 401 | ⭐⭐⭐ 高 | 7位置+16位置+卓越数+30位置方案文档 | | `UserServiceTest` | 用户/登录/配额 | 369 | ⭐⭐⭐ 高 | 注册、推广码、VIP、额度、跨天重置 | | `OrderServiceTest` | 订单/支付回调 | 365 | ⭐⭐⭐ 高 | 幂等、B端固定佣金、C端比例佣金、多级 | | `ChartServiceTest` | 命盘CRUD/咨询 | 287 | ⭐⭐⭐ 高 | 创建/配额/Dify降级/查重/删除权限 | | `ControllerIntegrationTest` | 控制器集成 | 683 | ⭐⭐⭐ 高 | Auth/Chart/Chat/Pay/Admin/Profile/Commission | | `ChatServiceTest` | AI问答 | 166 | ⭐⭐⭐ 高 | 消息保存/配额/权限/Dify降级/顺序验证 | | `ConfigServiceTest` | 系统配置 | 155 | ⭐⭐⭐ 高 | 缓存/CRUD/类型转换/缺省值 | | `CommissionServiceTest` | 佣金查询 | 147 | ⭐⭐ 中 | 基础查询覆盖,**状态流转测试 @Disabled** | | `WithdrawServiceTest` | 提现管理 | 125 | ⭐⭐ 中 | Phase 2功能,基础覆盖 | | `DifyServiceTest` | AI调用 | 83 | ⭐⭐ 中 | 成功/异常/空响应,工具类覆盖有限 | ### 1.2 测试资产分布 ``` 后端总代码量: ~2,897 行(12 services + 10 controllers) 后端测试代码: ~2,683 行(含 ControllerIntegrationTest) 测试/代码比: ~92%(仅看有测试的模块) ``` ### 1.3 前端测试 | 类型 | 状态 | |------|------| | 单元测试框架 | ❌ 未安装 | | 组件测试 | ❌ 无 | | Store 测试 | ❌ 无 | | E2E 测试 | ❌ 无 | | 真机测试方案 | ❌ 无 | --- ## 2. 覆盖缺口矩阵 ### 2.1 后端完全未覆盖 | 服务 | 行数 | 风险等级 | 说明 | |------|------|---------|------| | **WxPayService** | 189 行 | 🔴 高 | 微信支付统一下单、回调验证、签名。**支付是资金核心** | | **WeChatService** | 67 行 | 🟡 中 | codeToOpenid、消息模板等 | | **AnnotationService** | 64 行 | 🟢 低 | 标注/标签CRUD,逻辑简单 | ### 2.2 控制器分层覆盖 ControllerIntegrationTest 覆盖了 API 层级的集成,但缺少: - **逐控制器粒度测试**(不依赖MockMvc的场景测试) - **AdminController** 的配置管理具体功能验证(仅测了 token 拦截) - **ProfileController** updateProfile 的字段级验证 ### 2.3 已知缺陷(标记 @Disabled) | 位置 | 问题 | 影响 | |------|------|------| | `CommissionServiceTest.testCommissionStatusFlow_pendingToSettled` | pending→settled 状态流转断链 | 佣金状态显示可能不正确 | | `CommissionServiceTest.testCommissionStatusFlow_settledToAvailable` | settled→available 自动流转未实现 | 提现管理 Phase 2 依赖此功能 | | `CalculatorServiceTest.testExternalPosition_Formulas_Documented` | 外部位置独立公式待实现 | P-X 位置计算可能沿用旧方案 | | `CalculatorServiceTest.testExternalPosition_30PositionNaming` | 30位置命名方案待实现 | A-H input层命名不完整 | ### 2.4 前端测试缺口 | 模块 | 风险 | 理由 | |------|------|------| | **TriangleChart.vue** (930行) | 🔴 高 | 复杂Canvas/position定位/交互/批注/Tag。**视觉呈现无自动化保障** | | **calculator.js** (172行) | 🔴 高 | 前端保留计算逻辑,需与后端`CalculatorService`一致性验证 | | **stores/user.js** (132行) | 🟡 中 | 登录、状态管理、配额、分销数据的state变动 | | **stores/chart.js** (72行) | 🟡 中 | 咨询流程状态管理 | | **API层 utils/api.js** | 🟡 中 | 请求拦截、错误处理、token刷新 | | **10个页面** | 🟢→🟡 | 页面间导航、参数传递、生命周期 | --- ## 3. 分层测试策略建议 ### 3.1 优先级 P0 — 阻塞级(立刻行动) | # | 测试项 | 类型 | 预估工作量 | |---|--------|------|-----------| | 1 | **WxPayService** 单元测试 | 后端 | 0.5天 | | 2 | **calculator.js 与 CalculatorService 一致性验证** | 前端+后端 | 0.5天 | | 3 | **前端单元测试框架搭建** (vitest + @vue/test-utils) | 基础设施 | 0.5天 | ### 3.2 优先级 P1 — 关键级(当前 Phase 1) | # | 测试项 | 类型 | 预估工作量 | |---|--------|------|-----------| | 4 | **TriangleChart.vue** 组件测试(渲染+交互) | 前端 | 1天 | | 5 | **stores/user.js** Pinia store 测试 | 前端 | 0.5天 | | 6 | **stores/chart.js** 咨询流程测试 | 前端 | 0.5天 | | 7 | **WeChatService** 单元测试 | 后端 | 0.25天 | | 8 | **CommissionService 状态流转修复验证** | 后端 | 0.25天 | | 9 | **AnnotationService** 单元测试 | 后端 | 0.25天 | | 10 | **分销链路E2E测试**(推广码→绑定→付费→佣金→面板) | 集成 | 1天 | ### 3.3 优先级 P2 — 重要级 | # | 测试项 | 类型 | 预估工作量 | |---|--------|------|-----------| | 11 | **AdminController** 管理后台API测试 | 后端 | 0.5天 | | 12 | **ProfileController** 资料更新字段级验证 | 后端 | 0.25天 | | 13 | **页面导航流测试**(首页→登录→命盘→支付→记录→个人) | 前端集成 | 0.5天 | | 14 | **真机兼容测试矩阵**(Top 10设备 + iOS/Android) | 真机 | 1天 | | 15 | **Canvas截图比对回归方案** | 视觉 | 1天 | ### 3.4 优先级 P3 — 增强级 | # | 测试项 | 类型 | 预估工作量 | |---|--------|------|-----------| | 16 | 额度控制边界测试(0/1/3/999 边界) | 后端 | 0.25天 | | 17 | API错误码全覆盖验证(每个controller的异常路径) | 后端 | 0.5天 | | 18 | 云函数冷启动性能测试 | 性能 | 0.5天 | | 19 | 分销多级(3+层)佣金结算准确性 | 后端 | 0.5天 | | 20 | 微信审核合规检查自动化 | 合规 | 0.5天 | --- ## 4. 测试架构建议 ### 4.1 前端测试技术选型 ``` 单元测试: vitest + @vue/test-utils(与 Vite 生态兼容) 组件测试: vitest + @vue/test-utils(渲染 + 交互 + Emits) Store测试: pinia 测试助手(isolate store from component) E2E: Playwright(web版)/ 小程序自动化SDK(真机) 覆盖率: c8/istanbul(vitest内置) ``` ### 4.2 后端测试增强 ``` 现有体系: JUnit 5 + Mockito + SpringBootTest + MockMvc 建议补充: - WxPayService: Mock RestTemplate, 验证签名/参数/回调 - WeChatService: Mock HttpClient, 验证codeToOpenid异常 - AnnotationService: 与已存在的ControllerIntegrationTest互补 - 参数化测试: @ParameterizedTest 覆盖更多生日边界 ``` ### 4.3 calculator.js 一致性验证方案 使用 **数据驱动参数化测试**,取 N=50+ 组生日分别在前端和后端计算,对比结果: ```js // 前端数据生成(Node环境运行calculator.js) const result = calculateTriangle(1990, 6, 15) // 输出: {I:6, J:6, K:1, L:9, M:3, N:1, O:4, P:9, ...} ``` ```java // 后端验证(JUnit ParameterizedTest) @CsvSource({ "1990,6,15,6,6,1,9,3,1,4,9,9,9,2,1,3,7,5,3", "2009,5,26,5,8,2,9,4,11,6,4,3,7,3,2,5,1,8,9" }) void testConsistency(int y, int m, int d, ...int expected) { assertEquals(expected, calculatorService.calculateFullTriangle(y, m, d)); } ``` ### 4.4 可视化测试方案 TriangleChart 组件验证分为三层: ``` Layer 1: 数据层 — chart prop 传入不同数据,验证matrix computed正确 Layer 2: 渲染层 — vitest + jsdom 验证 DOM 结构(数字位置、CSS class) Layer 3: 视觉层 — Playwright 截图比对(需web版),或真机手动 ``` --- ## 5. 风险矩阵 | 风险 | 概率 | 影响 | 缓解措施 | |------|------|------|---------| | 支付接口Mock与实际微信行为不一致 | 中 | 高 | 沙箱验证+手工回归+日志审计 | | 小程序Canvas在真机和模拟器渲染差异 | 高 | 中 | 截面对比+真机抽查清单 | | calculator.js与后端计算逻辑不同步 | 中 | 高 | 一致性参数化测试+CI门禁 | | 分销佣金计算出现精度问题 | 低 | 高 | 大数据量随机测试+边界验证 | | 微信审核政策变更导致下线 | 低 | 极高 | 合规检查清单+审核预检流程 | | AI解读降级策略未被触发 | 中 | 中 | Dify异常注入测试+Dify健康监控 | --- ## 6. 量化目标 | 指标 | 当前 | 目标 (Phase 1) | |------|------|---------------| | 后端Service测试覆盖率 | ~75% (9/12) | **100%** (12/12) | | 后端Controller测试覆盖率 | ~100% (1集成) | **逐控制器+集成** | | 前端单元测试覆盖率 | 0% | **>60%** (关键模块) | | 前端组件测试 | 0 | **至少3个** (TriangleChart + 2 stores) | | E2E链路覆盖 | 0 | **3条核心链路** (咨询+支付+分销) | | 已知@Disabled测试 | 4个 | **全部修复或明确理由** | | 真机兼容测试 | 未执行 | **Top 10设备每版本** | --- ## 7. 后续行动建议 1. **本周**: 修复 CommissionService 状态流转、启动 WxPayService 测试 2. **下周**: 搭建前端测试框架 + calculator.js 一致性验证 3. **Phase 1 过半**: TriangleChart 组件测试 + 分销E2E 4. **Phase 1 末**: 真机兼容矩阵 + 灰度发布前全回归