Probar rutas con TestClient
Objetivos
Vas a simular una solicitud HTTP desde una prueba y comprobar el contrato que recibe una persona cliente de la API.
Concepto
Una prueba de API envía una solicitud y compara la respuesta real con lo esperado. FastAPI ofrece TestClient, que llama a la aplicación dentro del proceso; no necesitas iniciar Uvicorn ni abrir un navegador para estas comprobaciones. pytest encuentra funciones cuyo nombre comienza con test_.
Una prueba de /health no necesita MySQL porque la ruta solo devuelve un estado de la aplicación. Para endpoints que consultan datos, en las siguientes lecciones reemplazarás la dependencia de base por una base temporal con filas sintéticas. Esa prueba verifica comportamiento HTTP; no demuestra que MySQL esté instalado correctamente.
Ejemplo
Instala los paquetes de pruebas desde la carpeta del proyecto con py -m pip install -r requirements.txt. En tests/test_api.py:
from fastapi.testclient import TestClient
from app.main import app
client = TestClient(app)
def test_health():
response = client.get("/health")
assert response.status_code == 200
assert response.json() == {"status": "ok"}Ejecuta py -m pytest -q. La respuesta pasa por el router y los serializadores de FastAPI. No se consulta la base porque el endpoint de salud no depende de get_db. FastAPI documenta el uso de TestClient con pytest.
Práctica guiada
- Provoca temporalmente una respuesta
readyen la ruta. - Actualiza la aserción para revisar el nuevo JSON.
- Revierte la modificación cuando la prueba vuelva a pasar.
Reto
Escribe una prueba que verifique que el documento OpenAPI de la aplicación contiene la ruta /health.
Intenta el reto antes de consultar las pistas.
Quiz
Comprobación
Probaste el contrato HTTP de salud. Para probar rutas de Sakila sin depender de datos reales, reemplazarás get_db durante la prueba.