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