# 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测试