10 KiB
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:编写冒烟测试代码
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
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:删除根目录下的测试文件
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
git add -A
git commit -m "test: 删除根目录下的非核心E2E测试文件"
任务 3:删除role-based-tests目录
文件:
-
删除:
novalon-manage-web/e2e/role-based-tests/整个目录 -
步骤 1:删除role-based-tests目录
rm -rf novalon-manage-web/e2e/role-based-tests
- 步骤 2:Commit
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:删除重复的测试文件
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
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 部分添加或更新以下内容:
{
"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
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:编写测试文档
# 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
运行核心旅程测试
npm run test:e2e:journeys
运行所有测试
npm run test:e2e
测试数据
测试使用的用户账号:
- 管理员:username:
admin, password:Test@123 - 普通用户:username:
user, password:Test@123
测试策略
- 冒烟测试:每次代码提交时运行,快速反馈
- 核心旅程测试:PR合并前运行,验证关键业务流程
- 单元测试:补充功能覆盖率,目标80%
维护指南
- 新增核心业务功能时,在
journeys/目录下添加测试 - 新增基础功能时,在
smoke/目录下添加测试 - 保持测试文件数量精简,避免重复测试
- 优先使用单元测试覆盖功能细节
- [ ] **步骤 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
git add -A
git commit -m "test: 完成E2E测试精简,从38个文件减少到5个"
预期成果
完成本计划后,将实现以下成果:
- 测试文件数量:从38个减少到5个(减少87%)
- 测试运行时间:从
20分钟减少到5分钟(减少75%) - 测试结构清晰:冒烟测试 + 核心旅程测试
- 维护成本降低:测试文件数量少,易于维护
- 测试稳定性提升:减少flaky测试