Pruebas de Flask
Utiliza el cliente de prueba y el contexto de la aplicación en pytest.
Receta
Tarjeta de referencia rápida - lista para copiar y pegar.
def test_health(client):
assert client.get("/health").status_code == 200Cuándo usar esto:
- Pruebas de regresión de rutas
- Flujos de autenticación/sesión
- Fixtures de reversión de base de datos
Ejemplo de Trabajo
import pytest
@pytest.fixture
def app():
app = create_app("testing")
yield app
@pytest.fixture
def client(app):
return app.test_client()Lo que esto demuestra:
- Fixture de aplicación de pytest
- Cliente de prueba
- Configuración de pruebas
Análisis Profundo
Cómo Funciona
test_clientsimula peticiones en proceso.- Empuja el contexto de la aplicación para acceder a
current_app. - Utiliza transacciones para aislar las pruebas de la base de datos.
Errores Comunes
- Se omite la validación de límites - Los datos inválidos llegan a las capas de persistencia. Solución: Valida con Pydantic o formularios del framework en el borde.
- Fugas de trazas de pila - Los clientes ven errores internos. Solución: Mapea excepciones a respuestas HTTP estables.
- Bucles de eventos asíncronos bloqueantes - Los workers se bloquean bajo carga concurrente. Solución: Utiliza drivers asíncronos o wrappers de pool de hilos.
- Secretos en el control de código fuente - Las credenciales se filtran a través del historial de git. Solución: Carga secretos desde variables de entorno o una bóveda en tiempo de ejecución.
- Falta de observabilidad - Los incidentes son difíciles de depurar. Solución: Añade logs estructurados, métricas e IDs de petición.
Alternativas
| Alternativa | Usar Cuando | No Usar Cuando |
|---|---|---|
| Framework alternativo en este manual | Estándar del equipo o monolito existente | API Greenfield con diferentes restricciones |
| BaaS gestionado | MVP solo CRUD | Autenticación, flujos de trabajo o necesidades de cumplimiento personalizadas |
| gRPC | RPC interno de alto rendimiento | Clientes HTTP públicos y acceso al navegador |
Preguntas Frecuentes
¿Cuándo debería adoptar las pruebas de Flask?
Úsalo cuando los patrones y las compensaciones en esta página coincidan con tu API o límite de datos.
¿Cuál es el principal error de producción con las pruebas de Flask?
Omitir la validación, los tiempos de espera o los contratos de error explícitos en el borde HTTP.
¿Cómo pruebo las pruebas de Flask?
Utiliza el cliente de prueba del framework, anula las dependencias y afirma el estado más la forma del JSON.
¿Las pruebas de Flask funcionan con Python 3.14?
Sí - los ejemplos apuntan a Python 3.14 con versiones de framework fijadas del pie de página de la pila.
¿Cómo se relacionan las pruebas de Flask con Pydantic 2?
Valida y serializa en los límites; mantén los servicios funcionando con objetos de dominio tipados.
¿Sincronizado o asíncrono?
Prefiere rutas asíncronas cuando el I/O domina; mantén el trabajo de CPU pequeño o descárgalo a workers.
¿Dónde debe vivir la lógica de negocio?
Handlers delgados; los servicios poseen las reglas; los repositorios poseen las consultas.
¿Cómo documento las APIs?
Publica documentación OpenAPI o de esquema que coincida con los modelos de respuesta en el código.
¿Cómo manejo el versionado?
Versionado explícito de URL o encabezado con ventanas de deprecación - evita roturas silenciosas.
¿Qué debería leer a continuación?
Sigue los enlaces Relacionados para la siguiente capa de profundidad en esta sección.
¿Cómo me mantengo seguro?
Autentica a los llamadores, autoriza por recurso, limita la tasa y nunca registres secretos.
¿Primer paso para el rendimiento?
Mide la latencia de la base de datos y la externa antes de cambiar de framework.
Relacionado
- Conceptos Básicos de Flask - Rutas y peticiones
- Fábricas de Aplicaciones y Blueprints - Estructura
- Construcción de APIs REST - Endpoints JSON
- Despliegue de Flask - Producción WSGI
Versiones de la Pila: Esta página fue escrita para Python 3.14.0 (estable 3.14, mantenimiento 3.13), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+, y uv 0.6+.