Refactorizar sin pruebas es arriesgado. Con pruebas unitarias, pytest y coverage obtienes velocidad y confianza: ejecutas tests en paralelo, mides qué partes del código están cubiertas y ves errores con mejor detalle. Además, aplicar Test Driven Development guía el diseño y evita regresiones.
¿Qué es pytest y por qué mejora tus pruebas unitarias?
Pytest es el estándar moderno en Python para pruebas unitarias. Es más simple de escribir, ofrece mejor reporte de errores y soporta plugins avanzados sin complicar la sintaxis. Lo mejor: puede ejecutar los unit tests existentes sin reescribirlos.
Pruebas unitarias: validan unidades pequeñas de código y documentan el comportamiento esperado.
Unit Test: biblioteca estándar tradicional; en el proyecto de Platzi News se usó para crear tests.
Pytest: ejecución sencilla, reporting claro y extensible mediante plugins.
¿Cómo instalar pytest como dependencia de desarrollo?
Ejecuta: v add --dev pytest.
Verás los paquetes instalados y cambios en pyproject con la versión de pytest.
¿Qué configuración básica necesita pytest?
En pyproject, agrega la sección de configuración: tool.pytest.ini_options.
Define las rutas de pruebas con testPaths y los patrones con python_files.
Expón la app con PYTHONPATH apuntando a SRC para que pytest encuentre tu código.
¿Cómo medir cobertura con coverage y generar reportes útiles?
La métrica coverage indica qué porcentaje de tu código está cubierto por pruebas. Ayuda a priorizar dónde escribir nuevos tests y a visualizar líneas no ejercitadas.
Instala el plugin: v add --dev pytest-cov.
Ejecuta con parámetros de cobertura y reporte HTML.
pytest --cov=SRC --cov-report=html
Se genera la carpeta htmlcov con index.html y un resumen por archivo.
Ejemplo observado: 80 % de cobertura total. Archivos con 100 % están completos; otros muestran líneas sin probar.
Interpretación visual: líneas verdes aprobadas; líneas rojas sin pruebas que las ejecuten.
¿Qué decisiones tomar con el reporte de coverage?
Prioriza módulos en rojo con lógica crítica.
Agrega casos para ramas no cubiertas (condiciones, excepciones, bordes).
Repite la medición hasta alcanzar un nivel objetivo sostenible.
¿Cómo paralelizar pruebas con xdist y aplicar TDD en tu flujo?
La ejecución paralela con xdist usa múltiples núcleos para reducir drásticamente el tiempo de feedback. Esto incentiva ciclos rápidos y seguros, ideal al practicar TDD.
Instala el plugin: v add --dev pytest-xdist.
Ejecuta en paralelo con detección automática de núcleos.
pytest -n auto
Resultado observado: todas las pruebas en menos de un segundo usando 11 workers.
Agrega verbosidad para más detalle en la terminal: progreso, nodo, clase y método del test.
pytest -n auto --cov=SRC --cov-report=html -b -v
¿Por qué sumar Test Driven Development a esta configuración?
Test Driven Development te hace escribir el test antes del código.
Beneficios: diseño más claro, foco en requisitos y verificación continua al refactorizar.
Con pytest, coverage y xdist, el ciclo rojo–verde–refactor es ágil y confiable.
¿Qué otros plugins puedes explorar para tu contexto?
pytest-mock: crea mocks de dependencias fácilmente.
pytest-randomly: ejecuta en orden aleatorio para detectar dependencias entre tests.
La ecosistema de pytest incluye miles de plugins: elige el que resuelva tu necesidad específica.
¿Te gustaría compartir qué plugin adicional probaste, cómo configuraste tu pyproject o qué mejoras viste en tiempos y cobertura?