万事宜 v1.0.0 封版测试计划
版本: v1.0.0
创建日期: 2026-08-13
测试负责人: AI 自动化测试
状态: ✅ 已完成
一、测试范围与目标
1.1 测试目标
对万事宜 v1.0.0 进行系统性、全面性的封版测试与验收,确保:
- 功能完整性 — 所有核心功能模块正确运行,无 P0/P1 缺陷
- 性能稳定性 — 算法执行时间、页面加载时间、长时间运行稳定性达标
- 兼容性适配 — 主流浏览器、设备、操作系统适配正常
- 安全性验证 — 无 XSS 等安全漏洞,数据存储安全
- 用户体验 — 国际化完整、UI 一致性、异常处理友好
1.2 测试范围
| 模块 |
子模块 |
测试重点 |
| 算法层 |
紫微斗数排盘、黄历计算、运势推演、三方四正、真太阳时 |
算法正确性(交叉验证)、边界条件、异常输入 |
| 服务层 |
紫微服务、黄历服务、运势服务、搜索服务、模板服务 |
业务逻辑正确性、数据流完整性 |
| 工具层 |
存储、缓存、导出、错误处理、性能监控、搜索优化 |
功能正确性、边界条件、异常处理 |
| 组件层 |
搜索面板、结果卡片、历史面板、导出面板、空状态等 |
渲染正确性、交互行为、状态管理 |
| 页面层 |
黄历搜索、紫微斗数排盘、运势分析、订阅管理 |
页面渲染、用户交互、导航流程 |
| 国际化 |
9 种语言 |
键值完整性、翻译一致性、UI 适配 |
| 构建部署 |
H5 构建、Docker 部署 |
构建成功、静态资源正确 |
1.3 排除范围
| 项目 |
原因 |
| 微信小程序构建 |
@dcloudio/vite-plugin-uni v3 alpha 兼容性限制,已知问题 |
| Firefox E2E 测试 |
沙箱环境兼容性限制,建议在 CI 标准环境中运行 |
| 真机 App 测试 |
当前测试环境仅支持模拟器/H5 |
| 后端服务测试 |
纯客户端架构,零后端依赖 |
二、测试架构
2.1 测试分层
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 执行顺序
5.2 执行命令
六、验收标准
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 缺陷记录模板
八、测试报告输出
8.1 报告内容
测试报告应包含以下内容:
- 测试结果汇总 — 总体通过率、各类型测试结果
- 代码覆盖率 — 各模块覆盖率数据
- 性能测试结果 — 各场景性能数据
- 安全验证结果 — 安全测试通过情况
- 国际化验证结果 — 各语言验证结果
- E2E 测试结果 — 各浏览器通过情况
- 缺陷清单 — 已修复/已知缺陷
- 验收标准对照 — 标准达成情况
- 验收结论 — 通过/不通过/有条件通过
- 附录 — 运行命令、测试环境
8.2 报告格式
- 文档格式: Markdown
- 文件命名:
RELEASE_TEST_REPORT_YYYY-MM-DD.md
- 存储路径:
docs/reports/
九、风险与缓解措施
| 风险 |
影响 |
概率 |
缓解措施 |
| 覆盖率下降 |
验收不通过 |
低 |
补充测试用例 |
| 性能退化 |
验收不通过 |
低 |
代码优化或调整阈值 |
| E2E 测试 flaky |
误报失败 |
中 |
失败重试、人工确认 |
| 新引入缺陷 |
发版延迟 |
低 |
严格回归测试 |
| 环境问题 |
测试阻塞 |
低 |
多环境备选方案 |
十、附录
10.1 参考文档
10.2 测试验证清单