Cómo generar el reporte de tests en pytest con HTML

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.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll al inicio