Files
novalon-manage-system/api_integration_tests
张翔 e2ad1331cc feat: 添加测试框架和覆盖率报告功能
feat(测试): 新增Playwright和Vitest测试配置
feat(测试): 添加测试覆盖率报告生成功能
feat(测试): 实现前后端测试脚本集成

fix(测试): 修复测试密码不匹配问题
fix(测试): 修正URL等待策略
fix(测试): 调整错误消息选择器

refactor(测试): 重构测试目录结构
refactor(测试): 优化测试用例组织方式

docs: 更新测试报告文档
docs: 添加测试覆盖率报告模板

ci: 添加Docker测试环境配置
ci: 实现测试自动化脚本

chore: 更新依赖版本
chore: 添加测试相关配置文件
2026-03-25 09:03:37 +08:00
..

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测试

运行命令

# 运行所有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 - 业务流程测试

测试内容

  • 完整的用户生命周期
  • 角色分配工作流
  • 通知工作流
  • 多角色用户管理
  • 用户角色级联操作
  • 搜索和过滤工作流
  • 错误恢复工作流

运行命令

# 运行业务流程测试
python -m pytest tests/test_e2e.py -v --tb=short

3. 真实的E2E测试(前后端联通)

特点

  • 使用Playwright的page对象进行浏览器操作
  • 结合前端操作和API验证
  • 测试真实的前后端联通
  • 采用headless模式运行
  • 验证完整的用户业务流程

测试文件

  • test_real_e2e.py - 真实的E2E测试

测试内容

  • 完整的用户生命周期(前端创建 + API验证)
  • 角色分配流程(前端操作 + API验证)
  • 登录和导航流程
  • 系统配置管理
  • 搜索和过滤功能

运行命令

# 运行真实的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. 启动后端服务

# 启动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测试)

cd novalon-manage-web
npm run dev

3. 安装Python依赖

cd api_integration_tests
pip install -r requirements.txt
playwright install

4. 配置环境变量

# 复制环境变量示例文件
cp .env.example .env

# 编辑.env文件,配置以下变量:
# API_BASE_URL=http://localhost:8080
# TEST_USERNAME=admin
# TEST_PASSWORD=admin123
# HEADLESS_BROWSER=true

🚀 运行测试

运行所有测试

# 运行所有测试(包括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"

运行特定类型的测试

# 运行认证测试
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

生成测试报告

# 生成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标记进行分类:

# 运行所有标记为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. 查看详细输出

# 显示print输出
python -m pytest tests/ -v -s

# 显示更详细的traceback
python -m pytest tests/ -v --tb=long

2. 调试单个测试

# 在第一个失败时停止
python -m pytest tests/ -v -x

# 进入pdb调试器
python -m pytest tests/ -v --pdb

3. 非headless模式调试

# 设置环境变量
HEADLESS_BROWSER=false python -m pytest tests/test_real_e2e.py -v

📝 配置说明

Pytest配置 (pytest.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)

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返回的数据格式
  • 检查前端数据渲染逻辑

📚 参考资料


最后更新时间: 2026-03-14
维护者: 张翔(全栈质量保障与研发效能工程师)