# 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 **维护者**: 张翔(全栈质量保障与研发效能工程师)