FastAPI 全栈后端(七):测试与自动化

创作者: 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 章。下一章:部署与运维

🌟 欢迎大家来观看!

相关推荐
AI你一生一世几秒前
当“版权主张”不再需要人类:从 Luanti 被下架看自动化维权的工程化风险
运维·人工智能·自动化·开源软件·内容分发·自动化维权·版权主张
港股研究社1 分钟前
换了多个AI之后,我的创作项目在豆包工作集合
人工智能
计算机魔术师2 分钟前
807亿亏配900%留存:ANT招股书把AI的拧巴摊在桌上了
前端
森山冶仁3 分钟前
数据飞轮的企业版切入:四个环节先做哪个
人工智能·数据治理·数据要素·数据质量·数据资产
xianghongtao01165 分钟前
DeepSeek成名之后的路
人工智能·智能体·deepseek·deepseek融资·端脑科技·商业新闻
未来之窗软件服务13 分钟前
web网络请求竞态问题与取消方案-东方仙盟
前端·状态模式·仙盟创梦ide·东方仙盟·网络取消
linktokenview13 分钟前
GLM-5.3-Flash私有化部署实践指南
人工智能
W_3260014 分钟前
Python 图像处理第二十八章|OpenCV 形态学操作进阶:腐蚀、膨胀、开运算、闭运算、梯度、顶帽黑帽
图像处理·人工智能·python·opencv·计算机视觉
美狐美颜SDK开放平台16 分钟前
视频美颜SDK如何实现动态贴纸跟随?人脸追踪技术解析
android·人工智能·计算机视觉·音视频·直播美颜sdk
鬓戈20 分钟前
手机拍屏幕行为模型二次训练方案
人工智能