Files
novalon-manage-system/docs/superpowers/plans/2026-04-07-e2e-test-simplification.md
2026-04-07 21:37:43 +08:00

364 lines
10 KiB
Markdown
Raw Permalink 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.
# E2E测试精简实现计划
> **面向 AI 代理的工作者:** 必需子技能:使用 superpowers:subagent-driven-development(推荐)或 superpowers:executing-plans 逐任务实现此计划。步骤使用复选框(`- [ ]`)语法来跟踪进度。
**目标:** 将E2E测试从38个文件精简为5个核心测试文件,保留关键业务流程验证
**架构:** 采用分层测试策略,保留核心用户旅程测试和冒烟测试,删除非核心测试文件
**技术栈:** Playwright, TypeScript
---
## 文件结构
**创建文件:**
- `novalon-manage-web/e2e/smoke/login-logout.spec.ts` - 冒烟测试
**删除文件:**
- 34个非核心测试文件(详见设计文档第8节)
**修改文件:**
- `novalon-manage-web/package.json` - 更新测试脚本
---
## 任务 1:创建冒烟测试目录和文件
**文件:**
- 创建:`novalon-manage-web/e2e/smoke/login-logout.spec.ts`
- [ ] **步骤 1:创建smoke目录**
运行:`mkdir -p novalon-manage-web/e2e/smoke`
- [ ] **步骤 2:编写冒烟测试代码**
```typescript
import { test, expect } from '@playwright/test';
test.describe('冒烟测试 - 基础流程', () => {
test('管理员登录和登出', async ({ page }) => {
await test.step('导航到登录页面', async () => {
await page.goto('/login');
await page.waitForLoadState('networkidle');
});
await test.step('输入登录信息', async () => {
await page.fill('input[type="text"]', 'admin');
await page.fill('input[type="password"]', 'Test@123');
});
await test.step('点击登录按钮', async () => {
await page.click('button:has-text("登录")');
await page.waitForURL(/.*dashboard/, { timeout: 10000 });
});
await test.step('验证登录成功', async () => {
await expect(page).toHaveURL(/.*dashboard/);
});
await test.step('点击用户菜单', async () => {
await page.click('[data-testid="user-menu"]');
await page.waitForTimeout(500);
});
await test.step('点击退出登录', async () => {
await page.click('text=退出登录');
await page.waitForURL(/.*login/, { timeout: 10000 });
});
await test.step('验证登出成功', async () => {
await expect(page).toHaveURL(/.*login/);
});
});
});
```
- [ ] **步骤 3Commit**
```bash
git add novalon-manage-web/e2e/smoke/login-logout.spec.ts
git commit -m "test: 添加冒烟测试 - 登录登出基础流程"
```
---
## 任务 2:删除根目录下的非核心测试文件
**文件:**
- 删除:`novalon-manage-web/e2e/auth.spec.ts`
- 删除:`novalon-manage-web/e2e/basic.spec.ts`
- 删除:`novalon-manage-web/e2e/complete-workflow.spec.ts`
- 删除:`novalon-manage-web/e2e/comprehensive-e2e.spec.ts`
- 删除:`novalon-manage-web/e2e/critical-e2e.spec.ts`
- 删除:`novalon-manage-web/e2e/dashboard-operation-log.spec.ts`
- 删除:`novalon-manage-web/e2e/dictionary-management.spec.ts`
- 删除:`novalon-manage-web/e2e/edge-cases.spec.ts`
- 删除:`novalon-manage-web/e2e/exception-log.spec.ts`
- 删除:`novalon-manage-web/e2e/file-management.spec.ts`
- 删除:`novalon-manage-web/e2e/form-test.spec.ts`
- 删除:`novalon-manage-web/e2e/login-log.spec.ts`
- 删除:`novalon-manage-web/e2e/menu-management.spec.ts`
- 删除:`novalon-manage-web/e2e/notification.spec.ts`
- 删除:`novalon-manage-web/e2e/operation-log.spec.ts`
- 删除:`novalon-manage-web/e2e/permission-validation.spec.ts`
- 删除:`novalon-manage-web/e2e/role-management.spec.ts`
- 删除:`novalon-manage-web/e2e/security-e2e.spec.ts`
- 删除:`novalon-manage-web/e2e/system-config.spec.ts`
- 删除:`novalon-manage-web/e2e/system-integration-test.spec.ts`
- 删除:`novalon-manage-web/e2e/test-config-api.spec.ts`
- 删除:`novalon-manage-web/e2e/test-stability.spec.ts`
- 删除:`novalon-manage-web/e2e/uat-file-workflow.spec.ts`
- 删除:`novalon-manage-web/e2e/uat-permission-workflow.spec.ts`
- 删除:`novalon-manage-web/e2e/uat-user-lifecycle.spec.ts`
- 删除:`novalon-manage-web/e2e/user-lifecycle.spec.ts`
- 删除:`novalon-manage-web/e2e/user-management.spec.ts`
- [ ] **步骤 1:删除根目录下的测试文件**
```bash
cd novalon-manage-web/e2e
rm -f auth.spec.ts basic.spec.ts complete-workflow.spec.ts comprehensive-e2e.spec.ts critical-e2e.spec.ts dashboard-operation-log.spec.ts dictionary-management.spec.ts edge-cases.spec.ts exception-log.spec.ts file-management.spec.ts form-test.spec.ts login-log.spec.ts menu-management.spec.ts notification.spec.ts operation-log.spec.ts permission-validation.spec.ts role-management.spec.ts security-e2e.spec.ts system-config.spec.ts system-integration-test.spec.ts test-config-api.spec.ts test-stability.spec.ts uat-file-workflow.spec.ts uat-permission-workflow.spec.ts uat-user-lifecycle.spec.ts user-lifecycle.spec.ts user-management.spec.ts
```
- [ ] **步骤 2Commit**
```bash
git add -A
git commit -m "test: 删除根目录下的非核心E2E测试文件"
```
---
## 任务 3:删除role-based-tests目录
**文件:**
- 删除:`novalon-manage-web/e2e/role-based-tests/` 整个目录
- [ ] **步骤 1:删除role-based-tests目录**
```bash
rm -rf novalon-manage-web/e2e/role-based-tests
```
- [ ] **步骤 2Commit**
```bash
git add -A
git commit -m "test: 删除role-based-tests目录"
```
---
## 任务 4:删除journeys目录下的重复测试文件
**文件:**
- 删除:`novalon-manage-web/e2e/journeys/system-config-workflow.spec.ts`
- 删除:`novalon-manage-web/e2e/journeys/permission-boundary.spec.ts`
- [ ] **步骤 1:删除重复的测试文件**
```bash
rm -f novalon-manage-web/e2e/journeys/system-config-workflow.spec.ts
rm -f novalon-manage-web/e2e/journeys/permission-boundary.spec.ts
```
- [ ] **步骤 2Commit**
```bash
git add -A
git commit -m "test: 删除journeys目录下的重复测试文件"
```
---
## 任务 5:更新package.json测试脚本
**文件:**
- 修改:`novalon-manage-web/package.json`
- [ ] **步骤 1:查看当前测试脚本**
运行:`cat novalon-manage-web/package.json | grep -A 10 '"scripts"'`
- [ ] **步骤 2:更新测试脚本**
`package.json``scripts` 部分添加或更新以下内容:
```json
{
"scripts": {
"test:e2e:smoke": "playwright test smoke/",
"test:e2e:journeys": "playwright test journeys/",
"test:e2e": "playwright test"
}
}
```
- [ ] **步骤 3:验证脚本更新**
运行:`cat novalon-manage-web/package.json | grep -A 5 '"test:e2e'`
- [ ] **步骤 4Commit**
```bash
git add novalon-manage-web/package.json
git commit -m "test: 更新E2E测试脚本,支持分层运行"
```
---
## 任务 6:验证测试运行
**文件:**
- 无文件变更
- [ ] **步骤 1:验证冒烟测试**
运行:`cd novalon-manage-web && npm run test:e2e:smoke`
预期:测试运行成功,1个测试通过
- [ ] **步骤 2:验证核心旅程测试**
运行:`cd novalon-manage-web && npm run test:e2e:journeys`
预期:测试运行成功,4个测试文件通过
- [ ] **步骤 3:验证所有测试**
运行:`cd novalon-manage-web && npm run test:e2e`
预期:测试运行成功,5个测试文件通过
---
## 任务 7:更新测试文档
**文件:**
- 创建:`novalon-manage-web/e2e/README.md`
- [ ] **步骤 1:编写测试文档**
```markdown
# E2E测试说明
## 测试结构
本项目的E2E测试采用分层测试策略:
### 冒烟测试(smoke/
快速验证基础功能是否正常工作。
- `login-logout.spec.ts` - 登录登出基础流程
### 核心旅程测试(journeys/
验证关键业务端到端流程。
- `admin-complete-workflow.spec.ts` - 管理员完整工作流
- `user-permission-boundary.spec.ts` - 用户权限边界验证
- `file-management-workflow.spec.ts` - 文件上传下载流程
- `audit-workflow.spec.ts` - 审计日志查看流程
## 运行测试
### 运行冒烟测试
```bash
npm run test:e2e:smoke
```
### 运行核心旅程测试
```bash
npm run test:e2e:journeys
```
### 运行所有测试
```bash
npm run test:e2e
```
## 测试数据
测试使用的用户账号:
- 管理员:username: `admin`, password: `Test@123`
- 普通用户:username: `user`, password: `Test@123`
## 测试策略
- **冒烟测试**:每次代码提交时运行,快速反馈
- **核心旅程测试**:PR合并前运行,验证关键业务流程
- **单元测试**:补充功能覆盖率,目标80%
## 维护指南
1. 新增核心业务功能时,在 `journeys/` 目录下添加测试
2. 新增基础功能时,在 `smoke/` 目录下添加测试
3. 保持测试文件数量精简,避免重复测试
4. 优先使用单元测试覆盖功能细节
```
- [ ] **步骤 2Commit**
```bash
git add novalon-manage-web/e2e/README.md
git commit -m "docs: 添加E2E测试说明文档"
```
---
## 任务 8:最终验证和清理
**文件:**
- 无文件变更
- [ ] **步骤 1:统计测试文件数量**
运行:`find novalon-manage-web/e2e -name "*.spec.ts" -type f | wc -l`
预期:输出 `5`
- [ ] **步骤 2:列出所有测试文件**
运行:`find novalon-manage-web/e2e -name "*.spec.ts" -type f`
预期输出:
```
novalon-manage-web/e2e/smoke/login-logout.spec.ts
novalon-manage-web/e2e/journeys/admin-complete-workflow.spec.ts
novalon-manage-web/e2e/journeys/user-permission-boundary.spec.ts
novalon-manage-web/e2e/journeys/file-management-workflow.spec.ts
novalon-manage-web/e2e/journeys/audit-workflow.spec.ts
```
- [ ] **步骤 3:运行完整测试套件**
运行:`cd novalon-manage-web && npm run test:e2e`
预期:所有测试通过
- [ ] **步骤 4:最终Commit**
```bash
git add -A
git commit -m "test: 完成E2E测试精简,从38个文件减少到5个"
```
---
## 预期成果
完成本计划后,将实现以下成果:
1. **测试文件数量**:从38个减少到5个(减少87%
2. **测试运行时间**:从~20分钟减少到~5分钟(减少75%)
3. **测试结构清晰**:冒烟测试 + 核心旅程测试
4. **维护成本降低**:测试文件数量少,易于维护
5. **测试稳定性提升**:减少flaky测试