Hasta ahora ejecutamos las pruebas con python -m coverage run -m pytest y luego generamos el reporte con python -m coverage report. Ese flujo funciona bien, pero en proyectos con pytest es muy común usar el plugin pytest-cov.
pytest-cov permite pedir la cobertura directamente en el comando de pytest, sin separar la ejecución de las pruebas y la generación del reporte.
--cov y obtener el reporte de cobertura en la misma corrida.
Con el entorno virtual activo, instala el plugin:
python -m pip install pytest-cov
Si el proyecto usa requirements.txt, conviene agregar la dependencia para que otros puedan recrear el entorno:
pytest
coverage
pytest-cov
Luego puedes reinstalar las dependencias con:
python -m pip install -r requirements.txt
Para confirmar que pytest reconoce la opción --cov, puedes ejecutar:
python -m pytest --help
En la ayuda debe aparecer una sección con opciones de cobertura, como --cov y --cov-report.
El comando básico es:
En Windows PowerShell:
$env:PYTHONPATH="src"
python -m pytest --cov=src
En Linux o macOS:
PYTHONPATH=src python -m pytest --cov=src
La opción --cov=src indica que queremos medir la cobertura del código ubicado dentro de la carpeta src.
La ejecución muestra primero el resultado de las pruebas y luego el reporte de cobertura:
---------- coverage: platform win32, python 3.x.x-final-0 -----------
Name Stmts Miss Cover
--------------------------------------------
src\tienda\__init__.py 0 0 100%
src\tienda\precios.py 14 2 86%
--------------------------------------------
TOTAL 14 2 86%
A diferencia de reportes anteriores, al usar --cov=src se mide solamente el código de aplicación dentro de src, no los archivos de prueba.
Para ver qué líneas quedaron sin ejecutar, usa --cov-report=term-missing:
En Windows PowerShell:
$env:PYTHONPATH="src"
python -m pytest --cov=src --cov-report=term-missing
En Linux o macOS:
PYTHONPATH=src python -m pytest --cov=src --cov-report=term-missing
La salida agrega la columna Missing:
Name Stmts Miss Cover Missing
------------------------------------------------------
src\tienda\__init__.py 0 0 100%
src\tienda\precios.py 14 2 86% 6, 14
------------------------------------------------------
TOTAL 14 2 86%
También puedes indicar el paquete que quieres medir:
python -m pytest --cov=tienda --cov-report=term-missing
Esto funciona si PYTHONPATH apunta a src o si el paquete está instalado en el entorno. En este curso seguiremos usando --cov=src hasta configurar el proyecto con más detalle.
Estos dos enfoques miden cobertura usando la misma herramienta de base, pero cambian la forma de invocarla.
python -m coverage run -m pytest
python -m coverage report -m
python -m pytest --cov=src --cov-report=term-missing
Con coverage run separas la medición y el reporte. Con pytest-cov obtienes ambas cosas desde pytest. Para trabajo diario con pytest, pytest-cov suele ser más cómodo.
pytest-cov en el entorno virtual activo.PYTHONPATH=src o instala el paquete correctamente.--cov.src y no tests.En este tema instalamos pytest-cov y usamos python -m pytest --cov=src para medir cobertura directamente al ejecutar pytest.
También usamos --cov-report=term-missing para ver las líneas faltantes. En el próximo tema vamos a profundizar en los reportes de terminal y en cómo leerlos con más criterio.