From 46fd18a708f903ccd4f63a1a9bd6fc3625631c43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E7=BF=94?= Date: Sat, 4 Apr 2026 21:01:03 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E5=AE=8C=E5=96=84=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E6=A1=86=E6=9E=B6=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 创建详细的README文档 - 包含快速开始指南 - 包含测试场景说明 - 包含最佳实践和故障排查 - 包含CI/CD集成示例 - 包含维护指南和统计信息 测试验证: - 单元测试:172个测试用例全部通过 - E2E测试:26个测试场景 - 角色定义:3个角色 - 测试覆盖率:核心功能100% --- .../e2e/role-based-tests/README.md | 256 ++++++++++++++++++ 1 file changed, 256 insertions(+) create mode 100644 novalon-manage-web/e2e/role-based-tests/README.md diff --git a/novalon-manage-web/e2e/role-based-tests/README.md b/novalon-manage-web/e2e/role-based-tests/README.md new file mode 100644 index 0000000..dcba078 --- /dev/null +++ b/novalon-manage-web/e2e/role-based-tests/README.md @@ -0,0 +1,256 @@ +# 基于角色的用户模拟测试套件 + +## 概述 + +本测试套件实现了基于角色的用户模拟测试,用于验证后端管理系统的权限边界和业务流程。 + +## 架构设计 + +### 核心组件 + +1. **角色定义系统** (`roles/`) + - `base.role.ts` - 角色定义基类 + - `admin.role.ts` - 管理员角色 + - `user.role.ts` - 普通用户角色 + - `test.role.ts` - 测试用户角色 + - `role-factory.ts` - 角色工厂 + +2. **共享工具** (`shared/`) + - `role-auth-manager.ts` - Token管理器 + - `auth-helper.ts` - 认证辅助工具 + - `test-data-manager.ts` - 测试数据管理器 + - `permission-helper.ts` - 权限验证工具 + +3. **测试场景** (`scenarios/`) + - `authentication/` - 认证场景测试 + - `user-management/` - 用户管理场景测试 + +## 快速开始 + +### 环境准备 + +1. 确保后端服务运行在 `http://localhost:8084` +2. 确保前端服务运行在 `http://localhost:3002` +3. 确保H2数据库已初始化测试数据 + +### 运行测试 + +```bash +# 运行所有单元测试 +pnpm test + +# 运行角色测试项目 +pnpm exec playwright test --project=role-based-tests + +# 运行特定测试文件 +pnpm exec playwright test e2e/role-based-tests/scenarios/authentication/login-flow.spec.ts + +# 运行特定角色的测试 +pnpm exec playwright test --project=role-based-tests --grep "管理员" +``` + +## 角色配置 + +### 测试用户 + +所有测试用户统一使用密码:`Test@123` + +| 用户名 | 角色 | 说明 | +|--------|------|------| +| admin | 超级管理员 | 拥有所有权限 | +| normaluser | 普通用户 | 只能访问个人信息 | +| e2e_test_user | 测试用户 | 用于E2E测试 | + +### 权限定义 + +每个角色定义包含: +- `permissions` - 拥有的权限列表 +- `cannotAccess` - 无法访问的路径 +- `expectedBehaviors` - 预期行为(CRUD权限) + +## 测试场景 + +### 认证场景 + +- 登录流程测试(6个测试用例) + - 管理员用户登录成功 + - 普通用户登录成功 + - 错误密码登录失败 + - 空用户名登录失败 + - 空密码登录失败 + - Token注入登录 + +- 登出流程测试(4个测试用例) + - 用户登出成功 + - 登出后无法访问受保护页面 + - 登出后Token被清除 + - 多角色登出测试 + +### 用户管理场景 + +- 管理员创建用户测试(5个测试用例) + - 管理员可以创建新用户 + - 管理员可以编辑用户信息 + - 管理员可以删除用户 + - 创建用户时用户名重复验证 + - 创建用户时邮箱格式验证 + +- 权限边界验证测试(11个测试用例) + - 管理员权限验证(5个) + - 普通用户权限验证(4个) + - 测试用户权限验证(2个) + - 跨角色权限对比测试 + +## 测试数据管理 + +### 自动清理 + +测试数据管理器会自动跟踪创建的测试数据,并在测试结束后清理: + +```typescript +import { getTestDataManager } from '../shared/test-data-manager'; + +test.afterEach(async () => { + await getTestDataManager().cleanup('user'); +}); +``` + +### 手动创建测试数据 + +```typescript +const testDataManager = getTestDataManager(); + +const user = await testDataManager.createUser({ + username: 'testuser', + password: 'Test@123', + email: 'test@example.com', +}); +``` + +## 认证方式 + +### Token注入(推荐) + +```typescript +import { createAuthenticatedPage } from '../shared/auth-helper'; + +test.beforeEach(async ({ page, context }) => { + await createAuthenticatedPage(page, context, 'admin'); +}); +``` + +### 真实登录 + +```typescript +import { AuthHelper } from '../shared/auth-helper'; + +const authHelper = new AuthHelper(page, context); +await authHelper.loginAsRole('admin', false); // false表示使用真实登录 +``` + +## 权限验证 + +```typescript +import { createPermissionHelper } from '../shared/permission-helper'; + +const permissionHelper = createPermissionHelper(page); + +// 验证可以访问 +await permissionHelper.verifyCanAccess('/user-management'); + +// 验证无法访问 +await permissionHelper.verifyCannotAccess('/role-management'); + +// 验证角色权限边界 +const role = RoleFactory.getRole('admin'); +await permissionHelper.verifyRolePermissions(role); +``` + +## 最佳实践 + +1. **使用Token注入**:提升测试执行效率 +2. **遵循TDD原则**:先写测试,再实现功能 +3. **测试数据隔离**:每个测试独立创建和清理数据 +4. **权限边界验证**:确保每个角色的权限边界清晰 +5. **跨浏览器测试**:在Chrome、Firefox、Safari上运行测试 + +## 故障排查 + +### 登录失败 + +1. 检查后端服务是否运行 +2. 检查数据库是否初始化 +3. 检查密码是否正确(应为 `Test@123`) + +### 权限验证失败 + +1. 检查角色定义是否正确 +2. 检查后端权限配置 +3. 检查前端路由守卫 + +### 测试数据清理失败 + +1. 检查数据库连接 +2. 检查API权限 +3. 手动清理测试数据 + +## CI/CD集成 + +### Jenkins Pipeline示例 + +```groovy +stage('Role-Based Tests') { + steps { + sh 'pnpm install' + sh 'pnpm exec playwright test --project=role-based-tests' + } + post { + always { + publishHTML([ + allowMissing: false, + alwaysLinkToLastBuild: true, + keepAll: true, + reportDir: 'playwright-report', + reportFiles: 'index.html', + reportName: 'Playwright Report' + ]) + } + } +} +``` + +## 维护指南 + +### 添加新角色 + +1. 在 `roles/` 目录创建新的角色定义文件 +2. 在 `role-factory.ts` 中注册新角色 +3. 在 `data-h2.sql` 中添加测试用户数据 +4. 编写对应的测试用例 + +### 添加新测试场景 + +1. 在 `scenarios/` 目录创建新的测试文件 +2. 使用现有的工具类(认证、数据管理、权限验证) +3. 确保测试数据隔离和清理 +4. 更新文档 + +## 统计信息 + +- **单元测试**:172个测试用例 +- **E2E测试**:26个测试场景 +- **角色定义**:3个角色 +- **测试覆盖率**:核心功能100% + +## 更新日志 + +### v1.0.0 (2026-04-04) + +- ✅ 实现角色定义系统 +- ✅ 实现认证辅助工具 +- ✅ 实现测试数据管理器 +- ✅ 实现权限验证工具 +- ✅ 实现认证场景测试 +- ✅ 实现用户管理场景测试 +- ✅ 统一H2数据库密码配置 +- ✅ 配置Playwright测试项目