Ejecutar los tests y ver los resultados en la terminal está bien cuando trabajas solo. Pero cuando necesitas compartir los resultados con tu equipo, con un cliente o adjuntarlos a un pipeline de CI/CD, necesitas algo más visual y profesional. Los reportes HTML de pytest son exactamente eso.
Por qué necesitas reportes HTML
Un reporte HTML de pytest convierte los resultados de los tests en una página web que cualquiera puede abrir en el navegador sin necesidad de tener Python instalado ni entender la terminal.
Es especialmente útil en tres situaciones. Cuando trabajas con un equipo y necesitas compartir los resultados de forma clara. Cuando quieres adjuntar evidencias de testing a un ticket de Jira o a un documento de entrega. Y cuando configuras CI/CD y quieres que los resultados sean accesibles desde GitHub Actions sin tener que leer logs.
pytest-html — el plugin más popular
El plugin más usado para generar reportes HTML en pytest es pytest-html. Es gratuito, fácil de instalar y produce reportes claros con toda la información que necesitas.
Para instalarlo:
bash
pip install pytest-html
Y para generar el reporte al ejecutar los tests:
bash
pytest tests/ --html=reporte.html
Esto ejecuta todos los tests de la carpeta tests/ y genera un archivo reporte.html en el directorio actual que puedes abrir directamente en el navegador.
Qué incluye el reporte
El reporte HTML de pytest-html incluye un resumen con el número total de tests, cuántos pasaron, cuántos fallaron y cuántos fueron omitidos. Muestra el tiempo total de ejecución y el entorno donde se ejecutaron los tests — versión de Python, sistema operativo, plataforma.
Para cada test individual muestra el nombre, el resultado, el tiempo de ejecución y en caso de fallo el traceback completo con el mensaje de error.
Hacer el reporte autocontenido
Por defecto el reporte genera un archivo HTML que depende de archivos CSS y JavaScript externos. Si lo mueves de carpeta o lo envías por email puede no verse correctamente.
Para generar un reporte completamente autocontenido en un solo archivo:
bash
pytest tests/ --html=reporte.html --self-contained-html
Con esta opción todo el CSS y JavaScript queda embebido en el HTML y el archivo funciona en cualquier lugar sin dependencias externas.
Configurar pytest.ini para no repetir opciones
Si siempre quieres generar el reporte sin tener que escribir las opciones cada vez, puedes configurarlo en tu archivo pytest.ini:
ini
[pytest]
addopts = --html=reports/reporte.html --self-contained-html
Con esto, cada vez que ejecutes pytest a secas generará automáticamente el reporte en la carpeta reports/.
Añadir capturas de pantalla al reporte
Una de las funcionalidades más útiles es añadir capturas de pantalla automáticamente cuando un test falla. Así puedes ver exactamente qué estaba pasando en el navegador en el momento del fallo.
Para configurarlo con Playwright, añade esto a tu conftest.py:
python
import pytest
from playwright.sync_api import Page
@pytest.hookimpl(tryfirst=True, hookwrapper=True)
def pytest_runtest_makereport(item, call):
outcome = yield
report = outcome.get_result()
if report.failed:
page = item.funcargs.get("page")
if page:
screenshot = page.screenshot()
report.extra = getattr(report, "extra", [])
import pytest_html
report.extra.append(
pytest_html.extras.image(screenshot, "image/png")
)
Con esto, cada test que falle incluirá automáticamente una captura de pantalla en el reporte HTML.
Allure — para reportes más avanzados
Si necesitas reportes más completos y visuales, Allure es la opción más profesional del mercado. Genera dashboards interactivos con gráficos, histórico de ejecuciones y análisis de tendencias.
Para instalarlo:
bash
pip install allure-pytest
Para ejecutar los tests y generar los datos del reporte:
bash
pytest tests/ --alluredir=allure-results
Para generar el reporte HTML a partir de los datos:
bash
allure serve allure-results
Allure abre automáticamente el reporte en el navegador con una interfaz mucho más rica que pytest-html — perfect para presentaciones o entregas formales a clientes.
Integrar los reportes en GitHub Actions
Para que los reportes se generen automáticamente en cada ejecución de CI/CD y queden disponibles como artefactos descargables, añade esto a tu workflow de GitHub Actions:
yaml
- name: Ejecutar tests y generar reporte
run: pytest tests/ --html=reports/reporte.html --self-contained-html
- name: Subir reporte como artefacto
uses: actions/upload-artifact@v3
if: always()
with:
name: reporte-tests
path: reports/reporte.html
Con if: always() el reporte se sube tanto si los tests pasan como si fallan, lo que es especialmente útil para investigar los fallos.
Si quieres saber más sobre cómo configurar GitHub Actions para QA puedes leer GitHub Actions para QA: automatiza tus tests.
Y si necesitas implementar una suite de tests profesional con reportes en tu proyecto puedes ver mis servicios en fatimaqa.com.
