Ответ
Для тестирования эндпоинтов FastAPI используется класс TestClient
, который поставляется вместе с фреймворком.
Он построен на базе библиотеки httpx
и позволяет отправлять HTTP-запросы к приложению напрямую, без запуска реального веб-сервера. Это делает тесты быстрыми, надежными и изолированными.
Пример интеграционного теста:
from fastapi import FastAPI
from fastapi.testclient import TestClient
# Создаем экземпляр приложения
app = FastAPI()
@app.get("/")
async def read_root():
return {"message": "Hello World"}
# Создаем клиент, передав ему экземпляр приложения FastAPI
client = TestClient(app)
def test_read_root():
# Отправляем GET-запрос к эндпоинту "/"
response = client.get("/")
# Проверяем код ответа и тело ответа
assert response.status_code == 200
assert response.json() == {"message": "Hello World"}
Почему TestClient
— это лучший подход:
- Скорость: Тесты выполняются в памяти без реальных сетевых задержек.
- Изоляция: Каждый тест может работать с чистым экземпляром приложения.
- Полная поддержка FastAPI: Корректная работа с зависимостями (Dependencies), middleware и асинхронными операциями.