万事宜 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 执行顺序
4.2 测试命令
五、缺陷管理机制
5.1 缺陷分级
| 级别 |
定义 |
处理要求 |
| P0 (阻断) |
核心功能不可用,数据丢失 |
立即修复,必须在封版前解决 |
| P1 (严重) |
功能偏离预期,但可绕过 |
当日修复 |
| P2 (一般) |
界面问题,非核心功能 |
在封版前解决 |
| P3 (建议) |
体验优化建议 |
记录,后续迭代 |
5.2 缺陷生命周期
5.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 最终测试报告结构