# User Journey Tests 设计文档
**日期:** 2026-04-08
**作者:** 张翔
**状态:** 已批准
---
## 1. 概述
### 1.1 背景
novalon-manage-system 项目当前有 11 个功能模块,但仅有 7 个模块(63.6%)被 user journey 测试覆盖。为了提高测试覆盖率和系统质量,需要补充缺失的 4 个模块的端到端测试。
### 1.2 目标
为以下 4 个功能模块补充 user journey 测试:
1. **异常日志** - 查看系统异常记录
2. **系统配置** - 系统参数配置管理
3. **字典管理** - 数据字典管理
4. **通知管理** - 系统通知公告
### 1.3 范围
**包含:**
- 基础覆盖:查看列表、搜索功能、基本操作(新增/编辑/删除)
- 使用时间戳隔离测试数据
- 遵循现有测试风格和模式
**不包含:**
- 边界情况测试
- 错误处理测试
- 权限验证测试
---
## 2. 架构设计
### 2.1 文件结构
```
novalon-manage-web/e2e/journeys/
├── exception-log-workflow.spec.ts # 异常日志测试
├── config-workflow.spec.ts # 系统配置测试
├── dict-workflow.spec.ts # 字典管理测试
└── notice-workflow.spec.ts # 通知管理测试
```
### 2.2 测试模式
- **测试框架:** Playwright
- **组织方式:** 使用 `test.describe` 组织测试套件
- **步骤组织:** 使用 `test.step` 组织测试步骤
- **数据隔离:** 使用时间戳生成唯一测试数据
- **命名规范:** 遵循现有测试的命名规范
### 2.3 测试策略
每个模块包含 3-5 个独立测试:
1. **查看列表** - 验证页面加载和数据展示
2. **搜索功能** - 验证搜索和筛选
3. **新增操作** - 验证创建功能
4. **编辑操作** - 验证更新功能
5. **删除操作** - 验证删除功能
---
## 3. 详细设计
### 3.1 异常日志测试
**文件:** `exception-log-workflow.spec.ts`
**测试场景:**
| 测试名称 | 测试步骤 | 验证点 |
|---------|---------|--------|
| 查看异常日志列表 | 1. 导航到异常日志页面
2. 等待数据加载 | 表格组件可见 |
| 搜索异常日志 | 1. 输入搜索关键词
2. 点击搜索按钮
3. 等待结果 | 搜索结果正确显示 |
| 查看异常日志详情 | 1. 点击查看详情按钮
2. 等待对话框打开 | 详情对话框可见 |
**关键选择器:**
- 页面路径:`/exception-log`
- 表格:`.el-table`
- 搜索框:`input[placeholder*="搜索"]`
- 详情按钮:`button:has-text("查看")`
---
### 3.2 系统配置测试
**文件:** `config-workflow.spec.ts`
**测试场景:**
| 测试名称 | 测试步骤 | 验证点 |
|---------|---------|--------|
| 查看系统配置列表 | 1. 导航到系统配置页面
2. 等待数据加载 | 表格组件可见 |
| 新增系统配置 | 1. 点击新增配置按钮
2. 填写表单
3. 提交表单 | 成功消息显示 |
| 搜索系统配置 | 1. 输入搜索关键词
2. 点击搜索按钮 | 搜索结果正确显示 |
| 编辑系统配置 | 1. 点击编辑按钮
2. 修改配置值
3. 提交表单 | 成功消息显示 |
| 删除系统配置 | 1. 点击删除按钮
2. 确认删除 | 成功消息显示 |
**测试数据:**
```typescript
const timestamp = Date.now();
const configKey = `test_config_${timestamp}`;
const configName = `测试配置_${timestamp}`;
const configValue = `测试值_${timestamp}`;
```
**关键选择器:**
- 页面路径:`/config`
- 新增按钮:`button:has-text("新增配置")`
- 表单输入:`.el-dialog input`
- 提交按钮:`.el-dialog button:has-text("确定")`
---
### 3.3 字典管理测试
**文件:** `dict-workflow.spec.ts`
**测试场景:**
| 测试名称 | 测试步骤 | 验证点 |
|---------|---------|--------|
| 查看字典列表 | 1. 导航到字典管理页面
2. 等待数据加载 | 表格组件可见 |
| 新增字典 | 1. 点击新增字典按钮
2. 填写表单
3. 提交表单 | 成功消息显示 |
| 搜索字典 | 1. 输入搜索关键词
2. 点击搜索按钮 | 搜索结果正确显示 |
| 编辑字典 | 1. 点击编辑按钮
2. 修改字典信息
3. 提交表单 | 成功消息显示 |
| 删除字典 | 1. 点击删除按钮
2. 确认删除 | 成功消息显示 |
**测试数据:**
```typescript
const timestamp = Date.now();
const dictType = `test_dict_${timestamp}`;
const dictName = `测试字典_${timestamp}`;
```
**关键选择器:**
- 页面路径:`/dict`
- 新增按钮:`button:has-text("新增字典")`
- 表单输入:`.el-dialog input`
- 提交按钮:`.el-dialog button:has-text("确定")`
---
### 3.4 通知管理测试
**文件:** `notice-workflow.spec.ts`
**测试场景:**
| 测试名称 | 测试步骤 | 验证点 |
|---------|---------|--------|
| 查看通知列表 | 1. 导航到通知管理页面
2. 等待数据加载 | 表格组件可见 |
| 新增通知 | 1. 点击新增通知按钮
2. 填写表单
3. 提交表单 | 成功消息显示 |
| 搜索通知 | 1. 输入搜索关键词
2. 点击搜索按钮 | 搜索结果正确显示 |
| 编辑通知 | 1. 点击编辑按钮
2. 修改通知内容
3. 提交表单 | 成功消息显示 |
| 删除通知 | 1. 点击删除按钮
2. 确认删除 | 成功消息显示 |
**测试数据:**
```typescript
const timestamp = Date.now();
const noticeTitle = `测试通知_${timestamp}`;
const noticeContent = `这是测试通知内容_${timestamp}`;
```
**关键选择器:**
- 页面路径:`/notice`
- 新增按钮:`button:has-text("新增通知")`
- 表单输入:`.el-dialog input`
- 提交按钮:`.el-dialog button:has-text("确定")`
---
## 4. 测试数据管理
### 4.1 数据隔离策略
使用时间戳生成唯一测试数据:
```typescript
const timestamp = Date.now();
const uniqueName = `测试数据_${timestamp}`;
```
**优势:**
- 无需清理测试数据
- 避免测试数据冲突
- 与现有测试风格一致
### 4.2 测试数据示例
| 模块 | 数据字段 | 生成规则 |
|------|---------|---------|
| 系统配置 | configKey, configName | `test_config_${timestamp}` |
| 字典管理 | dictType, dictName | `test_dict_${timestamp}` |
| 通知管理 | noticeTitle, noticeContent | `测试通知_${timestamp}` |
---
## 5. 测试执行
### 5.1 运行命令
```bash
# 运行所有 journey 测试
npm run test:e2e:journeys
# 运行特定测试文件
npx playwright test e2e/journeys/exception-log-workflow.spec.ts
# 运行所有新增测试
npx playwright test e2e/journeys/exception-log-workflow.spec.ts \
e2e/journeys/config-workflow.spec.ts \
e2e/journeys/dict-workflow.spec.ts \
e2e/journeys/notice-workflow.spec.ts
```
### 5.2 测试配置
测试将使用现有的 Playwright 配置:
- **项目:** `journeys`
- **依赖:** `setup` 项目(认证)
- **存储状态:** `playwright/.auth/user.json`
- **浏览器:** Desktop Chrome
- **超时:** 120000ms
---
## 6. 验收标准
### 6.1 功能验收
- [ ] 所有测试文件创建成功
- [ ] 所有测试通过
- [ ] 测试覆盖率提升至 100%(11/11 模块)
### 6.2 质量验收
- [ ] 测试代码遵循现有风格
- [ ] 测试步骤清晰可读
- [ ] 测试数据隔离有效
- [ ] 无测试数据冲突
### 6.3 文档验收
- [ ] 测试文件包含清晰的注释
- [ ] 测试描述准确反映测试内容
- [ ] 测试步骤命名规范
---
## 7. 风险与缓解
### 7.1 风险识别
| 风险 | 影响 | 概率 | 缓解措施 |
|------|------|------|---------|
| 测试数据污染 | 中 | 低 | 使用时间戳隔离 |
| 测试依赖环境 | 高 | 中 | 使用独立的测试环境 |
| 页面元素变化 | 中 | 低 | 使用稳定的选择器 |
| 测试超时 | 低 | 中 | 增加适当的等待时间 |
### 7.2 回滚计划
如果测试失败或影响现有测试,可以:
1. 删除新增的测试文件
2. 恢复到之前的测试状态
3. 分析失败原因后重新实施
---
## 8. 后续改进
### 8.1 短期改进
1. 修复 `admin-complete-workflow.spec.ts` 中被跳过的清理测试
2. 增强菜单管理的测试覆盖
3. 增强登录日志的测试覆盖
### 8.2 长期改进
1. 引入边界情况测试
2. 引入错误处理测试
3. 引入权限验证测试
4. 实现测试数据自动清理
---
## 9. 参考资料
- [Playwright 官方文档](https://playwright.dev/)
- [项目 E2E 测试 README](../../novalon-manage-web/e2e/README.md)
- [现有测试示例](../../novalon-manage-web/e2e/journeys/)
---
**批准人:** 用户
**批准日期:** 2026-04-08