docs: 添加E2E测试精简实现计划

This commit is contained in:
张翔
2026-04-07 21:37:43 +08:00
parent 4a3dd72794
commit 81ea5cb939
@@ -0,0 +1,363 @@
# 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测试