# 万事宜 v1.0.0 封版测试计划 > **版本**: 1.0.0 > **创建日期**: 2026-08-12 > **测试类型**: 封版全面测试与验收 --- ## 一、测试范围与策略 ### 1.1 测试目标 | 维度 | 说明 | 验收标准 | |------|------|---------| | 功能完整性 | 所有核心功能模块正常运行 | 单元测试通过率 ≥ 90%,E2E 核心流程通过率 ≥ 80% | | 性能稳定性 | 算法执行效率、页面加载速度 | 算法执行 < 1s,页面加载 < 3s | | 兼容性适配 | 多浏览器/多设备/多平台 | 主流浏览器正常渲染,无功能性差异 | | 安全性验证 | 纯客户端数据安全 | 无 XSS 注入风险,本地存储加密 | | 用户体验 | 交互流程、国际化、异常处理 | 9 种语言完整覆盖,异常场景有提示 | ### 1.2 测试范围 | 模块 | 优先级 | 测试类型 | |------|--------|---------| | 黄历搜索 (almanac-search) | P0 | 单元测试 + E2E | | 紫微斗数排盘 (ziwei) | P0 | 单元测试 + E2E + 交叉验证 | | 运势分析 (fortune) | P0 | 单元测试 + E2E | | 核心算法 (algorithms) | P0 | 单元测试 + 交叉验证 | | 业务服务 (services) | P1 | 单元测试 | | 工具函数 (utils) | P1 | 单元测试 | | 通用组件 (components) | P1 | 单元测试 | | 国际化 (locales) | P1 | 手动验证 | | 页面结构 (pages) | P1 | 单元测试 + E2E | --- ## 二、测试环境配置 ### 2.1 单元测试环境 (Vitest) | 配置项 | 值 | |--------|-----| | 框架 | Vitest v4.0.18 | | 环境 | jsdom | | 覆盖率阈值 | Lines: 70%, Functions: 70%, Branches: 60% | | 测试文件匹配 | `src/**/*.{test,spec}.{js,ts}` | ### 2.2 E2E 测试环境 (Playwright) | 配置项 | 值 | |--------|-----| | 框架 | Playwright v1.57.0 | | 基础 URL | `http://localhost:5173` | | 浏览器 | Chromium (Desktop), Mobile Chrome (Pixel 5), Mobile Safari (iPhone 13) | | 截图策略 | 仅失败时截图 | | Trace 策略 | 首次重试时记录 | ### 2.3 兼容性测试矩阵 | 浏览器 | 桌面端 | 移动端 | |--------|--------|--------| | Chrome | ✅ 1440×900 | ✅ 375×667 (Pixel 5) | | Safari | ✅ 1440×900 | ✅ 390×844 (iPhone 13) | | Firefox | ✅ 1440×900 | ❌ (未配置) | | Edge | ✅ 1440×900 | ❌ (未配置) | --- ## 三、测试用例设计 ### 3.1 功能测试用例 #### 3.1.1 黄历搜索模块 | 编号 | 测试场景 | 前置条件 | 验证点 | |------|---------|---------|--------| | TC-ALM-001 | 页面加载 | 导航到 almanac-search 页 | 页面标题、搜索面板、模板面板正常渲染 | | TC-ALM-002 | 添加搜索条件 | 进入搜索页面 | 可添加宜忌条件,条件数量正确递增 | | TC-ALM-003 | 删除搜索条件 | 已添加条件 | 条件可删除,数量正确递减 | | TC-ALM-004 | 执行搜索 | 至少添加一个条件 | 调用 searchService,显示结果或空状态 | | TC-ALM-005 | 搜索结果排序 | 有搜索结果 | 可按日期/匹配度排序,可切换升序/降序 | | TC-ALM-006 | 模板选择 | 选择预置模板 | 自动填充条件并执行搜索 | | TC-ALM-007 | 空状态显示 | 无搜索条件 | 显示 EmptyState 组件 | | TC-ALM-008 | 错误处理 | 搜索失败 | 显示错误信息和重试按钮 | | TC-ALM-009 | 关键词搜索 | 从 URL 携带 keyword 参数 | 自动执行关键词搜索 | | TC-ALM-010 | 加载状态 | 搜索进行中 | 显示 LoadingIndicator | #### 3.1.2 紫微斗数排盘模块 | 编号 | 测试场景 | 前置条件 | 验证点 | |------|---------|---------|--------| | TC-ZW-001 | 页面加载 | 导航到 ziwei 页 | 显示出生信息表单 | | TC-ZW-002 | 日期选择 | 点击日期选择器 | 可正确选择出生日期 | | TC-ZW-003 | 时辰选择 | 点击时辰选择器 | 12 个时辰选项完整 | | TC-ZW-004 | 性别切换 | 点击性别选项 | 可切换男/女,选中状态高亮 | | TC-ZW-005 | 排盘计算 | 选择日期、时辰、性别 | 调用 ziweiService.generateChart | | TC-ZW-006 | 宫位展示 | 排盘完成 | 12 宫位卡片正确渲染 | | TC-ZW-007 | 三方四正分析 | 排盘完成 | 三方四正评分正确显示 | | TC-ZW-008 | 综合评断 | 排盘完成 | 显示整体运势评断文字 | | TC-ZW-009 | 空输入验证 | 未选择日期 | 排盘按钮不执行计算 | | TC-ZW-010 | 算法正确性 | 已知输入 | 与已知案例交叉验证(46 项测试) | #### 3.1.3 运势分析模块 | 编号 | 测试场景 | 前置条件 | 验证点 | |------|---------|---------|--------| | TC-FT-001 | 页面加载 | 导航到 fortune 页 | 显示日运/月运标签页 | | TC-FT-002 | 标签切换 | 默认日运 | 可切换到月运标签 | | TC-FT-003 | 默认日运选中 | 首次加载 | 日运标签默认高亮 | | TC-FT-004 | 无排盘数据 | 未排盘 | 显示提示信息 | | TC-FT-005 | 日期选择器 | 日运页面 | 可弹出日期选择器 | | TC-FT-006 | 月份选择器 | 月运页面 | 可弹出月份选择器 | | TC-FT-007 | 四维度建议 | 有排盘数据 | 显示事业/财运/感情/健康建议 | | TC-FT-008 | 幸运信息 | 有排盘数据 | 显示幸运色/数字/方位 | ### 3.2 算法交叉验证用例 | 编号 | 测试场景 | 验证点 | 状态 | |------|---------|--------|------| | TC-ALGO-001 | 黄历宜忌一致性 | 同一建除日期的宜忌交集 | ✅ 68 项测试通过 | | TC-ALGO-002 | 紫微斗数交叉验证 | 已知生辰的排盘结果一致性 | ✅ 46 项测试通过 | | TC-ALGO-003 | 紫微算法单元测试 | 32 个排盘算法函数 | ✅ 全部通过 | | TC-ALGO-004 | 运势策略测试 | 28 个运势策略场景 | ✅ 全部通过 | | TC-ALGO-005 | 三方四正测试 | 9 个三方四正分析场景 | ✅ 全部通过 | ### 3.3 性能测试用例 | 编号 | 测试场景 | 预期指标 | 测试方法 | |------|---------|---------|---------| | TC-PERF-001 | 紫微排盘算法执行时间 | < 500ms | 单元测试计时 | | TC-PERF-002 | 黄历计算算法执行时间 | < 200ms | 单元测试计时 | | TC-PERF-003 | 页面首次加载时间 | < 3s | E2E 页面加载计时 | | TC-PERF-004 | 搜索结果渲染 | < 1s (100 条) | 手动测试 | | TC-PERF-005 | 长时间使用稳定性 | 无内存泄漏 | 手动操作 30 分钟 | ### 3.4 国际化验证用例 | 编号 | 语言 | 验证点 | |------|------|--------| | TC-I18N-001 | 简体中文 (zh-CN) | 完整翻译 | | TC-I18N-002 | 繁体中文 (zh-TW) | 完整翻译 | | TC-I18N-003 | 英文 (en) | 完整翻译 | | TC-I18N-004 | 日文 (ja) | 完整翻译 | | TC-I18N-005 | 韩文 (ko) | 完整翻译 | | TC-I18N-006 | 法文 (fr) | 完整翻译 | | TC-I18N-007 | 德文 (de) | 完整翻译 | | TC-I18N-008 | 西班牙文 (es) | 完整翻译 | | TC-I18N-009 | 葡萄牙文 (pt) | 完整翻译 | ### 3.5 安全验证用例 | 编号 | 测试场景 | 验证点 | |------|---------|--------| | TC-SEC-001 | XSS 注入 | 搜索关键词含 XSS 脚本不执行 | | TC-SEC-002 | 本地存储安全 | 敏感数据不泄露 | | TC-SEC-003 | 网络权限 | manifest.json 中 INTERNET 权限为 false | | TC-SEC-004 | 隐私政策 | 首次启动显示隐私政策 | --- ## 四、测试执行流程 ### 4.1 执行顺序 ``` Phase 1: 基线建立 ├── 运行单元测试套件 (npm run test) ├── 运行覆盖率测试 (npm run test:coverage) └── 运行 E2E 测试 (npm run test:e2e) Phase 2: 缺陷修复 ├── 修复测试失败 ├── 补充缺失测试用例 └── 回归验证 Phase 3: 专项测试 ├── 性能测试 ├── 兼容性测试 ├── 安全验证 └── 国际化验证 Phase 4: 验收报告 ├── 汇总测试结果 ├── 缺陷清单与修复建议 └── 验收结论 ``` ### 4.2 测试命令 ```bash # 单元测试 npm run test # 运行所有单元测试 npm run test:coverage # 运行测试并生成覆盖率报告 # E2E 测试 npm run test:e2e # 运行所有 E2E 测试 npm run test:e2e:ui # 带 UI 界面的 E2E 测试 # 单文件测试 npx vitest --run src/algorithms/__tests__/almanac.test.ts npx playwright test e2e/ziwei-chart.spec.ts ``` --- ## 五、缺陷管理机制 ### 5.1 缺陷分级 | 级别 | 定义 | 处理要求 | |------|------|---------| | P0 (阻断) | 核心功能不可用,数据丢失 | 立即修复,必须在封版前解决 | | P1 (严重) | 功能偏离预期,但可绕过 | 当日修复 | | P2 (一般) | 界面问题,非核心功能 | 在封版前解决 | | P3 (建议) | 体验优化建议 | 记录,后续迭代 | ### 5.2 缺陷生命周期 ``` 发现 → 记录 → 确认 → 分配 → 修复 → 验证 → 关闭 ↻ 回归测试 ``` ### 5.3 缺陷记录格式 ``` --- ID: BUG-001 模块: almanac-search 级别: P1 描述: 搜索条件为空时点击搜索,错误提示未显示 环境: H5 / Chrome 143 步骤: 1. 进入搜索页 2. 不添加条件 3. 点击搜索按钮 预期: 显示"请添加搜索条件"提示 实际: 无任何反应 状态: 待修复 --- ``` --- ## 六、当前测试基线 (2026-08-12) ### 6.1 单元测试 | 指标 | 当前值 | 目标 | 状态 | |------|--------|------|------| | 测试文件数 | 19 | ≥ 19 | ✅ | | 测试用例数 | 361 | ≥ 350 | ✅ | | 通过率 | 100% | ≥ 90% | ✅ | | 执行时间 | 2.98s | < 5s | ✅ | ### 6.2 覆盖率 | 模块 | 指令覆盖率 | 分支覆盖率 | 函数覆盖率 | 状态 | |------|-----------|-----------|-----------|------| | 整体 | 77.50% | 69.09% | 76.20% | ⚠️ | | 算法层 | 93.73% | 80.66% | 98.07% | ✅ | | 服务层 | 81.12% | 63.87% | 81.42% | ⚠️ | | 工具层 | 41.58% | 45.59% | 33.33% | ❌ | | 组件层 | 0% | 0% | 0% | ❌ | ### 6.3 E2E 测试 | 项目 | 当前值 | 目标 | 状态 | |------|--------|------|------| | 浏览器 | 未安装 | 已安装 | ⏳ 安装中 | | 测试结果 | 待运行 | - | ⏳ | --- ## 七、验收标准 ### 7.1 必须达标项 | 标准 | 阈值 | 验证方式 | |------|------|---------| | 单元测试通过率 | ≥ 90% | `npm run test` | | 覆盖率 (指令) | ≥ 70% | `npm run test:coverage` | | 覆盖率 (函数) | ≥ 70% | `npm run test:coverage` | | 覆盖率 (分支) | ≥ 60% | `npm run test:coverage` | | E2E 核心流程通过率 | ≥ 80% | `npm run test:e2e` | | 算法交叉验证 | 100% | 专项测试 | | 无 P0 缺陷 | 0 | 缺陷清单 | ### 7.2 推荐达标项 | 标准 | 阈值 | 验证方式 | |------|------|---------| | 算法执行时间 | < 1s | 性能测试 | | 页面加载时间 | < 3s | E2E 计时 | | 国际化覆盖 | 9/9 语言 | 手动验证 | | 兼容性覆盖 | 3+ 浏览器 | Playwright 矩阵 | --- ## 八、风险与缓解措施 | 风险 | 影响 | 概率 | 缓解措施 | |------|------|------|---------| | E2E 测试与当前 UI 不匹配 | 高 | 高 | 重写 E2E 测试以匹配当前 UI | | 组件覆盖率严重不足 | 中 | 高 | 优先补充核心组件测试 | | 国际化 key 缺失 | 中 | 中 | 扫描 i18n 使用情况,补充缺失 key | | 纯客户端架构安全风险低 | 低 | 低 | 基础安全验证即可 | | 性能瓶颈在算法层 | 低 | 低 | 算法已通过 114 项交叉验证测试 | --- ## 九、测试报告模板 ### 9.1 最终测试报告结构 ``` 1. 测试概述 - 测试范围、时间、环境 - 总体通过率 2. 测试结果汇总 - 单元测试:通过/总数 - E2E 测试:通过/总数 - 覆盖率:指令/分支/函数 3. 缺陷清单 - 按严重级别分类 - 每个缺陷的状态 4. 专项测试结果 - 性能测试 - 兼容性测试 - 安全验证 - 国际化验证 5. 修复建议 - 封版前必须修复项 - 后续迭代建议项 6. 验收结论 - 是否达到交付标准 - 签署确认 ```