Las pruebas unitarias son una parte esencial del desarrollo de software, ya que permiten verificar que las diferentes partes de tu aplicación funcionen correctamente de manera aislada. En este módulo, aprenderás cómo escribir y ejecutar pruebas unitarias para tu aplicación Flask utilizando la biblioteca unittest
de Python.
¿Qué son las Pruebas Unitarias?
Las pruebas unitarias son pruebas automatizadas que verifican el comportamiento de una unidad de código, como una función o un método, de manera aislada. El objetivo es asegurarse de que cada unidad de código funcione correctamente por sí sola.
Configuración del Entorno de Pruebas
Antes de comenzar a escribir pruebas unitarias, es importante configurar tu entorno de desarrollo para soportar las pruebas. Asegúrate de tener unittest
instalado, aunque viene incluido con Python por defecto.
Instalación de Dependencias
Si aún no lo has hecho, instala Flask-Testing
, una extensión que facilita la creación de pruebas para aplicaciones Flask.
Estructura de Archivos
Organiza tu proyecto de manera que las pruebas se encuentren en un directorio separado. Una estructura de proyecto típica podría verse así:
my_flask_app/ │ ├── app/ │ ├── __init__.py │ ├── routes.py │ └── models.py │ ├── tests/ │ ├── __init__.py │ ├── test_routes.py │ └── test_models.py │ ├── config.py ├── run.py └── requirements.txt
Escribiendo Pruebas Unitarias
Creando un Archivo de Pruebas
Crea un archivo llamado test_routes.py
dentro del directorio tests/
. Este archivo contendrá nuestras pruebas unitarias para las rutas de la aplicación.
Configuración de la Clase de Pruebas
Primero, configura una clase de pruebas que herede de unittest.TestCase
. Esta clase se encargará de configurar y limpiar el entorno de pruebas antes y después de cada prueba.
import unittest from app import create_app class BasicTests(unittest.TestCase): def setUp(self): """Configura el entorno de pruebas antes de cada prueba.""" self.app = create_app('testing') self.client = self.app.test_client() self.app_context = self.app.app_context() self.app_context.push() def tearDown(self): """Limpia el entorno de pruebas después de cada prueba.""" self.app_context.pop()
Escribiendo una Prueba Unitaria
Ahora, escribe una prueba unitaria simple para verificar que la página de inicio se carga correctamente.
def test_home_page(self): """Prueba que la página de inicio se carga correctamente.""" response = self.client.get('/') self.assertEqual(response.status_code, 200) self.assertIn(b'Welcome to My Flask App', response.data)
Explicación del Código
setUp
: Este método se ejecuta antes de cada prueba. Aquí, creamos una instancia de la aplicación Flask en modo de prueba y configuramos un cliente de pruebas.tearDown
: Este método se ejecuta después de cada prueba para limpiar el entorno de pruebas.test_home_page
: Esta es una prueba unitaria que envía una solicitud GET a la página de inicio y verifica que el código de estado de la respuesta sea 200 (OK) y que el contenido de la página contenga el texto "Welcome to My Flask App".
Ejecutando las Pruebas
Para ejecutar las pruebas, simplemente usa el siguiente comando en la terminal:
Este comando buscará y ejecutará todas las pruebas en el directorio tests
.
Ejercicio Práctico
Ejercicio 1: Prueba de una Ruta de Usuario
Escribe una prueba unitaria para verificar que la ruta /user/<username>
devuelve el nombre de usuario correcto.
Instrucciones
- Crea una nueva función de prueba en
test_routes.py
. - Envía una solicitud GET a la ruta
/user/testuser
. - Verifica que el código de estado de la respuesta sea 200.
- Verifica que el contenido de la respuesta contenga el nombre de usuario "testuser".
Solución
def test_user_page(self): """Prueba que la página de usuario se carga correctamente.""" response = self.client.get('/user/testuser') self.assertEqual(response.status_code, 200) self.assertIn(b'testuser', response.data)
Ejercicio 2: Prueba de una Ruta de Error
Escribe una prueba unitaria para verificar que una ruta inexistente devuelve un error 404.
Instrucciones
- Crea una nueva función de prueba en
test_routes.py
. - Envía una solicitud GET a una ruta inexistente
/nonexistent
. - Verifica que el código de estado de la respuesta sea 404.
Solución
def test_404_error(self): """Prueba que una ruta inexistente devuelve un error 404.""" response = self.client.get('/nonexistent') self.assertEqual(response.status_code, 404)
Resumen
En esta sección, aprendiste cómo configurar y escribir pruebas unitarias para una aplicación Flask utilizando unittest
. Las pruebas unitarias son cruciales para asegurar que cada parte de tu aplicación funcione correctamente de manera aislada. Practica escribiendo más pruebas para diferentes partes de tu aplicación para fortalecer tus habilidades en pruebas unitarias.
En el próximo tema, exploraremos las pruebas de integración, que te permitirán verificar que diferentes partes de tu aplicación funcionen correctamente juntas.
Curso de Desarrollo Web con Flask
Módulo 1: Introducción a Flask
- ¿Qué es Flask?
- Configuración de tu Entorno de Desarrollo
- Creando tu Primera Aplicación Flask
- Entendiendo la Estructura de una Aplicación Flask
Módulo 2: Conceptos Básicos de Flask
- Enrutamiento y Mapeo de URLs
- Manejo de Métodos HTTP
- Renderizando Plantillas con Jinja2
- Trabajando con Archivos Estáticos
Módulo 3: Formularios y Entrada de Usuario
Módulo 4: Integración de Bases de Datos
- Introducción a Flask-SQLAlchemy
- Definiendo Modelos
- Realizando Operaciones CRUD
- Migraciones de Base de Datos con Flask-Migrate
Módulo 5: Autenticación de Usuarios
- Registro de Usuarios
- Inicio y Cierre de Sesión de Usuarios
- Hashing de Contraseñas
- Gestión de Sesiones de Usuario
Módulo 6: Conceptos Avanzados de Flask
- Blueprints para Aplicaciones Grandes
- Manejo de Errores
- Páginas de Error Personalizadas
- Registro y Depuración
Módulo 7: APIs RESTful con Flask
- Introducción a las APIs RESTful
- Creación de Endpoints RESTful
- Manejo de Datos JSON
- Autenticación para APIs
Módulo 8: Despliegue y Producción
- Configuración de Flask para Producción
- Despliegue en Heroku
- Despliegue en AWS
- Monitoreo y Optimización del Rendimiento
Módulo 9: Pruebas y Mejores Prácticas
- Pruebas Unitarias con Flask
- Pruebas de Integración
- Cobertura de Pruebas
- Mejores Prácticas para el Desarrollo con Flask