1.基础用法
1 | import pytest |
- 使用
AsyncClient替代TestClient处理异步请求,支持非阻塞I/O操作 - 必须添加
@pytest.mark.anyio标记声明异步测试函数 - 通过ASGITransport直接挂载FastAPI应用实例,绕过HTTP协议栈提升测试速度
流程图:
graph TD
A[启动AsyncClient] --> B[建立ASGI连接]
B --> C[发送异步请求]
C --> D[接收响应数据]
D --> E[断言验证结果]
E --> F[关闭连接]
2.进阶配置
2.1 生命周期事件处理
1 | from asgi_lifespan import LifespanManager |
- 使用
asgi-lifespan库触发startup/shutdown事件 - 验证应用初始化阶段数据库连接池等资源的加载状态
2.2 多级异步依赖验证
1 | async def test_nested_async(): |
- 利用
asyncio.gather实现并发请求测试 - 支持数据库事务的原子性验证
3.注意事项
事件循环管理:
- 避免在测试函数外创建需要事件循环的对象(如数据库连接池)
- 使用
async with上下文管理器自动清理资源
异常捕获策略:
1
2
3with pytest.raises(HTTPException) as exc_info:
await ac.get("/error-endpoint")
assert exc_info.value.status_code == 500验证特定HTTP异常状态码
Mock策略:
1
2from unittest.mock import AsyncMock
app.dependency_overrides[real_service] = AsyncMock(return_value=mock_data)使用AsyncMock模拟异步依赖项
4.生产环境建议
性能基准测试:
- 使用
pytest-benchmark测量请求延迟,建议单接口平均响应<200ms - 通过
ab工具模拟1000+并发连接压力测试
- 使用
持续集成配置:
1
2
3
4
5# .github/workflows/tests.yml
- name: Run async tests
run: |
pip install -r requirements.txt
pytest --cov=app --cov-report=xml集成覆盖率报告与异步测试流水线
测试命令示例:
1
2
3
4
5 # 安装测试依赖
pip install httpx pytest-asyncio anyio
# 运行测试套件
pytest -v --cov=app tests/