跳到主要内容

邮轮穿舱件管理系统后台 - 测试指南

概述

本文档为邮轮穿舱件管理系统后台提供完整的测试指南,涵盖单元测试、集成测试的编写和执行方法。基于FastAPI框架和pytest测试框架,确保系统的稳定性和可靠性。

测试框架配置

pytest配置

项目使用pytest作为主要测试框架,配置如下:

[pytest]
addopts = --cov=app/ --cov-report=term-missing
asyncio_mode = auto
env =
ENV=test
MPLBACKEND=Agg
DISPLAY=

测试依赖

项目依赖配置在pyproject.toml中:

测试架构

测试目录结构

test/
├── __init__.py
├── conftest.py
├── test_global_error_handling.py
├── test_permission_router.py
├── test_root_router.py
└── test_user_router.py

测试架构图

flowchart TD
A[测试执行] --> B[conftest.py<br/>测试配置]
B --> C[测试数据库初始化]
B --> D[测试客户端创建]
C --> E[单元测试]
D --> E
E --> F[API路由测试]
E --> G[错误处理测试]
E --> H[权限测试]
F --> I[测试报告生成]
G --> I
H --> I

测试配置详解

conftest.py - 测试配置中心

@pytest.fixture(scope="session", autouse=True)
def override_settings() -> None:
os.environ["ENV"] = "test"

@pytest.fixture(scope="session", autouse=True)
async def setup_database() -> Generator[None, None, None]:
"""设置测试数据库"""
await Tortoise.init(config=settings.tortoise_orm_config_dict)
await Tortoise.generate_schemas()
yield
await Tortoise.close_connections()

@pytest.fixture(scope="module")
def client() -> Generator[TestClient, None, None]:
with TestClient(app) as c:
yield c

测试依赖关系图

flowchart TD
A[conftest.py] --> B[override_settings<br/>环境配置]
A --> C[setup_database<br/>数据库初始化]
A --> D[setup_application<br/>应用设置]
A --> E[client<br/>测试客户端]
A --> F[get_admin_token<br/>管理员令牌]
A --> G[get_user_case<br/>测试用户]

B --> H[测试用例]
C --> H
D --> H
E --> H
F --> H
G --> H

单元测试编写指南

用户路由测试示例

用户创建和列表测试

def test_user_create_and_list_user(client: TestClient, get_admin_token) -> None:
client.headers.update({
"Authorization": f"Bearer {get_admin_token}"
})
response = client.post("/users/", json={
"username": "testuser",
"password": "123456",
"email": "testuser@example.com",
"sms": "13800000000"
})
assert response.status_code == status.HTTP_201_CREATED

用户认证测试

def test_authenticate_user(client: TestClient) -> None:
# 测试正确的用户名和密码
response = client.post("/users/authenticate", json={
"username": "authuser",
"password": "123456"
})
assert response.status_code == status.HTTP_200_OK

测试用例分类

1. CRUD操作测试

  • 用户创建、读取、更新、删除
  • 数据验证和边界测试
  • 分页和查询参数测试

2. 认证授权测试

  • 用户登录认证
  • 权限验证
  • Token管理

3. 业务逻辑测试

  • 状态变更
  • 数据关联
  • 业务规则验证

集成测试编写指南

全局错误处理测试

def test_value_error_handling(client: TestClient) -> None:
"""测试ValueError的全局异常处理"""
response = client.get("/error-test/value-error")
assert response.status_code == status.HTTP_400_BAD_REQUEST
data = response.json()
assert data["error"] == "Bad Request"

根路由测试

def test_root_request(client: TestClient) -> None:
response = client.get("/")
assert response.status_code == 200
data = response.json()
assert data == {"message": "Hello World"}

测试执行方法

基本测试执行

# 运行所有测试
pytest

# 运行特定测试文件
pytest test/test_user_router.py

# 运行特定测试函数
pytest test/test_user_router.py::test_user_create_and_list_user

# 生成覆盖率报告
pytest --cov=app/ --cov-report=html

测试执行流程图

sequenceDiagram
participant User
participant Pytest
participant TestClient
participant FastAPI
participant Database

User->>Pytest: 执行测试命令
Pytest->>TestClient: 创建测试客户端
TestClient->>FastAPI: 发送HTTP请求
FastAPI->>Database: 数据库操作
Database-->>FastAPI: 返回数据
FastAPI-->>TestClient: HTTP响应
TestClient-->>Pytest: 断言验证
Pytest-->>User: 测试结果报告

测试覆盖率分析

# 终端显示覆盖率
pytest --cov=app/ --cov-report=term-missing

# 生成HTML覆盖率报告
pytest --cov=app/ --cov-report=html

测试最佳实践

1. 测试组织结构

flowchart TD
A[测试目录] --> B[conftest.py<br/>共享配置]
A --> C[test_*.py<br/>功能测试]
A --> D[集成测试]
A --> E[端到端测试]

B --> F[测试夹具]
B --> G[测试配置]
C --> H[单元测试]
D --> I[API测试]
E --> J[系统测试]

2. 测试数据管理

  • 使用fixture创建测试数据
  • 测试后自动清理数据
  • 避免测试间数据污染

3. 异步测试处理

@pytest.mark.asyncio
async def test_async_function():
result = await async_function()
assert result is not None

错误处理和异常测试

异常处理架构

flowchart TD
A[HTTP请求] --> B[路由处理]
B --> C{是否发生异常?}
C -->|是| D[异常类型判断]
C -->|否| E[正常响应]

D --> F[HTTPException]
D --> G[StarletteHTTPException]
D --> H[通用Exception]

F --> I[HTTP错误处理]
G --> J[Starlette错误处理]
H --> K[全局异常处理]

I --> L[JSON错误响应]
J --> L
K --> L
E --> M[成功响应]

异常测试策略

  1. 预期异常测试:验证系统正确处理已知异常
  2. 边界条件测试:测试输入边界和极端情况
  3. 错误恢复测试:验证系统从错误中恢复的能力

性能测试建议

基准测试

import pytest
import time

def test_api_performance(client: TestClient):
start_time = time.time()

# 执行多次请求测试性能
for i in range(100):
response = client.get("/users/")
assert response.status_code == 200

end_time = time.time()
assert (end_time - start_time) < 5.0 # 5秒内完成100次请求

索引

本测试指南提供了邮轮穿舱件管理系统后台的完整测试方案,包括:

  1. 测试框架配置:pytest配置和依赖管理
  2. 测试架构设计:模块化测试组织和依赖关系
  3. 单元测试编写:详细的测试用例示例和最佳实践
  4. 集成测试策略:API测试和错误处理验证
  5. 测试执行方法:命令行工具和覆盖率分析
  6. 性能测试建议:基准测试和性能监控

通过遵循本指南,可以确保系统的高质量交付和持续集成流程的顺畅运行。

参考文件