test: 补充 Phase 3 专项测试并更新测试报告
新增性能基准测试、安全验证、国际化完整性验证等专项测试; 修复 E2E 测试选择器与当前 UI 不匹配问题; 补充多语言 locale 缺失的 key; 更新 Playwright 配置支持跨浏览器测试; 同步更新测试报告与 README 进度章节。 单元测试 408/408 通过,E2E 测试 39/39 通过(4 种浏览器), 专项测试 47/47 通过,整体覆盖率 77.5%。
This commit is contained in:
@@ -0,0 +1,340 @@
|
||||
# 万事宜 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. 验收结论
|
||||
- 是否达到交付标准
|
||||
- 签署确认
|
||||
```
|
||||
Reference in New Issue
Block a user