Django: Testing

Guía completa para realizar testing en proyectos Django, aprovechando librerías, buenas prácticas y métodos para garantizar la calidad de tus aplicaciones web.

Aprende Django GRATIS y certifícate

Probar tu aplicación Django es imprescindible para asegurar un comportamiento correcto y detectar fallos temprano. El testing abarca desde la funcionalidad de tus vistas hasta el rendimiento y la seguridad del sitio.

“Invertir tiempo en testing previene errores y mejora la calidad de cualquier proyecto en Django.”

La herramienta principal de Django para pruebas es su módulo integrado django.test, que se basa en la librería estándar unittest. Esta opción facilita la creación de tests que simulan peticiones, comparan salidas y validan la respuesta de tus vistas.

Un ejemplo básico en tests.py podría lucir así:

from django.test import TestCase
from django.urls import reverse

class SimpleTest(TestCase):
    def test_homepage_status_code(self):
        response = self.client.get(reverse('home'))
        self.assertEqual(response.status_code, 200)

En cada test, se utiliza self.client para enviar solicitudes simuladas a la aplicación. Esto simplifica la verificación de los códigos de estado HTTP y otras respuestas. Con reverse('home'), se obtiene la URL de la vista asociada a la ruta llamada 'home'.

Para ejecutar las pruebas, basta con usar el siguiente comando:

python manage.py test

Una práctica frecuente es combinar Django con pytest, una librería popular de testing en Python. Su flexibilidad y facilidad de uso permiten crear tests más legibles, además de facilitar las pruebas parametrizadas y la integración con complementos como pytest-django.

En proyectos grandes, se recomienda mantener los tests en carpetas separadas para cada componente. Agrupar los archivos de prueba por modelos, vistas o funcionalidades aporta mayor orden y reduce el tiempo de búsqueda de errores.

Es aconsejable cubrir todos los flujos críticos de tu aplicación con tests de unidad y tests de integración. Un listado de buenas prácticas podría incluir:

  • Separar la lógica de negocio de las vistas y modelos para que cada parte sea más sencilla de probar.
  • Crear pruebas concisas y descriptivas, que sirvan de documentación adicional.
  • Integrar un sistema de cobertura como coverage.py para asegurarte de que los puntos clave del proyecto estén protegidos.

El hábito de escribir tests conforme se desarrolla cada funcionalidad, o incluso antes de implementarla (enfoque TDD), ayuda a reforzar la fiabilidad del código. Asimismo, detectarás inconsistencias en los modelos, en la seguridad de formularios o en la lógica de vistas de forma temprana.

Incorporar testing continuo en tu flujo de integración (CI) es una estrategia profesional para evitar sorpresas en producción. Herramientas como GitHub Actions o Jenkins permiten que cada cambio en el repositorio dispare automáticamente la ejecución de las pruebas, garantizando la calidad de la aplicación en todo momento.

Empezar curso de Django

Lecciones de este módulo de Django

Lecciones de programación del módulo Testing del curso de Django.

Ejercicios de programación en este módulo de Django

Evalúa tus conocimientos en Testing con ejercicios de programación Testing de tipo Test, Puzzle, Código y Proyecto con VSCode.