Integración de videos en Allure Report con Pytest y Playwright
La lectura de los resultados de las pruebas debe ser un proceso rápido, permitiendo al lector comprender los fallos sin necesidad de examinar el código, ejecutar un depurador o interrumpir a sus compañeros de equipo. Para lograr esto, los informes de prueba deben presentar información detallada de manera concisa y accesible. Aunque adjuntar capturas de pantalla y registros es una práctica estándar, a veces no es suficiente.
En estos casos, grabar un video de la ejecución de la prueba puede ser invaluable. Los videos mejoran la reproducción de problemas, aceleran la depuración y ayudan en el análisis automatizado de pruebas. También mejoran la precisión de la documentación al capturar errores intermitentes.
En esta guía, configuraremos pruebas con Pytest, las grabaremos usando Pytest Playwright y adjuntaremos videos a los informes en Allure Report.
1. Preparación
Requisitos previos
Asegúrate de cumplir con los siguientes requisitos previos:
Lista de dependencias
Esta guía utiliza los siguientes paquetes:
Ejemplo de código
El código utilizado en esta guía está disponible en https://github.com/allure-examples/guide-pytest-playwright-video.
Configuración
Para ejecutar los ejemplos de esta guía:
- Instala Python
- Instala Allure Report
- Descarga un proyecto nuevo con Pytest desde Allure Start
- Agrega el complemento Pytest Playwright a tu proyecto. Por ejemplo, si usas
pip
:
pip install pytest-playwright
2. Grabación de videos con Playwright Pytest
Playwright Pytest graba videos en el contexto del navegador y los guarda como archivos WebM. Para iniciar la grabación manualmente, puedes crear un contexto de navegador con el método new_context()
del objeto Browser
y pasarle el parámetro record_video_dir
, por ejemplo:
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
# Crear un navegador
browser = p.chromium.launch()
# Iniciar un contexto de navegador con grabación de video
context = browser.new_context(record_video_dir="path/to/videos")
page = context.new_page()
page.goto("https://playwright.dev")
3. Videos automáticos en caso de fallo
Para guardar automáticamente el video en caso de fallo en una prueba, configura la opción --video
en retain-on-failure
en la configuración de Pytest de tu proyecto. Por ejemplo, si usas pyproject.toml
como archivo de configuración, agrega lo siguiente:
[tool.pytest.ini_options]
...
addopts = [
...
"--video", "retain-on-failure",
]
Para cada prueba, Playwright Pytest crea un subdirectorio en el directorio test-results
y guarda allí el video correspondiente.
4. Adjuntar videos a un informe de Allure
Si bien capturar videos es útil para diagnosticar fallos en las pruebas, verlos por separado puede ser ineficiente. Cuando los datos de prueba están dispersos en múltiples ubicaciones, identificar y resolver problemas se vuelve más tedioso y consume más tiempo.
Para optimizar este proceso, los videos deben adjuntarse directamente a los informes de Allure, asegurando que toda la información relevante de la prueba esté consolidada en un solo lugar para facilitar el análisis y la solución de problemas.
Allure Report muestra los videos dentro de la prueba en la que fueron grabados, junto con mensajes de error y otros archivos adjuntos, proporcionando todo lo necesario para analizar los resultados de las pruebas de manera efectiva.
Para agregar un archivo de video local a Allure Report, usa la función allure.attach.file()
:
import allure
allure.attach.file(
"file_name.webm",
name="video attachment",
attachment_type=allure.attachment_type.WEBM
)
Para adjuntar automáticamente un video local en cada fallo de prueba, puedes escribir un hook en el archivo conftest.py
ubicado en el directorio raíz de pruebas de tu proyecto. Suponiendo que configuraste la opción --video
como se describe en la sección Videos automáticos en caso de fallo, el hook puede buscar los videos guardados y adjuntarlos al informe de Allure. Por ejemplo:
# Contenido de conftest.py
import pathlib
import allure
import pytest
@pytest.hookimpl(hookwrapper=True)
def pytest_runtest_teardown(item, nextitem):
yield
try:
# Obtener el directorio de la prueba
artifacts_dir = item.funcargs.get("output_path")
if artifacts_dir:
artifacts_dir_path = pathlib.Path(artifacts_dir)
if artifacts_dir_path.is_dir():
for file in artifacts_dir_path.iterdir():
# Buscar el archivo de vídeo y adjuntarlo al Allure Report
if file.is_file() and file.suffix == ".webm":
allure.attach.file(
file,
name=file.name,
attachment_type=allure.attachment_type.WEBM,
)
except Exception as e:
print(f"Error al adjuntar el vídeo: {e}")
5. Otros tipos de adjuntos
Allure Report también puede manejar otros tipos de archivos adjuntos, como imágenes, texto, tablas, listas de URI o documentos (XML, JSON, YAML). Por ejemplo:
allure.attach(
response_content,
name="response content",
attachment_type=allure.attachment_type.XML
)
Allure Pytest adjunta automáticamente algunos elementos:
- Todo lo que se envíe a
sys.stdout
, por ejemplo,print(...)
- Todo lo que se envíe a
sys.stderr
, por ejemplo,print(..., file=sys.stderr)
- Registros de logging, por ejemplo,
logging.warning(...)
Estos datos se adjuntan como pseudoarchivos al informe:
Si no deseas que estos adjuntos automáticos de Pytest aparezcan en el informe, usa la opción --allure-no-capture
.
Si deseas aprender cómo adjuntar capturas de pantalla, consulta la guía sobre adjuntos con Pytest y Playwright y la documentación sobre tipos de adjuntos.
6. Conclusión
Con Pytest y Playwright, puedes grabar videos de tus pruebas para obtener la máxima visibilidad de su ejecución. Allure Report te permite ver esos videos junto con otros tipos de adjuntos (capturas de pantalla, texto, documentos, tablas) dentro del caso de prueba correspondiente, proporcionando al lector la mayor cantidad de datos posibles para resolver fallos.