Files
novalon-manage-system/api_integration_tests/README.md
T
张翔 c50ccd258f feat: 重构测试框架并优化代码结构
refactor(tests): 将e2e_tests迁移到tests_suite和api_integration_tests
style: 为Java类添加文档注释
docs: 更新.gitignore和配置文件
test: 添加性能测试和Playwright测试脚本
chore: 清理旧测试文件和配置
2026-03-14 13:49:39 +08:00

388 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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(登录、注册、登出)
- ✅ 用户管理APICRUD操作)
- ✅ 角色管理APICRUD操作)
- ✅ 权限管理APICRUD操作)
- ✅ 菜单管理APICRUD操作)
- ✅ 字典管理APICRUD操作)
- ✅ 字典数据APICRUD操作)
- ✅ 系统配置APICRUD操作)
- ✅ 通知管理APICRUD操作)
- ✅ 文件管理APICRUD操作)
- ✅ 审计日志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
**维护者**: 张翔(全栈质量保障与研发效能工程师)