feat: 重构测试框架并优化代码结构
refactor(tests): 将e2e_tests迁移到tests_suite和api_integration_tests style: 为Java类添加文档注释 docs: 更新.gitignore和配置文件 test: 添加性能测试和Playwright测试脚本 chore: 清理旧测试文件和配置
This commit is contained in:
@@ -0,0 +1,388 @@
|
||||
# API集成测试和E2E测试
|
||||
|
||||
## 📁 目录结构
|
||||
|
||||
```
|
||||
api_integration_tests/
|
||||
├── tests/ # 测试用例目录
|
||||
│ ├── test_auth.py # 认证API测试
|
||||
│ ├── test_user.py # 用户管理API测试
|
||||
│ ├── test_role.py # 角色管理API测试
|
||||
│ ├── test_permission.py # 权限管理API测试
|
||||
│ ├── test_menu.py # 菜单管理API测试
|
||||
│ ├── test_dict.py # 字典管理API测试
|
||||
│ ├── test_dictionary.py # 字典数据API测试
|
||||
│ ├── test_config.py # 系统配置API测试
|
||||
│ ├── test_notice.py # 通知管理API测试
|
||||
│ ├── test_file.py # 文件管理API测试
|
||||
│ ├── test_audit.py # 审计日志API测试
|
||||
│ ├── test_websocket.py # WebSocket测试
|
||||
│ ├── test_performance.py # 性能测试
|
||||
│ ├── test_exception_scenarios.py # 异常场景测试
|
||||
│ ├── test_data_manager_example.py # 数据管理器示例
|
||||
│ ├── test_e2e.py # 业务流程测试(API集成)
|
||||
│ └── test_real_e2e.py # 真实的E2E测试(前后端联通)
|
||||
├── api/ # API客户端封装
|
||||
│ ├── __init__.py
|
||||
│ ├── base_api.py # 基础API类
|
||||
│ ├── auth_api.py # 认证API
|
||||
│ ├── user_api.py # 用户API
|
||||
│ ├── role_api.py # 角色API
|
||||
│ ├── permission_api.py # 权限API
|
||||
│ ├── menu_api.py # 菜单API
|
||||
│ ├── dict_api.py # 字典API
|
||||
│ ├── dictionary_api.py # 字典数据API
|
||||
│ ├── config_api.py # 配置API
|
||||
│ ├── notice_api.py # 通知API
|
||||
│ ├── file_api.py # 文件API
|
||||
│ └── audit_api.py # 审计API
|
||||
├── config/ # 配置管理
|
||||
│ ├── __init__.py
|
||||
│ └── settings.py # 应用配置
|
||||
├── utils/ # 工具类
|
||||
│ ├── __init__.py
|
||||
│ ├── assertions.py # 断言工具
|
||||
│ ├── data_generator.py # 数据生成器
|
||||
│ ├── logger.py # 日志工具
|
||||
│ └── test_data_manager.py # 测试数据管理器
|
||||
├── reports/ # 测试报告目录
|
||||
│ └── e2e_report.html # 测试报告
|
||||
├── conftest.py # Pytest配置和fixtures
|
||||
├── requirements.txt # Python依赖
|
||||
├── pytest.ini # Pytest配置
|
||||
├── .env.example # 环境变量示例
|
||||
└── README.md # 本文件
|
||||
```
|
||||
|
||||
## 🎯 测试类型说明
|
||||
|
||||
### 1. API集成测试
|
||||
|
||||
**特点**:
|
||||
- 使用httpx直接调用后端API
|
||||
- 测试API端点的功能和业务逻辑
|
||||
- 验证数据持久化和业务规则
|
||||
- 不涉及浏览器操作
|
||||
|
||||
**测试文件**:
|
||||
- `test_auth.py` - 认证API测试
|
||||
- `test_user.py` - 用户管理API测试
|
||||
- `test_role.py` - 角色管理API测试
|
||||
- `test_permission.py` - 权限管理API测试
|
||||
- `test_menu.py` - 菜单管理API测试
|
||||
- `test_dict.py` - 字典管理API测试
|
||||
- `test_dictionary.py` - 字典数据API测试
|
||||
- `test_config.py` - 系统配置API测试
|
||||
- `test_notice.py` - 通知管理API测试
|
||||
- `test_file.py` - 文件管理API测试
|
||||
- `test_audit.py` - 审计日志API测试
|
||||
|
||||
**运行命令**:
|
||||
```bash
|
||||
# 运行所有API集成测试
|
||||
python -m pytest tests/ -v --tb=short
|
||||
|
||||
# 运行特定模块的测试
|
||||
python -m pytest tests/test_user.py -v
|
||||
|
||||
# 运行特定测试用例
|
||||
python -m pytest tests/test_user.py::TestUser::test_create_user_success -v
|
||||
```
|
||||
|
||||
### 2. 业务流程测试(API集成)
|
||||
|
||||
**特点**:
|
||||
- 使用httpx调用多个API端点
|
||||
- 测试完整的业务流程
|
||||
- 验证业务逻辑和数据流转
|
||||
|
||||
**测试文件**:
|
||||
- `test_e2e.py` - 业务流程测试
|
||||
|
||||
**测试内容**:
|
||||
- 完整的用户生命周期
|
||||
- 角色分配工作流
|
||||
- 通知工作流
|
||||
- 多角色用户管理
|
||||
- 用户角色级联操作
|
||||
- 搜索和过滤工作流
|
||||
- 错误恢复工作流
|
||||
|
||||
**运行命令**:
|
||||
```bash
|
||||
# 运行业务流程测试
|
||||
python -m pytest tests/test_e2e.py -v --tb=short
|
||||
```
|
||||
|
||||
### 3. 真实的E2E测试(前后端联通)
|
||||
|
||||
**特点**:
|
||||
- 使用Playwright的page对象进行浏览器操作
|
||||
- 结合前端操作和API验证
|
||||
- 测试真实的前后端联通
|
||||
- 采用headless模式运行
|
||||
- 验证完整的用户业务流程
|
||||
|
||||
**测试文件**:
|
||||
- `test_real_e2e.py` - 真实的E2E测试
|
||||
|
||||
**测试内容**:
|
||||
- 完整的用户生命周期(前端创建 + API验证)
|
||||
- 角色分配流程(前端操作 + API验证)
|
||||
- 登录和导航流程
|
||||
- 系统配置管理
|
||||
- 搜索和过滤功能
|
||||
|
||||
**运行命令**:
|
||||
```bash
|
||||
# 运行真实的E2E测试
|
||||
python -m pytest tests/test_real_e2e.py -v --tb=short
|
||||
|
||||
# 运行特定的E2E测试
|
||||
python -m pytest tests/test_real_e2e.py::TestRealE2E::test_complete_user_lifecycle_e2e -v
|
||||
```
|
||||
|
||||
## 🔧 环境准备
|
||||
|
||||
### 1. 启动后端服务
|
||||
|
||||
```bash
|
||||
# 启动PostgreSQL数据库
|
||||
docker-compose up -d postgres
|
||||
|
||||
# 启动后端服务
|
||||
cd novalon-manage-api/manage-app
|
||||
DB_HOST=localhost DB_PORT=55432 DB_NAME=manage_system DB_USERNAME=postgres DB_PASSWORD=postgres java -jar target/manage-app-1.0.0.jar
|
||||
```
|
||||
|
||||
### 2. 启动前端服务(仅用于真实E2E测试)
|
||||
|
||||
```bash
|
||||
cd novalon-manage-web
|
||||
npm run dev
|
||||
```
|
||||
|
||||
### 3. 安装Python依赖
|
||||
|
||||
```bash
|
||||
cd api_integration_tests
|
||||
pip install -r requirements.txt
|
||||
playwright install
|
||||
```
|
||||
|
||||
### 4. 配置环境变量
|
||||
|
||||
```bash
|
||||
# 复制环境变量示例文件
|
||||
cp .env.example .env
|
||||
|
||||
# 编辑.env文件,配置以下变量:
|
||||
# API_BASE_URL=http://localhost:8080
|
||||
# TEST_USERNAME=admin
|
||||
# TEST_PASSWORD=admin123
|
||||
# HEADLESS_BROWSER=true
|
||||
```
|
||||
|
||||
## 🚀 运行测试
|
||||
|
||||
### 运行所有测试
|
||||
|
||||
```bash
|
||||
# 运行所有测试(包括API集成测试和E2E测试)
|
||||
python -m pytest tests/ -v --tb=short
|
||||
|
||||
# 只运行API集成测试(不包括E2E测试)
|
||||
python -m pytest tests/ -v --tb=short -m "not playwright"
|
||||
|
||||
# 只运行E2E测试
|
||||
python -m pytest tests/ -v --tb=short -m "playwright"
|
||||
```
|
||||
|
||||
### 运行特定类型的测试
|
||||
|
||||
```bash
|
||||
# 运行认证测试
|
||||
python -m pytest tests/test_auth.py -v
|
||||
|
||||
# 运行用户管理测试
|
||||
python -m pytest tests/test_user.py -v
|
||||
|
||||
# 运行业务流程测试
|
||||
python -m pytest tests/test_e2e.py -v
|
||||
|
||||
# 运行真实的E2E测试
|
||||
python -m pytest tests/test_real_e2e.py -v
|
||||
```
|
||||
|
||||
### 生成测试报告
|
||||
|
||||
```bash
|
||||
# 生成HTML测试报告
|
||||
python -m pytest tests/ --html=reports/test_report.html --self-contained-html
|
||||
|
||||
# 生成覆盖率报告
|
||||
python -m pytest tests/ --cov=api --cov=utils --cov-report=html
|
||||
```
|
||||
|
||||
## 📊 测试标记
|
||||
|
||||
测试使用pytest标记进行分类:
|
||||
|
||||
```bash
|
||||
# 运行所有标记为smoke的测试
|
||||
python -m pytest tests/ -v -m smoke
|
||||
|
||||
# 运行所有标记为regression的测试
|
||||
python -m pytest tests/ -v -m regression
|
||||
|
||||
# 运行所有标记为e2e的测试
|
||||
python -m pytest tests/ -v -m e2e
|
||||
|
||||
# 运行所有标记为playwright的测试
|
||||
python -m pytest tests/ -v -m playwright
|
||||
```
|
||||
|
||||
## 🔍 调试技巧
|
||||
|
||||
### 1. 查看详细输出
|
||||
|
||||
```bash
|
||||
# 显示print输出
|
||||
python -m pytest tests/ -v -s
|
||||
|
||||
# 显示更详细的traceback
|
||||
python -m pytest tests/ -v --tb=long
|
||||
```
|
||||
|
||||
### 2. 调试单个测试
|
||||
|
||||
```bash
|
||||
# 在第一个失败时停止
|
||||
python -m pytest tests/ -v -x
|
||||
|
||||
# 进入pdb调试器
|
||||
python -m pytest tests/ -v --pdb
|
||||
```
|
||||
|
||||
### 3. 非headless模式调试
|
||||
|
||||
```bash
|
||||
# 设置环境变量
|
||||
HEADLESS_BROWSER=false python -m pytest tests/test_real_e2e.py -v
|
||||
```
|
||||
|
||||
## 📝 配置说明
|
||||
|
||||
### Pytest配置 (pytest.ini)
|
||||
|
||||
```ini
|
||||
[pytest]
|
||||
testpaths = tests
|
||||
python_files = test_*.py
|
||||
python_classes = Test*
|
||||
python_functions = test_*
|
||||
addopts =
|
||||
-v
|
||||
--strict-markers
|
||||
--tb=short
|
||||
--asyncio-mode=auto
|
||||
markers =
|
||||
smoke: 冒烟测试
|
||||
regression: 回归测试
|
||||
e2e: 端到端测试
|
||||
playwright: Playwright浏览器测试
|
||||
auth: 认证测试
|
||||
user: 用户测试
|
||||
role: 角色测试
|
||||
permission: 权限测试
|
||||
menu: 菜单测试
|
||||
dict: 字典测试
|
||||
config: 配置测试
|
||||
notice: 通知测试
|
||||
file: 文件测试
|
||||
audit: 审计测试
|
||||
```
|
||||
|
||||
### 应用配置 (config/settings.py)
|
||||
|
||||
```python
|
||||
class Settings(BaseSettings):
|
||||
API_BASE_URL: str = "http://localhost:8080"
|
||||
TEST_USERNAME: str = "admin"
|
||||
TEST_PASSWORD: str = "admin123"
|
||||
HEADLESS_BROWSER: bool = True # headless模式
|
||||
BROWSER_TYPE: str = "chromium"
|
||||
REQUEST_TIMEOUT: int = 30000
|
||||
```
|
||||
|
||||
## ✅ 测试覆盖的功能
|
||||
|
||||
### API集成测试覆盖
|
||||
- ✅ 认证API(登录、注册、登出)
|
||||
- ✅ 用户管理API(CRUD操作)
|
||||
- ✅ 角色管理API(CRUD操作)
|
||||
- ✅ 权限管理API(CRUD操作)
|
||||
- ✅ 菜单管理API(CRUD操作)
|
||||
- ✅ 字典管理API(CRUD操作)
|
||||
- ✅ 字典数据API(CRUD操作)
|
||||
- ✅ 系统配置API(CRUD操作)
|
||||
- ✅ 通知管理API(CRUD操作)
|
||||
- ✅ 文件管理API(CRUD操作)
|
||||
- ✅ 审计日志API(查询)
|
||||
|
||||
### 业务流程测试覆盖
|
||||
- ✅ 完整的用户生命周期
|
||||
- ✅ 角色分配工作流
|
||||
- ✅ 通知工作流
|
||||
- ✅ 多角色用户管理
|
||||
- ✅ 用户角色级联操作
|
||||
- ✅ 搜索和过滤工作流
|
||||
- ✅ 错误恢复工作流
|
||||
|
||||
### 真实E2E测试覆盖
|
||||
- ✅ 完整的用户生命周期(前端创建 + API验证)
|
||||
- ✅ 角色分配流程(前端操作 + API验证)
|
||||
- ✅ 登录和导航流程
|
||||
- ✅ 系统配置管理
|
||||
- ✅ 搜索和过滤功能
|
||||
|
||||
## 🐛 常见问题
|
||||
|
||||
### 1. 测试超时
|
||||
|
||||
**问题**:测试执行超时
|
||||
|
||||
**解决方案**:
|
||||
- 增加请求超时时间:修改`settings.REQUEST_TIMEOUT`
|
||||
- 增加页面默认超时时间:`page.set_default_timeout(60000)`
|
||||
- 增加特定操作的等待时间
|
||||
|
||||
### 2. 405 Method Not Allowed错误
|
||||
|
||||
**问题**:API端点返回405错误
|
||||
|
||||
**解决方案**:
|
||||
- 检查API端点的HTTP方法是否正确
|
||||
- 检查路由配置是否正确
|
||||
- 检查Handler方法的HTTP方法注解
|
||||
|
||||
### 3. 前后端数据不一致
|
||||
|
||||
**问题**:前端显示的数据与API返回的数据不一致
|
||||
|
||||
**解决方案**:
|
||||
- 检查前端是否正确调用API
|
||||
- 检查API返回的数据格式
|
||||
- 检查前端数据渲染逻辑
|
||||
|
||||
## 📚 参考资料
|
||||
|
||||
- [Pytest官方文档](https://docs.pytest.org/)
|
||||
- [Playwright官方文档](https://playwright.dev/python/)
|
||||
- [Httpx官方文档](https://www.python-httpx.org/)
|
||||
- [Spring Boot测试文档](https://spring.io/guides/gs/testing-web/)
|
||||
|
||||
---
|
||||
|
||||
**最后更新时间**: 2026-03-14
|
||||
**维护者**: 张翔(全栈质量保障与研发效能工程师)
|
||||
Reference in New Issue
Block a user