Primeros pasos con Allure AVA
Genera reportes HTML atractivos usando Allure Report y tus pruebas de AVA.
Configuración
1. Prepara tu proyecto
Asegúrate de que Node.js esté instalado.
Allure AVA requiere AVA 8 o superior. AVA 8 requiere Node.js
^22.20,^24.12o>=26.Abre una terminal y ve al directorio del proyecto. Por ejemplo:
bashcd /home/user/myprojectAsegúrate de que Allure Report esté instalado. Si no lo está, sigue las instrucciones de instalación. Ten en cuenta que Allure Report requiere Java.
Instala la integración de Allure AVA:
bashnpm install --save-dev allure-ava avabashyarn add --dev allure-ava avabashpnpm add -D allure-ava avaLlama a
installAllure()desde tu archivo de configuración de AVA.Para una configuración ESM (
ava.config.mjs):js// ava.config.mjs import { installAllure } from "allure-ava"; await installAllure({ resultsDir: "allure-results", }); export default {};Si tu proyecto no usa
"type": "module"en supackage.json, mantén la configuración en CommonJS — nombra el archivoava.config.jsy exporta una fábrica async:js// ava.config.js module.exports = async () => { const { installAllure } = await import("allure-ava"); await installAllure({ resultsDir: "allure-results", }); return {}; };Ten en cuenta que AVA solo lee
ava.config.jsyava.config.mjs; un archivo llamadoava.config.cjsse ignora silenciosamente.Tus archivos de prueba no necesitan ningún cambio. Opcionalmente, puedes especificar
resultsDiry otras opciones. Consulta Configuración de Allure AVA para más detalles.TIP
Si las pruebas se ejecutan pero el directorio de resultados no se crea y la consola imprime
no test runtime is found, AVA no cargó tu archivo de configuración — revisa su nombre y ubicación.
2. Ejecuta pruebas
Ejecuta tus pruebas de AVA de la misma manera que lo harías normalmente:
npx avaEsto guardará los datos necesarios en allure-results u otro directorio, según la configuración. Si el directorio ya existe, se agregarán nuevos archivos a los existentes para que un futuro reporte se base en todos ellos.
Las pruebas declaradas con test.skip() o test.todo(), así como las pruebas excluidas por condiciones de test.skipIf() y test.runIf(), aparecen en el reporte con el estado Omitido.
Las pruebas declaradas con test.failing() siguen la semántica propia de AVA: cuando una prueba de este tipo falla como se espera, cuenta como exitosa y aparece en el reporte con el estado Aprobado; si inesperadamente aprueba, se reporta como Roto con el error de AVA "Test was expected to fail, but succeeded".
Si un proceso worker de AVA se bloquea, excede el tiempo o termina inesperadamente, las pruebas afectadas aparecen en el reporte con el estado Roto.
Puedes seguir pasando argumentos habituales de la CLI de AVA:
npx ava test/**/*.test.js --match "inicio de sesión"3. Genera un reporte
Finalmente, convierte los resultados de prueba en un reporte HTML. Esto se puede hacer con uno de los siguientes comandos:
allure generateprocesa los resultados de prueba y guarda un reporte HTML en el directorioallure-report. Para ver el reporte, usa el comandoallure open.allure servecrea el mismo reporte queallure generate, y luego abre automáticamente la página principal del reporte en un navegador web.
Escribir pruebas
La integración de Allure AVA amplía las funciones estándar de reporte de AVA proporcionando capacidades adicionales para crear pruebas más informativas y estructuradas. Esta sección destaca las principales mejoras que puedes utilizar:
- Anotación de metadatos: Enriquecer los reportes de prueba con descripciones, enlaces y otros metadatos.
- Organización de pruebas: Estructura tus pruebas en jerarquías claras para mejorar la legibilidad y organización, consulta organizar pruebas.
- División en pasos: Divide las pruebas en pasos de prueba más pequeños para facilitar la comprensión y el mantenimiento.
- Pruebas parametrizadas: Describe claramente los parámetros para pruebas parametrizadas y especifica diferentes escenarios.
- Establecer etiquetas globalmente: Usa variables de entorno para establecer metadatos y otras etiquetas.
- Adjuntos: Captura archivos y otros contenidos durante la ejecución de las pruebas.
- Selección de pruebas: Usa un archivo de plan de pruebas para seleccionar qué pruebas ejecutar, permitiendo una ejecución flexible.
- Detalles del entorno: Incluye información detallada del entorno para acompañar el reporte de prueba.
En la mayoría de los casos, Allure AVA ofrece dos formas diferentes de usar una función: la API de Runtime y la API de Metadatos.
API de Runtime: utiliza las funciones de Allure para agregar ciertos datos al resultado de prueba durante su ejecución. Este enfoque permite construir los datos dinámicamente.
Ten en cuenta que se recomienda llamar a las funciones de Allure lo más cerca posible del inicio de la prueba. Así, los datos se agregarán incluso si la prueba falla temprano.
API de Metadatos: agrega una etiqueta de metadatos (que comienza con
@allure.) en el nombre de la prueba. Allure AVA la extraerá y actualizará los datos del resultado de prueba en consecuencia. Al usar este enfoque, los datos se garantizan independientemente de cómo se ejecute la prueba.
Agregar metadatos
Allure te permite enriquecer tus reportes con una variedad de metadatos. Esta información adicional proporciona contexto y detalles para cada prueba, mejorando la utilidad del reporte. Consulta la sección de referencia de metadatos para una lista exhaustiva de lo que se puede agregar.
import * as allure from "allure-js-commons";
import test from "ava";
test("Test Authentication", async (t) => {
await allure.displayName("Test Authentication");
await allure.owner("John Doe");
await allure.tags("Web interface", "Authentication");
await allure.severity("critical");
// ...
t.pass();
});import test from "ava";
test(
"Test Authentication" +
" @allure.label.owner:JohnDoe" +
" @allure.label.tag:WebInterface" +
" @allure.label.tag:Authentication" +
" @allure.label.severity:critical",
(t) => {
// ...
t.pass();
},
);Organizar pruebas
Como se describe en Mejorar la navegación en tu reporte de pruebas, Allure admite múltiples formas de organizar las pruebas en estructuras jerárquicas.
Para especificar la ubicación de una prueba en la jerarquía basada en comportamiento:
import * as allure from "allure-js-commons";
import test from "ava";
test("Test Authentication", async (t) => {
await allure.epic("Web interface");
await allure.feature("Essential features");
await allure.story("Authentication");
// ...
t.pass();
});import test from "ava";
test(
"Test Authentication" +
" @allure.label.epic:WebInterface" +
" @allure.label.feature:EssentialFeatures" +
" @allure.label.story:Authentication",
(t) => {
// ...
t.pass();
},
);Para especificar la ubicación de una prueba en la jerarquía basada en suite:
import * as allure from "allure-js-commons";
import test from "ava";
test("Test Authentication", async (t) => {
await allure.parentSuite("Tests for web interface");
await allure.suite("Tests for essential features");
await allure.subSuite("Tests for authentication");
// ...
t.pass();
});import test from "ava";
test(
"Test Authentication" +
" @allure.label.parentSuite:TestsForWebInterface" +
" @allure.label.suite:TestsForEssentialFeatures" +
" @allure.label.subSuite:TestsForAuthentication",
(t) => {
// ...
t.pass();
},
);Dividir una prueba en pasos
Para crear pasos y subpasos, puedes usar la función step(), consulta la referencia.
import * as allure from "allure-js-commons";
import { Status } from "allure-js-commons";
import test from "ava";
test("Test Authentication", async (t) => {
await allure.step("Paso 1", async () => {
await allure.step("Subpaso 1", async (ctx) => {
await ctx.parameter("foo", "1");
// ...
});
await allure.step("Subpaso 2", async (ctx) => {
await ctx.parameter("foo", "2");
// ...
});
});
await allure.logStep("Paso 2", Status.SKIPPED);
t.pass();
});Describir pruebas parametrizadas
Para implementar el patrón de pruebas parametrizadas en AVA, escribe la prueba dentro de un bucle y usa los parámetros variables tanto en el título como en el cuerpo. Cada iteración se trata como una ejecución de prueba separada por Allure Report.
Para mostrar el valor de un parámetro en el reporte de prueba, pásalo a la función parameter().
import * as allure from "allure-js-commons";
import test from "ava";
for (const login of ["johndoe", "[email protected]"]) {
test(`Test Authentication as ${login}`, async (t) => {
await allure.parameter("login", login);
await allure.parameter("time", new Date().toUTCString(), { excluded: true });
// ...
t.pass();
});
}Establecer etiquetas globalmente
Cualquier etiqueta, incluidas las personalizadas, se puede establecer mediante variables de entorno en tu sistema operativo. Aquí tienes un ejemplo:
export ALLURE_LABEL_epic=WebInterface
npx ava$Env:ALLURE_LABEL_epic = "WebInterface"
npx avaAdjuntar archivos
En los reportes de Allure, tienes la capacidad de adjuntar varios tipos de archivos, lo que puede mejorar considerablemente la comprensión del reporte. Además, cualquier mensaje registrado con el t.log() integrado de AVA se agrega automáticamente al resultado de prueba (o al fixture correspondiente, cuando se registra en un hook) como un adjunto de texto llamado "AVA logs".
Para instrucciones detalladas sobre cómo implementar adjuntos, consulta la sección de adjuntos en la referencia de Allure AVA.
import * as allure from "allure-js-commons";
import { ContentType } from "allure-js-commons";
import test from "ava";
test("Test Authentication", async (t) => {
// ...
await allure.attachment("Archivo de texto", "Este es el contenido del archivo.", ContentType.TEXT);
await allure.attachmentPath("Captura de pantalla", "/path/to/image.png", {
contentType: ContentType.PNG,
fileExtension: "png",
});
t.pass();
});Seleccionar pruebas mediante un archivo de plan de pruebas
Si la variable de entorno ALLURE_TESTPLAN_PATH está definida y apunta a un archivo existente, AVA solo ejecutará las pruebas listadas en ese archivo.
Las pruebas pueden coincidir de dos maneras:
- Por selector — usando el formato
path/to/file.test.js#test title. La ruta es relativa a la raíz del proyecto (el directorio más cercano con unpackage.json), y el título es el nombre de la prueba sin las etiquetas de metadatos@allure.*. - Por Allure ID — usando la etiqueta de metadatos
@allure.id:⟨VALOR⟩en el nombre de la prueba.
Aquí tienes un ejemplo de cómo ejecutar pruebas según un archivo llamado testplan.json:
export ALLURE_TESTPLAN_PATH=testplan.json
npx ava$Env:ALLURE_TESTPLAN_PATH = "testplan.json"
npx avaInformación del entorno
Para la página principal del reporte, puedes recopilar diversa información sobre el entorno en el que se ejecutaron las pruebas. Para hacerlo, edita el objeto environmentInfo en la configuración.
Por ejemplo, es buena idea registrar la versión del sistema operativo y la versión de Node.js. Esto puede ayudar al lector futuro a investigar errores que solo se reproducen en ciertos entornos.
// ava.config.mjs
import { installAllure } from "allure-ava";
import * as os from "node:os";
await installAllure({
environmentInfo: {
os_platform: os.platform(),
os_release: os.release(),
os_version: os.version(),
node_version: process.version,
},
});
export default {};