创作者: Yardon | GitHub: github.com/YardonYan | 版本: v1.0 |
测试框架 pytest
bash
pip install pytest pytest-asyncio httpx
python
# test_main.py
def test_root():
assert True
def test_add():
assert 1 + 1 == 2
bash
pytest test_main.py -v
FastAPI TestClient
python
from fastapi.testclient import TestClient
from main import app
client = TestClient(app)
def test_login_success():
response = client.post(
"/api/v1/auth/token",
data={"username": "yardon", "password": "secret123"},
)
assert response.status_code == 200
assert "access_token" in response.json()
def test_login_wrong_password():
response = client.post(
"/api/v1/auth/token",
data={"username": "yardon", "password": "wrong"},
)
assert response.status_code == 401
TestClient 让同步测试不需要启动真实服务器,响应速度极快。
异步测试
python
import pytest
from httpx import AsyncClient, ASGITransport
from main import app
@pytest.mark.asyncio
async def test_list_users():
transport = ASGITransport(app=app)
async with AsyncClient(transport=transport, base_url="http://test") as ac:
response = await ac.get("/api/v1/users")
assert response.status_code == 200
Fixture 与依赖覆盖
python
from pytest import fixture
from main import app
from db import get_db, override_get_db
@fixture
def test_db():
# 创建测试数据库
Base.metadata.create_all(bind=test_engine)
yield
Base.metadata.drop_all(bind=test_engine)
def test_with_db(test_db):
app.dependency_overrides[get_db] = override_get_db
# 测试结束后清理
app.dependency_overrides.clear()
本章小结
pytest + TestClient 是 FastAPI 测试的核心组合。记住:用 fixture 管理测试数据,用 override_get_db 隔离数据库测试。
📌 创作者: Yardon | 🏠 个人网站: GlimmerAI.top
📖 本章是「FastAPI 全栈后端 」系列的第 7 章。下一章:部署与运维
🌟 欢迎大家来观看!