En el tema anterior instalamos coverage.py y obtuvimos una primera medición. Ahora vamos a ordenar el flujo de trabajo básico: limpiar mediciones anteriores, ejecutar las pruebas bajo cobertura y generar el reporte desde la terminal.
La idea es que puedas repetir siempre la misma secuencia y entender qué archivo genera cada comando.
coverage run y generar un reporte básico con coverage report.
Seguiremos usando el proyecto cobertura-demo. Entra en la carpeta del proyecto y activa el entorno virtual antes de ejecutar los comandos.
En Windows PowerShell:
cd cobertura-demo
.venv\Scripts\Activate.ps1
En Linux o macOS:
cd cobertura-demo
source .venv/bin/activate
También necesitamos que Python encuentre el paquete dentro de src. Por eso usaremos PYTHONPATH en los comandos.
La herramienta puede ejecutarse como coverage, pero en este curso usaremos la forma:
python -m coverage
Esto ayuda a evitar confusiones cuando hay varios Python instalados. El comando se ejecuta con el mismo intérprete del entorno virtual activo.
Antes de medir desde cero, puedes borrar los datos acumulados de cobertura:
python -m coverage erase
Este comando elimina el archivo .coverage si existe. No borra tu código ni tus pruebas; solamente elimina los datos guardados por mediciones anteriores.
Para medir cobertura, no ejecutamos pytest directamente. Lo ejecutamos a través de coverage run.
En Windows PowerShell:
$env:PYTHONPATH="src"
python -m coverage run -m pytest
En Linux o macOS:
PYTHONPATH=src python -m coverage run -m pytest
La opción -m pytest le indica a Python que ejecute pytest como módulo. Coverage observa esa ejecución y registra qué líneas del programa fueron ejecutadas.
Después de ejecutar las pruebas, coverage crea un archivo llamado .coverage en la carpeta del proyecto.
cobertura-demo/
|-- .coverage
|-- src/
|-- tests/
`-- requirements.txt
Ese archivo contiene los datos crudos de la medición. Normalmente no se abre ni se edita a mano. Se usa como entrada para generar reportes.
Una vez creada la medición, genera el reporte en la terminal:
python -m coverage report
Una salida posible es:
Name Stmts Miss Cover
--------------------------------------------
src\tienda\__init__.py 0 0 100%
src\tienda\precios.py 14 2 86%
tests\test_precios.py 10 0 100%
--------------------------------------------
TOTAL 24 2 92%
El reporte básico permite ver rápidamente cuántas sentencias fueron detectadas, cuántas no se ejecutaron y qué porcentaje de cobertura tiene cada archivo.
Cuando quieras medir desde cero, puedes usar esta secuencia.
En Windows PowerShell:
python -m coverage erase
$env:PYTHONPATH="src"
python -m coverage run -m pytest
python -m coverage report
En Linux o macOS:
python -m coverage erase
PYTHONPATH=src python -m coverage run -m pytest
python -m coverage report
Esta secuencia evita mezclar datos viejos con la medición actual.
Si ejecutas solamente:
python -m pytest
las pruebas se ejecutan, pero no se genera información de cobertura. En cambio, con:
python -m coverage run -m pytest
las pruebas también se ejecutan, pero coverage registra qué partes del código fueron recorridas.
python -m coverage run -m pytest y luego python -m coverage report.PYTHONPATH apunte a src.python -m coverage erase y vuelve a ejecutar la medición.En este tema ordenamos el flujo básico de cobertura: limpiar datos anteriores, ejecutar pytest mediante python -m coverage run -m pytest y generar el reporte con python -m coverage report.
En el próximo tema vamos a interpretar con más detalle las columnas del reporte: Stmts, Miss, Cover y otros valores que aparecen al configurar mejor la medición.