用途:为 FastAPI 应用编写接口测试,覆盖同步与异步场景、依赖替换、CRUD 与校验用例、数据库隔离及常见错误规避。
主要能力:
- 测试客户端:TestClient 适合大多数同步测试,无需启动服务器,直接包装 ASGI 应用;AsyncClient(httpx)支持异步端点与 lifespan 事件。
- 依赖覆盖:通过 app.dependency_overrides[original] = test_version 替换依赖,常用于数据库会话、认证/当前用户、外部服务;测试后需清理覆盖。
- CRUD 测试清单:创建返回 201 与正确数据,错误含 400 校验、409 重复;读取返回 200,错误 404;更新返回 200,错误 404、400;删除返回 204,错误 404。
- 校验测试:用 parametrize 覆盖边界条件,如合法输入成功、非法邮箱 422、缺失必填字段 422、过短/过长值 422。
- 数据库策略:内存 SQLite(快、隔离,但与生产库不同)、测试数据库(真实但较慢)、事务加回滚(快且真实但配置复杂)、模拟仓储(最快但集成覆盖少);建议用函数级 fixture 保证隔离。
- 项目结构:tests/ 下含 conftest.py(共享 fixture:client、db、auth)、test_users.py、test_auth.py、factories/(测试数据工厂)。
使用方式:创建 client fixture,设置依赖覆盖,yield 后清理覆盖;测试受保护端点时覆盖 get_current_user;文件上传用 files={"file": (name, content, mimetype)};异步测试加 @pytest.mark.asyncio。
适用场景:FastAPI 接口的单元与集成测试、认证与权限测试、数据库交互测试、文件上传测试。
限制:资料未提供具体安装命令、版本要求、性能数据或收费信息;SQLite 与 Postgres 存在差异,重要测试建议使用同类型数据库;避免测试实现细节,应聚焦 HTTP 响应行为。