Как тестировать эндпоинты в FastAPI

Ответ

Для тестирования эндпоинтов 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 и асинхронными операциями.