364 lines
10 KiB
Markdown
364 lines
10 KiB
Markdown
# 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/);
|
||
});
|
||
});
|
||
});
|
||
```
|
||
|
||
- [ ] **步骤 3:Commit**
|
||
|
||
```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
|
||
```
|
||
|
||
- [ ] **步骤 2:Commit**
|
||
|
||
```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
|
||
```
|
||
|
||
- [ ] **步骤 2:Commit**
|
||
|
||
```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
|
||
```
|
||
|
||
- [ ] **步骤 2:Commit**
|
||
|
||
```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'`
|
||
|
||
- [ ] **步骤 4:Commit**
|
||
|
||
```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. 优先使用单元测试覆盖功能细节
|
||
```
|
||
|
||
- [ ] **步骤 2:Commit**
|
||
|
||
```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测试
|