Files
everything-is-suitable/docs/plans/v1.0.0-RELEASE-TEST-PLAN.md
T
zhangxiang 810081ac0a feat: 小程序端 UI 优化与纯客户端化改造
- 移除微信订阅推送功能(云函数/订阅管理页),回归纯客户端零后端架构
- 新增今日黄历默认展示卡片 TodayAlmanacCard(9 语言翻译)
- i18n 修复:启用 globalInjection 修复 $t 未注入,插值消息全部改为
  Messages Functions 适配小程序端(63 处)
- 修复底部导航切换失效与运势页数据不刷新
- 统一设计令牌(深褐主色 + 印红强调色),组件 UI 规范重构
- 图标 iconfont 化(FontAwesome 子集化,修复 Android 豆腐块)
- 新增 postcss-px2rpx 机型自适应(仅 mp-weixin 构建生效)
- 新增 5 个用户旅程 E2E 测试(31 用例)与验收报告
- 补充微信小程序项目配置(appid)
2026-08-28 07:51:02 +08:00

446 lines
18 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 万事宜 v1.0.0 封版测试计划
> **版本**: v1.0.0
> **创建日期**: 2026-08-13
> **测试负责人**: AI 自动化测试
> **状态**: ✅ 已完成
---
## 一、测试范围与目标
### 1.1 测试目标
对万事宜 v1.0.0 进行系统性、全面性的封版测试与验收,确保:
1. **功能完整性** — 所有核心功能模块正确运行,无 P0/P1 缺陷
2. **性能稳定性** — 算法执行时间、页面加载时间、长时间运行稳定性达标
3. **兼容性适配** — 主流浏览器、设备、操作系统适配正常
4. **安全性验证** — 无 XSS 等安全漏洞,数据存储安全
5. **用户体验** — 国际化完整、UI 一致性、异常处理友好
### 1.2 测试范围
| 模块 | 子模块 | 测试重点 |
|------|--------|---------|
| **算法层** | 紫微斗数排盘、黄历计算、运势推演、三方四正、真太阳时 | 算法正确性(交叉验证)、边界条件、异常输入 |
| **服务层** | 紫微服务、黄历服务、运势服务、搜索服务、模板服务 | 业务逻辑正确性、数据流完整性 |
| **工具层** | 存储、缓存、导出、错误处理、性能监控、搜索优化 | 功能正确性、边界条件、异常处理 |
| **组件层** | 搜索面板、结果卡片、历史面板、导出面板、空状态等 | 渲染正确性、交互行为、状态管理 |
| **页面层** | 黄历搜索、紫微斗数排盘、运势分析、订阅管理 | 页面渲染、用户交互、导航流程 |
| **国际化** | 9 种语言 | 键值完整性、翻译一致性、UI 适配 |
| **构建部署** | H5 构建、Docker 部署 | 构建成功、静态资源正确 |
### 1.3 排除范围
| 项目 | 原因 |
|------|------|
| ~~微信小程序构建~~ | ~~`@dcloudio/vite-plugin-uni` v3 alpha 兼容性限制,已知问题~~ ✅ 已修复,构建成功 |
| Firefox E2E 测试 | 沙箱环境兼容性限制,建议在 CI 标准环境中运行 |
| 真机 App 测试 | 当前测试环境仅支持模拟器/H5 |
| 后端服务测试 | 纯客户端架构,零后端依赖 |
---
## 二、测试架构
### 2.1 测试分层
```
┌─────────────────────────────────────────────┐
│ E2E 测试 (Playwright) │
│ ┌─────────┐ ┌──────────┐ ┌──────────────┐ │
│ │ Chromium│ │ WebKit │ │ Mobile Chrome │ │
│ │ Desktop │ │ Safari │ │ Pixel 5 │ │
│ └─────────┘ └──────────┘ └──────────────┘ │
│ ┌──────────┐ │
│ │Mobile │ │
│ │Safari │ │
│ │iPhone 13 │ │
│ └──────────┘ │
├─────────────────────────────────────────────┤
│ 专项测试 (Vitest) │
│ ┌──────────┐ ┌───────┐ ┌────────────────┐ │
│ │ 性能测试 │ │安全测试│ │ 国际化完整性测试 │ │
│ └──────────┘ └───────┘ └────────────────┘ │
│ ┌──────────┐ ┌───────┐ │
│ │ 稳定性测试│ │兼容性 │ │
│ └──────────┘ └───────┘ │
├─────────────────────────────────────────────┤
│ 单元测试 (Vitest + jsdom) │
│ ┌──────────┐ ┌────────┐ ┌──────────────┐ │
│ │ 算法层 │ │ 服务层 │ │ 工具层 │ │
│ │ 22个文件 │ │ 5个文件 │ │ 6个文件 │ │
│ └──────────┘ └────────┘ └──────────────┘ │
│ ┌──────────┐ ┌────────┐ │
│ │ 组件层 │ │ 页面层 │ │
│ │ 6个文件 │ │ 3个文件 │ │
│ └──────────┘ └────────┘ │
└─────────────────────────────────────────────┘
```
### 2.2 测试工具链
| 工具 | 用途 | 版本 |
|------|------|------|
| Vitest | 单元测试 + 专项测试 | v4.0.18 |
| Playwright | E2E 测试 | v1.57.0 |
| jsdom | DOM 模拟环境 | v29.1.0 |
| @vue/test-utils | Vue 组件测试 | v2.4.9 |
| @vitest/coverage-v8 | 覆盖率报告 | v4.0.18 |
---
## 三、测试环境配置
### 3.1 执行环境
| 项目 | 配置 |
|------|------|
| 操作系统 | macOS (arm64) — 已验证 |
| 操作系统 | Windows (x64) — ⏸️ 待 CI 验证 |
| 操作系统 | Linux (x64) — ⏸️ 待 CI 验证 |
| Node.js | ≥ 20.0.0 |
| npm | ≥ 9.0.0 |
| 内存 | ≥ 8GB |
| 磁盘 | ≥ 10GB 可用空间 |
> **多 OS 说明**: 本应用为纯客户端 UniApp 应用,核心算法逻辑与操作系统无关,H5 构建产物为纯静态资源。E2E 测试已在 4 种浏览器上验证通过。建议在 CI 流水线中增加 Linux (Ubuntu) 构建与测试步骤。
### 3.2 浏览器矩阵
| 浏览器 | 类型 | 设备模拟 | 是否启用 |
|--------|------|---------|---------|
| Chromium | Desktop | 桌面 Chrome | ✅ |
| WebKit | Desktop | 桌面 Safari | ✅ |
| Mobile Chrome | Mobile | Pixel 5 | ✅ |
| Mobile Safari | Mobile | iPhone 13 | ✅ |
| Firefox | Desktop | 桌面 Firefox | ⏸️ (沙箱限制) |
### 3.3 H5 构建环境
| 项目 | 配置 |
|------|------|
| 构建命令 | `npm run build:h5` |
| 输出目录 | `dist/build/h5` |
| 部署方式 | Docker + Nginx 静态部署 |
| 开发服务器 | `npm run dev:h5` (端口 5173) |
---
## 四、测试用例设计
### 4.1 单元测试 (共 35 文件,~685 用例)
#### 4.1.1 算法层 (22 文件)
| 测试文件 | 当前用例数 | 测试重点 |
|---------|-----------|---------|
| `almanac.test.ts` | 24 | 黄历基础计算、宜忌判断 |
| `calendar.test.ts` | 22 | 公历/农历转换、节气计算 |
| `enums.test.ts` | 32 | 枚举定义完整性、映射关系 |
| `fortune.test.ts` | 15 | 运势生成逻辑、多维评分 |
| `fortuneStrategy.test.ts` | 28 | 运势策略模式、不同策略输出 |
| `sanFangSiZheng.test.ts` | 9 | 三方四正分析、星曜关系 |
| `types.test.ts` | 17 | 类型定义、类型守卫 |
| `ziweiAlgorithm.test.ts` | 32 | 紫微斗数排盘、安星法 |
| `solarTime.test.ts` | 28 | 真太阳时计算 |
| `almanac-cross-validation.test.ts` | 68 | 黄历算法交叉验证 |
| `ziwei-cross-validation.test.ts` | 46 | 紫微算法交叉验证 |
| `performance.test.ts` | 7 | 算法执行性能基准 |
| `security.test.ts` | 8 | 安全验证 |
| `stress.test.ts` | 4 | 长时间使用稳定性 |
| `i18n-completeness.test.ts` | 32 | 国际化完整性 |
| **小计** | **~372** | |
#### 4.1.2 服务层 (5 文件)
| 测试文件 | 当前用例数 | 测试重点 |
|---------|-----------|---------|
| `almanacService.test.ts` | 8 | 黄历服务业务逻辑 |
| `fortuneService.test.ts` | 12 | 运势服务组合逻辑 |
| `searchService.test.ts` | 6 | 搜索服务、条件过滤 |
| `templateService.test.ts` | 10 | 模板服务、模板管理 |
| `ziweiService.test.ts` | 7 | 紫微服务编排 |
| **小计** | **~43** | |
#### 4.1.3 工具层 (6 文件)
| 测试文件 | 当前用例数 | 测试重点 |
|---------|-----------|---------|
| `errorHandler.test.ts` | — | 错误处理、异常捕获 |
| `exportImport.test.ts` | 6 | 导出导入功能 |
| `lruCache.test.ts` | — | 缓存策略、LRU 逻辑 |
| `performanceMonitor.test.ts` | 27 | 性能监控、指标收集 |
| `searchOptimizer.test.ts` | — | 搜索优化、防抖 |
| `storage.test.ts` | 14 | 本地存储读写 |
| **小计** | **~47** | |
#### 4.1.4 组件层 (6 文件)
| 测试文件 | 测试重点 |
|---------|---------|
| `EmptyState/index.test.ts` | 空状态渲染 |
| `ExportPanel/index.test.ts` | 导出面板交互 |
| `SearchConditionPanel/index.test.ts` | 条件面板交互 |
| `SearchHistoryPanel/index.test.ts` | 历史面板交互 |
| `SearchResultCard/index.test.ts` | 结果卡片渲染 |
| `SearchResultList/index.test.ts` | 结果列表渲染 |
#### 4.1.5 页面层 (3 文件)
| 测试文件 | 测试重点 |
|---------|---------|
| `ziwei/index.test.ts` | 紫微斗数页面渲染与交互 |
| `fortune/index.test.ts` | 运势分析页面渲染与交互 |
| `push-subscription/index.test.ts` | 推送订阅页面交互 |
### 4.2 专项测试
#### 4.2.1 性能测试 (TC-PERF)
| 用例 ID | 场景 | 阈值 | 优先级 |
|---------|------|------|--------|
| TC-PERF-001 | 紫微排盘算法 100 次迭代 | < 500ms | P0 |
| TC-PERF-002 | 黄历计算 50 次迭代均耗时 | < 200ms/次 | P0 |
| TC-PERF-002b | 批量计算一年黄历 (365天) | < 5000ms | P1 |
| TC-PERF-003 | 日运生成 50 次迭代均耗时 | < 200ms/次 | P0 |
| TC-PERF-003b | 月运生成 12 个月 | < 200ms | P1 |
| TC-PERF-003c | 年运生成 5 年 | < 200ms | P1 |
| TC-PERF-005 | 紫微排盘 100 次重复稳定性 | 退化率 < 20% | P1 |
| TC-PERF-005b | 黄历计算 100 次重复稳定性 | 退化率 < 20% | P1 |
| TC-PERF-005c | 运势生成 100 次重复稳定性 | 退化率 < 20% | P1 |
| TC-PERF-005d | 混合场景 50 次组合调用稳定性 | 平均耗时 < 1000ms | P1 |
| TC-PERF-006-001 | 并发 10 次紫微排盘 | 全部成功且 < 2000ms | P1 |
| TC-PERF-006-002 | 并发 20 次黄历计算 | 全部成功且 < 2000ms | P1 |
| TC-PERF-006-003 | 混合并发 5 组排盘+黄历+运势 | 全部成功且 < 3000ms | P1 |
| TC-PERF-006-004 | 高负载 20 次并发运势计算 | 全部成功且无数据错误 | P1 |
| TC-PERF-E2E-001 | 黄历搜索页面加载 | < 3s | P0 |
| TC-PERF-E2E-002 | 紫微斗数页面加载 | < 3s | P0 |
| TC-PERF-E2E-003 | 运势分析页面加载 | < 3s | P0 |
| TC-PERF-E2E-004 | 移动端 375px 加载 | < 3s | P1 |
| TC-PERF-004b | 平板 768px 加载 | < 3s | P1 |
#### 4.2.2 安全测试 (TC-SEC)
| 用例 ID | 场景 | 验证点 | 优先级 |
|---------|------|--------|--------|
| TC-SEC-001 | 网络权限安全 | INTERNET 权限为 false | P0 |
| TC-SEC-001b | 版本号验证 | versionName = 1.0.0 | P0 |
| TC-SEC-002 | 隐私政策配置 | 配置隐私政策模板 | P1 |
| TC-SEC-003 | XSS 注入防护 | HTML 特殊字符转义 | P0 |
| TC-SEC-003b | XSS 多种攻击向量 | 3 种 XSS 载荷均被转义 | P0 |
| TC-SEC-004 | 存储键名安全 | 使用命名空间前缀 | P1 |
| TC-SEC-004b | 敏感信息防护 | 无密码/token 等敏感词 | P1 |
| TC-SEC-005 | iOS 隐私配置 | NSPrivacyTracking = false | P1 |
| TC-SEC-E2E-001 | E2E XSS 注入验证 | XSS 脚本不执行 | P0 |
| TC-SEC-E2E-002 | 页面内容安全 | 无外部脚本引用 | P1 |
| TC-SEC-E2E-002b | Content-Type 验证 | 响应为 text/html | P1 |
| TC-SEC-E2E-003 | localStorage 安全 | 无敏感信息存储 | P1 |
#### 4.2.3 国际化验证 (TC-I18N)
| 语言 | 代码 | 验证点 | 优先级 |
|------|------|--------|--------|
| 简体中文 | zh-CN | 基准语言,键值完整 | P0 |
| 繁体中文 | zh-TW | 与基准一致,无缺失/多余 | P0 |
| 英文 | en | 与基准一致,无缺失/多余 | P0 |
| 日文 | ja | 与基准一致,无缺失/多余 | P1 |
| 韩文 | ko | 与基准一致,无缺失/多余 | P1 |
| 德文 | de | 与基准一致,无缺失/多余 | P1 |
| 法文 | fr | 与基准一致,无缺失/多余 | P1 |
| 西班牙文 | es | 与基准一致,无缺失/多余 | P1 |
| 葡萄牙文 | pt | 与基准一致,无缺失/多余 | P1 |
### 4.3 E2E 测试 (共 39 用例 × 4 浏览器 = 156)
| 测试套件 | 用例数 | 覆盖范围 |
|---------|-------|---------|
| 黄历搜索功能 E2E | 6 | 日期选择、宜忌展示、条件搜索 |
| 运势分析功能 E2E | 10 | 日/月/年运、多维运势、幸运信息 |
| 紫微排盘功能 E2E | 9 | 排盘输入、宫位展示、星曜信息 |
| 关键词搜索功能 E2E | 3 | 搜索输入、结果展示、无结果处理 |
| 页面加载性能 E2E | 5 | 各页面加载时间、响应式布局 |
| 安全验证 E2E | 4 | XSS 注入、内容安全、存储安全 |
| Web 平台兼容性 | 3 | 响应式布局、移动端适配 |
---
## 五、测试执行流程
### 5.1 执行顺序
```
阶段一:单元测试回归
└─ 运行全部单元测试 (685 用例)
└─ 生成覆盖率报告
└─ 验证阈值达标
阶段二:专项测试执行
├─ 性能测试 (15 用例)
├─ 安全测试 (12 用例)
├─ 国际化完整性验证 (9 语言)
└─ 稳定性测试 (4 用例)
阶段三:E2E 测试执行
├─ Chromium (39 用例)
├─ WebKit Safari (39 用例)
├─ Mobile Chrome (39 用例)
└─ Mobile Safari (39 用例)
阶段四:构建验证
└─ H5 构建测试
└─ 构建产物完整性检查
阶段五:缺陷管理与修复
└─ 缺陷分类与优先级排序
└─ P0/P1 缺陷修复
└─ 修复验证
阶段六:验收报告生成
└─ 测试结果汇总
└─ 验收标准对照
└─ 正式验收结论
```
### 5.2 执行命令
```bash
# 1. 单元测试 + 覆盖率
cd everything-is-suitable-uniapp
npm run test:coverage
# 2. 专项测试(性能、安全、国际化、稳定性)
npx vitest --run src/algorithms/__tests__/performance.test.ts
npx vitest --run src/algorithms/__tests__/security.test.ts
npx vitest --run src/algorithms/__tests__/i18n-completeness.test.ts
npx vitest --run src/algorithms/__tests__/stress.test.ts
# 3. E2E 测试
npm run test:e2e
# 4. H5 构建验证
npm run build:h5
```
---
## 六、验收标准
### 6.1 硬性标准(必须全部满足)
| 标准 | 阈值 | 验证方式 |
|------|------|---------|
| 单元测试通过率 | ≥ 90% | `npm run test:coverage` |
| 代码覆盖率 (指令) | ≥ 70% | vitest 覆盖率报告 |
| 代码覆盖率 (函数) | ≥ 70% | vitest 覆盖率报告 |
| 代码覆盖率 (分支) | ≥ 60% | vitest 覆盖率报告 |
| E2E 核心流程通过率 | ≥ 80% | `npm run test:e2e` |
| 算法交叉验证 | 100% | 交叉验证测试套件 |
| 算法执行时间 | < 500ms | 性能测试套件 |
| 页面加载时间 | < 3s | E2E 性能测试 |
| 国际化覆盖 | 9/9 语言完整 | i18n 完整性套件 |
| 浏览器兼容性 | ≥ 4/5 浏览器 | E2E 多浏览器测试 |
| 安全验证 | 全部通过 | 安全测试套件 |
| 无 P0 缺陷 | 0 | 缺陷清单 |
### 6.2 验收决策矩阵
| 类别 | 允许 | 不允许 |
|------|------|--------|
| P0 缺陷 | 0 | ≥ 1 → 阻塞发版 |
| P1 缺陷 | ≤ 3 且无功能阻塞 | ≥ 4 或功能阻塞 → 建议修复后发版 |
| P2 缺陷 | 无数量限制 | 不阻塞发版 |
| 覆盖率 | 指令 ≥ 70% | 指令 < 70% → 需补充测试 |
| 性能退化 | 单次 < 20% | 单次 ≥ 20% → 需定位优化 |
---
## 七、缺陷管理机制
### 7.1 缺陷分级
| 级别 | 定义 | 响应要求 |
|------|------|---------|
| P0 | 核心功能不可用、数据丢失、安全漏洞 | 立即终止测试,修复后重新回归 |
| P1 | 功能异常但可绕过、性能严重退化 | 24 小时内修复,修复后重新回归 |
| P2 | 非核心功能异常、UI 小问题 | 可接受,记录到后续迭代 |
| P3 | 体验优化、文档问题 | 记录到后续迭代 |
### 7.2 缺陷生命周期
```
发现 → 记录 → 评估 → 修复 → 验证 → 关闭
↑ |
└────────── 回归不通过 ────────────┘
```
### 7.3 缺陷记录模板
```markdown
| ID | 模块 | 级别 | 描述 | 复现步骤 | 预期结果 | 实际结果 | 状态 |
|----|------|------|------|---------|---------|---------|------|
```
---
## 八、测试报告输出
### 8.1 报告内容
测试报告应包含以下内容:
1. **测试结果汇总** — 总体通过率、各类型测试结果
2. **代码覆盖率** — 各模块覆盖率数据
3. **性能测试结果** — 各场景性能数据
4. **安全验证结果** — 安全测试通过情况
5. **国际化验证结果** — 各语言验证结果
6. **E2E 测试结果** — 各浏览器通过情况
7. **缺陷清单** — 已修复/已知缺陷
8. **验收标准对照** — 标准达成情况
9. **验收结论** — 通过/不通过/有条件通过
10. **附录** — 运行命令、测试环境
### 8.2 报告格式
- 文档格式: Markdown
- 文件命名: `RELEASE_TEST_REPORT_YYYY-MM-DD.md`
- 存储路径: `docs/reports/`
---
## 九、风险与缓解措施
| 风险 | 影响 | 概率 | 缓解措施 |
|------|------|------|---------|
| 覆盖率下降 | 验收不通过 | 低 | 补充测试用例 |
| 性能退化 | 验收不通过 | 低 | 代码优化或调整阈值 |
| E2E 测试 flaky | 误报失败 | 中 | 失败重试、人工确认 |
| 新引入缺陷 | 发版延迟 | 低 | 严格回归测试 |
| 环境问题 | 测试阻塞 | 低 | 多环境备选方案 |
---
## 十、附录
### 10.1 参考文档
- [README.md](../../README.md) — 项目概述与架构
- [RELEASE_TEST_REPORT_2026-08-12.md](../reports/RELEASE_TEST_REPORT_2026-08-12.md) — 上次测试报告
- [vitest.config.ts](../../vitest.config.ts) — 测试配置
- [playwright.config.ts](../../playwright.config.ts) — E2E 配置
### 10.2 测试验证清单
- [x] 单元测试全部通过 (692/692, 100%)
- [x] 代码覆盖率阈值达标 (指令 90.36%, 分支 77.82%, 函数 94.18%)
- [x] 性能测试全部通过 (15/15)
- [x] 安全测试全部通过 (12/12)
- [x] 国际化验证全部通过 (9/9 语言完整)
- [x] E2E 测试全部通过 (160/160, 4 浏览器)
- [x] H5 构建成功 (504K)
- [x] 微信小程序构建成功 (576K) — ✅ 相比此前报告,该问题已修复
- [x] 无 P0 缺陷 (0)
- [x] 无 P1 缺陷 (0)
- [x] 验收报告已生成
- [x] README 进度已更新