feat: 添加系统配置、审计中心、通知中心、文件管理模块
This commit is contained in:
@@ -0,0 +1,707 @@
|
||||
# E2E测试用例设计文档
|
||||
|
||||
## 项目概述
|
||||
|
||||
本项目是一个基于Spring Boot 3.5.9 + WebFlux的响应式管理系统API,采用PostgreSQL数据库,支持用户、角色、字典等核心业务功能。
|
||||
|
||||
## 测试目标
|
||||
|
||||
1. 验证关键用户场景的端到端流程
|
||||
2. 确保API接口的正确性和稳定性
|
||||
3. 验证认证授权机制
|
||||
4. 测试数据一致性和完整性
|
||||
5. 验证错误处理和边界条件
|
||||
|
||||
## 测试环境
|
||||
|
||||
- **测试框架**: Python + Playwright
|
||||
- **API基础URL**: http://localhost:8080
|
||||
- **测试数据库**: PostgreSQL (Test环境)
|
||||
- **测试数据**: 自动化准备和清理
|
||||
|
||||
## 测试用例设计
|
||||
|
||||
### 1. 认证授权测试
|
||||
|
||||
#### 1.1 用户登录流程
|
||||
**用例ID**: TC-AUTH-001
|
||||
**优先级**: P0
|
||||
**前置条件**: 系统已启动,数据库中存在测试用户
|
||||
**测试步骤**:
|
||||
1. 发送POST请求到 `/api/auth/login`
|
||||
2. 提供正确的用户名和密码
|
||||
3. 验证返回的access_token和refresh_token
|
||||
4. 验证token格式正确性
|
||||
|
||||
**预期结果**:
|
||||
- HTTP状态码: 200
|
||||
- 返回包含accessToken和refreshToken
|
||||
- token格式符合JWT标准
|
||||
|
||||
**测试数据**:
|
||||
```json
|
||||
{
|
||||
"username": "admin",
|
||||
"password": "admin123"
|
||||
}
|
||||
```
|
||||
|
||||
#### 1.2 Token刷新流程
|
||||
**用例ID**: TC-AUTH-002
|
||||
**优先级**: P0
|
||||
**前置条件**: 已获得有效的refresh_token
|
||||
**测试步骤**:
|
||||
1. 发送POST请求到 `/api/auth/refresh`
|
||||
2. 提供有效的refresh_token
|
||||
3. 验证返回新的access_token
|
||||
|
||||
**预期结果**:
|
||||
- HTTP状态码: 200
|
||||
- 返回新的accessToken
|
||||
- refreshToken保持不变或更新
|
||||
|
||||
#### 1.3 用户登出流程
|
||||
**用例ID**: TC-AUTH-003
|
||||
**优先级**: P1
|
||||
**前置条件**: 已登录,持有有效token
|
||||
**测试步骤**:
|
||||
1. 发送POST请求到 `/api/auth/logout`
|
||||
2. 在Header中携带Authorization: Bearer {token}
|
||||
3. 验证登出成功
|
||||
|
||||
**预期结果**:
|
||||
- HTTP状态码: 200
|
||||
- 返回成功消息
|
||||
- token被加入黑名单
|
||||
|
||||
#### 1.4 无效登录测试
|
||||
**用例ID**: TC-AUTH-004
|
||||
**优先级**: P1
|
||||
**测试步骤**:
|
||||
1. 使用错误的用户名或密码登录
|
||||
2. 验证错误响应
|
||||
|
||||
**预期结果**:
|
||||
- HTTP状态码: 401
|
||||
- 返回认证失败消息
|
||||
|
||||
### 2. 用户管理测试
|
||||
|
||||
#### 2.1 创建用户
|
||||
**用例ID**: TC-USER-001
|
||||
**优先级**: P0
|
||||
**前置条件**: 已登录,具有ADMIN权限
|
||||
**测试步骤**:
|
||||
1. 发送POST请求到 `/api/users`
|
||||
2. 提供用户信息
|
||||
3. 验证用户创建成功
|
||||
|
||||
**预期结果**:
|
||||
- HTTP状态码: 201
|
||||
- 返回创建的用户信息
|
||||
- 用户ID已生成
|
||||
- 密码已加密
|
||||
|
||||
**测试数据**:
|
||||
```json
|
||||
{
|
||||
"username": "testuser",
|
||||
"password": "password123",
|
||||
"email": "test@example.com",
|
||||
"roleId": 2,
|
||||
"status": 1
|
||||
}
|
||||
```
|
||||
|
||||
#### 2.2 查询单个用户
|
||||
**用例ID**: TC-USER-002
|
||||
**优先级**: P0
|
||||
**测试步骤**:
|
||||
1. 发送GET请求到 `/api/users/{id}`
|
||||
2. 验证返回正确的用户信息
|
||||
|
||||
**预期结果**:
|
||||
- HTTP状态码: 200
|
||||
- 返回完整的用户信息
|
||||
|
||||
#### 2.3 查询所有用户
|
||||
**用例ID**: TC-USER-003
|
||||
**优先级**: P0
|
||||
**测试步骤**:
|
||||
1. 发送GET请求到 `/api/users`
|
||||
2. 验证返回用户列表
|
||||
|
||||
**预期结果**:
|
||||
- HTTP状态码: 200
|
||||
- 返回用户数组
|
||||
- 包含分页信息(如已实现)
|
||||
|
||||
#### 2.4 更新用户
|
||||
**用例ID**: TC-USER-004
|
||||
**优先级**: P0
|
||||
**测试步骤**:
|
||||
1. 发送PUT请求到 `/api/users/{id}`
|
||||
2. 提供更新的用户信息
|
||||
3. 验证更新成功
|
||||
|
||||
**预期结果**:
|
||||
- HTTP状态码: 200
|
||||
- 返回更新后的用户信息
|
||||
|
||||
#### 2.5 删除用户
|
||||
**用例ID**: TC-USER-005
|
||||
**优先级**: P0
|
||||
**测试步骤**:
|
||||
1. 发送DELETE请求到 `/api/users/{id}`
|
||||
2. 验证删除成功
|
||||
|
||||
**预期结果**:
|
||||
- HTTP状态码: 204
|
||||
- 用户已被物理删除
|
||||
|
||||
#### 2.6 逻辑删除用户
|
||||
**用例ID**: TC-USER-006
|
||||
**优先级**: P1
|
||||
**测试步骤**:
|
||||
1. 发送DELETE请求到 `/api/users/{id}/logical`
|
||||
2. 验证逻辑删除成功
|
||||
3. 查询已删除用户(带includeDeleted=true)
|
||||
|
||||
**预期结果**:
|
||||
- HTTP状态码: 200
|
||||
- 用户被标记为已删除
|
||||
- 可以通过includeDeleted参数查询到
|
||||
|
||||
#### 2.7 恢复已删除用户
|
||||
**用例ID**: TC-USER-007
|
||||
**优先级**: P1
|
||||
**前置条件**: 用户已被逻辑删除
|
||||
**测试步骤**:
|
||||
1. 发送POST请求到 `/api/users/{id}/restore`
|
||||
2. 验证恢复成功
|
||||
|
||||
**预期结果**:
|
||||
- HTTP状态码: 200
|
||||
- 用户状态恢复正常
|
||||
|
||||
#### 2.8 用户名唯一性检查
|
||||
**用例ID**: TC-USER-008
|
||||
**优先级**: P1
|
||||
**测试步骤**:
|
||||
1. 发送GET请求到 `/api/users/check/username?username=existing`
|
||||
2. 验证返回true
|
||||
3. 使用不存在的用户名验证返回false
|
||||
|
||||
**预期结果**:
|
||||
- HTTP状态码: 200
|
||||
- 返回正确的布尔值
|
||||
|
||||
#### 2.9 邮箱唯一性检查
|
||||
**用例ID**: TC-USER-009
|
||||
**优先级**: P1
|
||||
**测试步骤**:
|
||||
1. 发送GET请求到 `/api/users/check/email?email=existing@example.com`
|
||||
2. 验证返回true
|
||||
3. 使用不存在的邮箱验证返回false
|
||||
|
||||
**预期结果**:
|
||||
- HTTP状态码: 200
|
||||
- 返回正确的布尔值
|
||||
|
||||
### 3. 角色管理测试
|
||||
|
||||
#### 3.1 创建角色
|
||||
**用例ID**: TC-ROLE-001
|
||||
**优先级**: P0
|
||||
**前置条件**: 已登录,具有ADMIN权限
|
||||
**测试步骤**:
|
||||
1. 发送POST请求到 `/api/roles`
|
||||
2. 提供角色信息
|
||||
3. 验证角色创建成功
|
||||
|
||||
**预期结果**:
|
||||
- HTTP状态码: 201
|
||||
- 返回创建的角色信息
|
||||
|
||||
**测试数据**:
|
||||
```json
|
||||
{
|
||||
"name": "TEST_ROLE",
|
||||
"description": "测试角色",
|
||||
"permissions": "READ,WRITE"
|
||||
}
|
||||
```
|
||||
|
||||
#### 3.2 查询角色
|
||||
**用例ID**: TC-ROLE-002
|
||||
**优先级**: P0
|
||||
**测试步骤**:
|
||||
1. 发送GET请求到 `/api/roles/{id}`
|
||||
2. 验证返回正确的角色信息
|
||||
|
||||
**预期结果**:
|
||||
- HTTP状态码: 200
|
||||
- 返回完整的角色信息
|
||||
|
||||
#### 3.3 按名称查询角色
|
||||
**用例ID**: TC-ROLE-003
|
||||
**优先级**: P1
|
||||
**测试步骤**:
|
||||
1. 发送GET请求到 `/api/roles/name/{name}`
|
||||
2. 验证返回正确的角色信息
|
||||
|
||||
**预期结果**:
|
||||
- HTTP状态码: 200
|
||||
- 返回指定名称的角色
|
||||
|
||||
#### 3.4 查询所有角色
|
||||
**用例ID**: TC-ROLE-004
|
||||
**优先级**: P0
|
||||
**测试步骤**:
|
||||
1. 发送GET请求到 `/api/roles`
|
||||
2. 验证返回角色列表
|
||||
|
||||
**预期结果**:
|
||||
- HTTP状态码: 200
|
||||
- 返回角色数组
|
||||
|
||||
#### 3.5 更新角色
|
||||
**用例ID**: TC-ROLE-005
|
||||
**优先级**: P0
|
||||
**测试步骤**:
|
||||
1. 发送PUT请求到 `/api/roles/{id}`
|
||||
2. 提供更新的角色信息
|
||||
3. 验证更新成功
|
||||
|
||||
**预期结果**:
|
||||
- HTTP状态码: 200
|
||||
- 返回更新后的角色信息
|
||||
|
||||
#### 3.6 删除角色
|
||||
**用例ID**: TC-ROLE-006
|
||||
**优先级**: P0
|
||||
**测试步骤**:
|
||||
1. 发送DELETE请求到 `/api/roles/{id}`
|
||||
2. 验证删除成功
|
||||
|
||||
**预期结果**:
|
||||
- HTTP状态码: 204
|
||||
|
||||
#### 3.7 逻辑删除角色
|
||||
**用例ID**: TC-ROLE-007
|
||||
**优先级**: P1
|
||||
**测试步骤**:
|
||||
1. 发送DELETE请求到 `/api/roles/{id}/logical`
|
||||
2. 验证逻辑删除成功
|
||||
|
||||
**预期结果**:
|
||||
- HTTP状态码: 200
|
||||
- 角色被标记为已删除
|
||||
|
||||
#### 3.8 恢复已删除角色
|
||||
**用例ID**: TC-ROLE-008
|
||||
**优先级**: P1
|
||||
**测试步骤**:
|
||||
1. 发送POST请求到 `/api/roles/{id}/restore`
|
||||
2. 验证恢复成功
|
||||
|
||||
**预期结果**:
|
||||
- HTTP状态码: 200
|
||||
- 角色状态恢复正常
|
||||
|
||||
#### 3.9 角色名唯一性检查
|
||||
**用例ID**: TC-ROLE-009
|
||||
**优先级**: P1
|
||||
**测试步骤**:
|
||||
1. 发送GET请求到 `/api/roles/check/name?name=existing`
|
||||
2. 验证返回true
|
||||
3. 使用不存在的角色名验证返回false
|
||||
|
||||
**预期结果**:
|
||||
- HTTP状态码: 200
|
||||
- 返回正确的布尔值
|
||||
|
||||
### 4. 字典管理测试
|
||||
|
||||
#### 4.1 创建字典
|
||||
**用例ID**: TC-DICT-001
|
||||
**优先级**: P0
|
||||
**前置条件**: 已登录,具有ADMIN权限
|
||||
**测试步骤**:
|
||||
1. 发送POST请求到 `/api/dictionaries`
|
||||
2. 提供字典信息
|
||||
3. 验证字典创建成功
|
||||
|
||||
**预期结果**:
|
||||
- HTTP状态码: 201
|
||||
- 返回创建的字典信息
|
||||
|
||||
**测试数据**:
|
||||
```json
|
||||
{
|
||||
"type": "USER_STATUS",
|
||||
"code": "ACTIVE",
|
||||
"name": "激活",
|
||||
"value": "1",
|
||||
"remark": "用户激活状态",
|
||||
"sort": 1
|
||||
}
|
||||
```
|
||||
|
||||
#### 4.2 查询字典
|
||||
**用例ID**: TC-DICT-002
|
||||
**优先级**: P0
|
||||
**测试步骤**:
|
||||
1. 发送GET请求到 `/api/dictionaries/{id}`
|
||||
2. 验证返回正确的字典信息
|
||||
|
||||
**预期结果**:
|
||||
- HTTP状态码: 200
|
||||
- 返回完整的字典信息
|
||||
|
||||
#### 4.3 按类型查询字典
|
||||
**用例ID**: TC-DICT-003
|
||||
**优先级**: P0
|
||||
**测试步骤**:
|
||||
1. 发送GET请求到 `/api/dictionaries/type/{type}`
|
||||
2. 验证返回指定类型的字典列表
|
||||
|
||||
**预期结果**:
|
||||
- HTTP状态码: 200
|
||||
- 返回指定类型的字典数组
|
||||
- 按sort字段排序
|
||||
|
||||
#### 4.4 查询所有字典
|
||||
**用例ID**: TC-DICT-004
|
||||
**优先级**: P0
|
||||
**测试步骤**:
|
||||
1. 发送GET请求到 `/api/dictionaries`
|
||||
2. 验证返回字典列表
|
||||
|
||||
**预期结果**:
|
||||
- HTTP状态码: 200
|
||||
- 返回字典数组
|
||||
|
||||
#### 4.5 更新字典
|
||||
**用例ID**: TC-DICT-005
|
||||
**优先级**: P0
|
||||
**测试步骤**:
|
||||
1. 发送PUT请求到 `/api/dictionaries/{id}`
|
||||
2. 提供更新的字典信息
|
||||
3. 验证更新成功
|
||||
|
||||
**预期结果**:
|
||||
- HTTP状态码: 200
|
||||
- 返回更新后的字典信息
|
||||
|
||||
#### 4.6 删除字典
|
||||
**用例ID**: TC-DICT-006
|
||||
**优先级**: P0
|
||||
**测试步骤**:
|
||||
1. 发送DELETE请求到 `/api/dictionaries/{id}`
|
||||
2. 验证删除成功
|
||||
|
||||
**预期结果**:
|
||||
- HTTP状态码: 204
|
||||
|
||||
#### 4.7 字典类型和编码唯一性检查
|
||||
**用例ID**: TC-DICT-007
|
||||
**优先级**: P1
|
||||
**测试步骤**:
|
||||
1. 发送GET请求到 `/api/dictionaries/check/exists?type=TYPE&code=CODE`
|
||||
2. 验证返回true或false
|
||||
|
||||
**预期结果**:
|
||||
- HTTP状态码: 200
|
||||
- 返回正确的布尔值
|
||||
|
||||
### 5. OAuth2客户端管理测试
|
||||
|
||||
#### 5.1 创建OAuth2客户端
|
||||
**用例ID**: TC-OAUTH2-001
|
||||
**优先级**: P1
|
||||
**前置条件**: 已登录,具有ADMIN权限
|
||||
**测试步骤**:
|
||||
1. 发送POST请求到 `/api/oauth2/clients`
|
||||
2. 提供客户端信息
|
||||
3. 验证客户端创建成功
|
||||
|
||||
**预期结果**:
|
||||
- HTTP状态码: 201
|
||||
- 返回创建的客户端信息
|
||||
- clientSecret已加密
|
||||
|
||||
**测试数据**:
|
||||
```json
|
||||
{
|
||||
"clientId": "test-client",
|
||||
"clientSecret": "secret123",
|
||||
"clientName": "Test Client",
|
||||
"webServerRedirectUri": "http://localhost:8080/callback",
|
||||
"scope": "read,write",
|
||||
"authorizedGrantTypes": "authorization_code,refresh_token",
|
||||
"accessTokenValiditySeconds": 7200,
|
||||
"refreshTokenValiditySeconds": 2592000,
|
||||
"autoApprove": false,
|
||||
"enabled": true
|
||||
}
|
||||
```
|
||||
|
||||
#### 5.2 查询OAuth2客户端
|
||||
**用例ID**: TC-OAUTH2-002
|
||||
**优先级**: P1
|
||||
**测试步骤**:
|
||||
1. 发送GET请求到 `/api/oauth2/clients/{id}`
|
||||
2. 验证返回正确的客户端信息
|
||||
|
||||
**预期结果**:
|
||||
- HTTP状态码: 200
|
||||
- 返回完整的客户端信息
|
||||
|
||||
#### 5.3 按clientId查询OAuth2凭证
|
||||
**用例ID**: TC-OAUTH2-003
|
||||
**优先级**: P1
|
||||
**测试步骤**:
|
||||
1. 发送GET请求到 `/api/oauth2/clients/client-id/{clientId}`
|
||||
2. 验证返回正确的客户端信息
|
||||
|
||||
**预期结果**:
|
||||
- HTTP状态码: 200
|
||||
- 返回指定clientId的客户端
|
||||
|
||||
#### 5.4 查询所有OAuth2客户端
|
||||
**用例ID**: TC-OAUTH2-004
|
||||
**优先级**: P1
|
||||
**测试步骤**:
|
||||
1. 发送GET请求到 `/api/oauth2/clients`
|
||||
2. 验证返回客户端列表
|
||||
|
||||
**预期结果**:
|
||||
- HTTP状态码: 200
|
||||
- 返回客户端数组
|
||||
|
||||
#### 5.5 更新OAuth2客户端
|
||||
**用例ID**: TC-OAUTH2-005
|
||||
**优先级**: P1
|
||||
**测试步骤**:
|
||||
1. 发送PUT请求到 `/api/oauth2/clients/{id}`
|
||||
2. 提供更新的客户端信息
|
||||
3. 验证更新成功
|
||||
|
||||
**预期结果**:
|
||||
- HTTP状态码: 200
|
||||
- 返回更新后的客户端信息
|
||||
|
||||
#### 5.6 删除OAuth2客户端
|
||||
**用例ID**: TC-OAUTH2-006
|
||||
**优先级**: P1
|
||||
**测试步骤**:
|
||||
1. 发送DELETE请求到 `/api/oauth2/clients/{id}`
|
||||
2. 验证删除成功
|
||||
|
||||
**预期结果**:
|
||||
- HTTP状态码: 204
|
||||
|
||||
### 6. 权限验证测试
|
||||
|
||||
#### 6.1 无token访问受保护资源
|
||||
**用例ID**: TC-PERM-001
|
||||
**优先级**: P0
|
||||
**测试步骤**:
|
||||
1. 不携带token访问需要认证的API
|
||||
2. 验证返回401
|
||||
|
||||
**预期结果**:
|
||||
- HTTP状态码: 401
|
||||
- 返回认证失败消息
|
||||
|
||||
#### 6.2 使用过期token访问
|
||||
**用例ID**: TC-PERM-002
|
||||
**优先级**: P1
|
||||
**测试步骤**:
|
||||
1. 使用已过期的token访问API
|
||||
2. 验证返回401
|
||||
|
||||
**预期结果**:
|
||||
- HTTP状态码: 401
|
||||
- 返回token无效消息
|
||||
|
||||
#### 6.3 使用已登出的token访问
|
||||
**用例ID**: TC-PERM-003
|
||||
**优先级**: P1
|
||||
**前置条件**: token已被登出
|
||||
**测试步骤**:
|
||||
1. 使用已加入黑名单的token访问API
|
||||
2. 验证返回401
|
||||
|
||||
**预期结果**:
|
||||
- HTTP状态码: 401
|
||||
- 返回token无效消息
|
||||
|
||||
#### 6.4 无权限访问资源
|
||||
**用例ID**: TC-PERM-004
|
||||
**优先级**: P1
|
||||
**前置条件**: 用户没有访问资源的权限
|
||||
**测试步骤**:
|
||||
1. 使用普通用户token访问需要ADMIN权限的资源
|
||||
2. 验证返回403
|
||||
|
||||
**预期结果**:
|
||||
- HTTP状态码: 403
|
||||
- 返回权限不足消息
|
||||
|
||||
### 7. 边界条件和异常测试
|
||||
|
||||
#### 7.1 创建重复用户名
|
||||
**用例ID**: TC-EDGE-001
|
||||
**优先级**: P1
|
||||
**测试步骤**:
|
||||
1. 创建用户A
|
||||
2. 使用相同的用户名创建用户B
|
||||
3. 验证返回错误
|
||||
|
||||
**预期结果**:
|
||||
- HTTP状态码: 400或409
|
||||
- 返回用户名已存在错误
|
||||
|
||||
#### 7.2 创建重复邮箱
|
||||
**用例ID**: TC-EDGE-002
|
||||
**优先级**: P1
|
||||
**测试步骤**:
|
||||
1. 创建用户A
|
||||
2. 使用相同的邮箱创建用户B
|
||||
3. 验证返回错误
|
||||
|
||||
**预期结果**:
|
||||
- HTTP状态码: 400或409
|
||||
- 返回邮箱已存在错误
|
||||
|
||||
#### 7.3 查询不存在的资源
|
||||
**用例ID**: TC-EDGE-003
|
||||
**优先级**: P1
|
||||
**测试步骤**:
|
||||
1. 查询不存在的用户ID
|
||||
2. 验证返回404
|
||||
|
||||
**预期结果**:
|
||||
- HTTP状态码: 404
|
||||
- 返回资源未找到消息
|
||||
|
||||
#### 7.4 无效的请求参数
|
||||
**用例ID**: TC-EDGE-004
|
||||
**优先级**: P1
|
||||
**测试步骤**:
|
||||
1. 发送缺少必填字段的请求
|
||||
2. 验证返回400
|
||||
|
||||
**预期结果**:
|
||||
- HTTP状态码: 400
|
||||
- 返回参数验证错误
|
||||
|
||||
#### 7.5 超长字段输入
|
||||
**用例ID**: TC-EDGE-005
|
||||
**优先级**: P2
|
||||
**测试步骤**:
|
||||
1. 发送超长用户名或邮箱
|
||||
2. 验证返回400
|
||||
|
||||
**预期结果**:
|
||||
- HTTP状态码: 400
|
||||
- 返回字段长度超限错误
|
||||
|
||||
### 8. 性能测试
|
||||
|
||||
#### 8.1 并发登录测试
|
||||
**用例ID**: TC-PERF-001
|
||||
**优先级**: P2
|
||||
**测试步骤**:
|
||||
1. 模拟100个并发登录请求
|
||||
2. 验证所有请求都能正常响应
|
||||
3. 记录响应时间
|
||||
|
||||
**预期结果**:
|
||||
- 所有请求成功
|
||||
- 平均响应时间 < 500ms
|
||||
- 无错误发生
|
||||
|
||||
#### 8.2 批量查询性能测试
|
||||
**用例ID**: TC-PERF-002
|
||||
**优先级**: P2
|
||||
**测试步骤**:
|
||||
1. 创建1000个测试用户
|
||||
2. 查询所有用户
|
||||
3. 记录响应时间
|
||||
|
||||
**预期结果**:
|
||||
- HTTP状态码: 200
|
||||
- 响应时间 < 1000ms
|
||||
- 返回完整数据
|
||||
|
||||
### 9. 数据一致性测试
|
||||
|
||||
#### 9.1 缓存一致性测试
|
||||
**用例ID**: TC-CONSIST-001
|
||||
**优先级**: P1
|
||||
**测试步骤**:
|
||||
1. 查询用户A(首次查询,从数据库)
|
||||
2. 更新用户A
|
||||
3. 再次查询用户A(应从缓存获取)
|
||||
4. 验证返回更新后的数据
|
||||
|
||||
**预期结果**:
|
||||
- 第二次查询返回更新后的数据
|
||||
- 缓存被正确失效
|
||||
|
||||
#### 9.2 审计日志测试
|
||||
**用例ID**: TC-CONSIST-002
|
||||
**优先级**: P1
|
||||
**测试步骤**:
|
||||
1. 创建用户
|
||||
2. 更新用户
|
||||
3. 删除用户
|
||||
4. 查询审计日志
|
||||
5. 验证所有操作都被记录
|
||||
|
||||
**预期结果**:
|
||||
- 所有操作都被记录
|
||||
- 审计日志包含完整的变更信息
|
||||
|
||||
## 测试执行计划
|
||||
|
||||
### 测试优先级
|
||||
- P0: 核心功能,必须全部通过
|
||||
- P1: 重要功能,应该全部通过
|
||||
- P2: 辅助功能,尽量通过
|
||||
|
||||
### 测试顺序
|
||||
1. 认证授权测试
|
||||
2. 用户管理测试
|
||||
3. 角色管理测试
|
||||
4. 字典管理测试
|
||||
5. OAuth2客户端管理测试
|
||||
6. 权限验证测试
|
||||
7. 边界条件和异常测试
|
||||
8. 性能测试
|
||||
9. 数据一致性测试
|
||||
|
||||
### 测试数据准备
|
||||
- 自动化创建测试用户、角色、字典数据
|
||||
- 测试完成后自动清理
|
||||
- 使用事务回滚确保测试隔离
|
||||
|
||||
## 测试报告
|
||||
|
||||
测试报告应包含以下内容:
|
||||
1. 测试执行摘要
|
||||
2. 通过/失败用例统计
|
||||
3. 失败用例详情
|
||||
4. 性能指标
|
||||
5. 缺陷列表
|
||||
6. 测试覆盖率
|
||||
|
||||
## 缺陷分类
|
||||
|
||||
- 严重: 系统崩溃、数据丢失
|
||||
- 高: 核心功能不可用
|
||||
- 中: 功能部分不可用
|
||||
- 低: 界面、文案问题
|
||||
@@ -0,0 +1,339 @@
|
||||
---
|
||||
alwaysApply: false
|
||||
description: 6A工作流
|
||||
---
|
||||
|
||||
# 6A 工作流执行规范
|
||||
|
||||
## 概述
|
||||
|
||||
6A 工作流是一种系统化的软件开发方法论,通过六个阶段确保项目高质量交付:
|
||||
|
||||
Align(对齐) → Architect(架构) → Atomize(原子化) → Approve(审批) → Automate(自动化) → Assess(评估)
|
||||
|
||||
---
|
||||
|
||||
## 阶段 1: Align 对齐阶段
|
||||
|
||||
### 🎯 目标
|
||||
|
||||
```
|
||||
|
||||
|
||||
模糊需求 → 精确规范
|
||||
|
||||
|
||||
```
|
||||
|
||||
### 📋 执行步骤
|
||||
|
||||
1.**项目上下文分析**
|
||||
|
||||
- 分析现有项目结构、技术栈、架构模式、依赖关系
|
||||
- 分析现有代码模式、文档和约定
|
||||
- 理解业务域和数据模型
|
||||
|
||||
2.**需求理解确认**
|
||||
|
||||
- 创建 `.trae/docs/任务名/ALIGNMENT_[任务名].md`
|
||||
- 包含项目和任务特性规范
|
||||
- 包含原始需求、边界确认、需求理解、疑问澄清
|
||||
|
||||
3.**智能决策策略**
|
||||
|
||||
- 自动识别歧义和不确定性
|
||||
- 生成结构化问题清单(按优先级排序)
|
||||
- 优先基于现有项目内容和行业知识进行决策
|
||||
- 有人员倾向或不确定的问题主动中断并询问
|
||||
- 基于回答更新理解和规范
|
||||
|
||||
4.**中断并询问关键决策点**
|
||||
|
||||
- 主动中断询问,迭代执行智能决策策略
|
||||
|
||||
5.**最终共识**
|
||||
|
||||
- 生成 `.trae/docs/任务名/CONSENSUS_[任务名].md` 包含:
|
||||
- 明确的需求描述和验收标准
|
||||
- 技术实现方案、技术约束和集成方案
|
||||
- 任务边界限制和验收标准
|
||||
- 确认所有不确定性已解决
|
||||
|
||||
### ✅ 质量门控
|
||||
|
||||
- [ ] 需求边界清晰无歧义
|
||||
- [ ] 技术方案与现有架构对齐
|
||||
- [ ] 验收标准具体可测试
|
||||
- [ ] 所有关键假设已确认
|
||||
- [ ] 项目特性规范已对齐
|
||||
|
||||
---
|
||||
|
||||
## 阶段 2: Architect 架构阶段
|
||||
|
||||
### 🎯 目标
|
||||
|
||||
```
|
||||
|
||||
|
||||
共识文档 → 系统架构 → 模块设计 → 接口规范
|
||||
|
||||
|
||||
```
|
||||
|
||||
### 📋 执行步骤
|
||||
|
||||
1.**系统分层设计**
|
||||
|
||||
- 基于 CONSENSUS、ALIGNMENT 文档设计架构
|
||||
- 生成 `.trae/docs/任务名/DESIGN_[任务名].md` 包含:
|
||||
- 整体架构图(mermaid 绘制)
|
||||
- 分层设计和核心组件
|
||||
- 模块依赖关系图
|
||||
- 接口契约定义
|
||||
- 数据流向图
|
||||
- 异常处理策略
|
||||
|
||||
2.**设计原则**
|
||||
|
||||
- 严格按照任务范围,避免过度设计
|
||||
- 确保与现有系统架构一致
|
||||
- 复用现有组件和模式
|
||||
|
||||
### ✅ 质量门控
|
||||
|
||||
- [ ] 架构图清晰准确
|
||||
- [ ] 接口定义完整
|
||||
- [ ] 与现有系统无冲突
|
||||
- [ ] 设计可行性验证
|
||||
|
||||
---
|
||||
|
||||
## 阶段 3: Atomize 原子化阶段
|
||||
|
||||
### 🎯 目标
|
||||
|
||||
```
|
||||
|
||||
|
||||
架构设计 → 拆分任务 → 明确接口 → 依赖关系
|
||||
|
||||
|
||||
```
|
||||
|
||||
### 📋 执行步骤
|
||||
|
||||
1.**子任务拆分**
|
||||
|
||||
- 基于 DESIGN 文档生成 `.trae/docs/任务名/TASK_[任务名].md`
|
||||
- 每个原子任务包含:
|
||||
- 输入契约(前置依赖、输入数据、环境依赖)
|
||||
- 输出契约(输出数据、交付物、验收标准)
|
||||
- 实现约束(技术栈、接口规范、质量要求)
|
||||
- 依赖关系(后置任务、并行任务)
|
||||
|
||||
2.**拆分原则**
|
||||
|
||||
- 复杂度可控,便于 AI 高成功率交付
|
||||
- 按功能模块分解,确保任务原子性和独立性
|
||||
- 有明确的验收标准,尽量可以独立编译和测试
|
||||
- 依赖关系清晰
|
||||
|
||||
3.**生成任务依赖图**
|
||||
|
||||
- 使用 mermaid 绘制任务依赖关系图
|
||||
|
||||
### ✅ 质量门控
|
||||
|
||||
- [ ] 任务覆盖完整需求
|
||||
- [ ] 依赖关系无循环
|
||||
- [ ] 每个任务都可独立验证
|
||||
- [ ] 复杂度评估合理
|
||||
|
||||
---
|
||||
|
||||
## 阶段 4: Approve 审批阶段
|
||||
|
||||
### 🎯 目标
|
||||
|
||||
```
|
||||
|
||||
|
||||
原子任务 → 人工审查 → 迭代修改 → 按文档执行
|
||||
|
||||
|
||||
```
|
||||
|
||||
### 📋 执行步骤
|
||||
|
||||
1.**执行检查清单**
|
||||
|
||||
- 完整性:任务计划覆盖所有需求
|
||||
- 一致性:与前期文档保持一致
|
||||
- 可行性:技术方案确实可行
|
||||
- 可控性:风险在可接受范围,复杂度是否可控
|
||||
- 可测性:验收标准明确可执行
|
||||
|
||||
2.**最终确认清单**
|
||||
|
||||
- 明确的实现需求(无歧义)
|
||||
- 明确的子任务定义
|
||||
- 明确的边界和限制
|
||||
- 明确的验收标准
|
||||
- 代码、测试、文档质量标准
|
||||
|
||||
---
|
||||
|
||||
## 阶段 5: Automate 自动化执行
|
||||
|
||||
### 🎯 目标
|
||||
|
||||
```
|
||||
|
||||
|
||||
按节点执行 → 编写测试 → 实现代码 → 文档同步
|
||||
|
||||
|
||||
```
|
||||
|
||||
### 📋 执行步骤
|
||||
|
||||
1.**逐步实施子任务**
|
||||
|
||||
- 创建 `.trae/docs/任务名/ACCEPTANCE_[任务名].md` 记录完成情况
|
||||
|
||||
2.**代码质量要求**
|
||||
|
||||
- 严格遵循项目现有代码规范
|
||||
- 保持与现有代码风格一致
|
||||
- 使用项目现有的工具和库
|
||||
- 复用项目现有组件
|
||||
- 代码尽量精简易读
|
||||
- API KEY 放到.env 文件中并且不要提交 git
|
||||
|
||||
3.**异常处理**
|
||||
|
||||
- 遇到不确定问题立刻中断执行
|
||||
- 在 TASK 文档中记录问题详细信息和位置
|
||||
- 寻求人工澄清后继续
|
||||
|
||||
4.**逐步实施流程**
|
||||
|
||||
按任务依赖顺序执行,对每个子任务执行:
|
||||
|
||||
- 执行前检查(验证输入契约、环境准备、依赖满足)
|
||||
- 实现核心逻辑(按设计文档编写代码)
|
||||
- 编写单元测试(边界条件、异常情况)
|
||||
- 运行验证测试
|
||||
- 更新相关文档
|
||||
- 每完成一个任务立即验证
|
||||
|
||||
---
|
||||
|
||||
## 阶段 6: Assess 评估阶段
|
||||
|
||||
### 🎯 目标
|
||||
|
||||
```
|
||||
|
||||
|
||||
执行结果 → 质量评估 → 文档更新 → 交付确认
|
||||
|
||||
|
||||
```
|
||||
|
||||
### 📋 执行步骤
|
||||
|
||||
1.**验证执行结果**
|
||||
|
||||
- 更新 `.trae/docs/任务名/ACCEPTANCE_[任务名].md`
|
||||
- 整体验收检查:
|
||||
- 所有需求已实现
|
||||
- 验收标准全部满足
|
||||
- 项目编译通过
|
||||
- 所有测试通过
|
||||
- 功能完整性验证
|
||||
- 实现与设计文档一致
|
||||
|
||||
2.**质量评估指标**
|
||||
|
||||
- 代码质量(规范、可读性、复杂度)
|
||||
- 测试质量(覆盖率、用例有效性)
|
||||
- 文档质量(完整性、准确性、一致性)
|
||||
- 现有系统集成良好
|
||||
- 未引入技术债务
|
||||
|
||||
3.**最终交付物**
|
||||
|
||||
- 生成 `.trae/docs/任务名/FINAL_[任务名].md`(项目总结报告)
|
||||
- 生成 `.trae/docs/任务名/TODO_[任务名].md`(待办事宜和缺少的配置等)
|
||||
|
||||
4.**TODO 询问**
|
||||
|
||||
- 询问用户 TODO 的解决方式
|
||||
- 精简明确待办事宜和缺少的配置
|
||||
- 提供有用的操作指引
|
||||
|
||||
---
|
||||
|
||||
## 技术执行规范
|
||||
|
||||
### 🔐 安全规范
|
||||
|
||||
- API 密钥等敏感信息使用.env 文件管理
|
||||
|
||||
### 📝 文档同步
|
||||
|
||||
- 代码变更同时更新相关文档
|
||||
|
||||
### 🧪 测试策略
|
||||
|
||||
- 测试优先:先写测试,后写实现
|
||||
- 边界覆盖:覆盖正常流程、边界条件、异常情况
|
||||
|
||||
### 💡 交互体验优化
|
||||
|
||||
#### 进度反馈
|
||||
|
||||
- 显示当前执行阶段
|
||||
- 提供详细的执行步骤
|
||||
- 标示完成情况
|
||||
- 突出需要关注的问题
|
||||
|
||||
#### 异常处理机制
|
||||
|
||||
##### 中断条件
|
||||
|
||||
- 遇到无法自主决策的问题
|
||||
- 觉得需要询问用户的问题
|
||||
- 技术实现出现阻塞
|
||||
- 文档不一致需要确认修正
|
||||
|
||||
##### 恢复策略
|
||||
|
||||
- 保存当前执行状态
|
||||
- 记录问题详细信息
|
||||
- 询问并等待人工干预
|
||||
- 从中断点任务继续执行
|
||||
|
||||
---
|
||||
|
||||
## 附录:文档模板索引
|
||||
|
||||
| 阶段 | 文档名称 | 用途 |
|
||||
|
||||
| --------- | ----------------------- | -------------- |
|
||||
|
||||
| Align | ALIGNMENT\_[任务名].md | 需求理解与确认 |
|
||||
|
||||
| Align | CONSENSUS\_[任务名].md | 最终共识与规范 |
|
||||
|
||||
| Architect | DESIGN\_[任务名].md | 系统架构设计 |
|
||||
|
||||
| Atomize | TASK\_[任务名].md | 原子任务定义 |
|
||||
|
||||
| Automate | ACCEPTANCE\_[任务名].md | 执行过程记录 |
|
||||
|
||||
| Assess | FINAL\_[任务名].md | 项目总结报告 |
|
||||
|
||||
| Assess | TODO\_[任务名].md | 待办事宜清单 |
|
||||
Reference in New Issue
Block a user