Referencia de Allure Vitest
Estas son las funciones que puedes usar para integrar tus pruebas de Vitest con Allure.
En la mayoría de los casos, Allure Vitest proporciona dos formas diferentes de usar una característica: la API en tiempo de ejecución y la API de metadatos.
API en tiempo de ejecución: usa las funciones de Allure para agregar ciertos datos al resultado de la 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. De esta manera, los datos se agregarán incluso si la prueba falla temprano.
API de metadatos: agrega una etiqueta de metadatos (comenzando con
@
) en el nombre de la prueba. Allure Vitest la extraerá y actualizará los datos del resultado de la prueba en consecuencia. Al usar este enfoque, los datos se agregarán independientemente de cómo se ejecute la prueba.
Metadatos
Asigna la descripción, enlaces y otros metadatos a una prueba.
Título
allure.displayName(name: string): PromiseLike<void>
Establece el título de la prueba.
import * as allure from "allure-js-commons";
import { test } from "vitest";
test("Test de autenticación", async () => {
await allure.displayName("¡Prueba de Autenticación!");
// ...
});
Description
allure.description(markdown: string): PromiseLike<void>
Establece la descripción de la prueba. Se permite el formato Markdown. Cualquier formato HTML, si está presente, será eliminado por razones de seguridad.
import * as allure from "allure-js-commons";
import { test } from "vitest";
test("Test Authentication", async () => {
await allure.description("This test attempts to log into the website.");
// ...
});
Owner
allure.owner(name: string): PromiseLike<void>
@allure.label.owner:⟨VALUE⟩
Establece el propietario de la prueba.
import * as allure from "allure-js-commons";
import { test } from "vitest";
test("Test Authentication", async () => {
await allure.owner("John Doe");
// ...
});
import { test } from "vitest";
test("Test Authentication @allure.label.owner:JohnDoe", async () => {
// ...
});
Tag
allure.tag(name: string): PromiseLike<void>
allure.tags(...tagsList: string[]): PromiseLike<void>
@allure.label.tag:⟨VALUE⟩
Establece los tags de la prueba.
import * as allure from "allure-js-commons";
import { test } from "vitest";
test("Test Authentication", async () => {
await allure.tag("New UI");
await allure.tags("Essentials", "Authentication");
// ...
});
import { test } from "vitest";
test("Test Authentication @allure.label.tag:WebInterface @allure.label.tag:Authentication", async () => {
// ...
});
Severity
allure.severity(name: string): PromiseLike<void>
@allure.label.severity:⟨VALUE⟩
Establece la severidad de la prueba.
Los valores permitidos son: “trivial”, “minor”, “normal”, “critical”, and “blocker”.
import * as allure from "allure-js-commons";
import { Severity } from "allure-js-commons";
import { test } from "vitest";
test("Test Authentication", async () => {
await allure.severity(Severity.CRITICAL);
// ...
});
import { test } from "vitest";
test("Test Authentication @allure.label.severity:critical", async () => {
// ...
});
Label
allure.label(name: LabelName | string, value: string): PromiseLike<void>
allure.labels(...labelsList: Label[]): PromiseLike<void>
@allure.label.⟨NAME⟩:⟨VALUE⟩
Establece una etiqueta arbitraria para la prueba. Esta es la implementación subyacente para muchas de las otras funciones de Allure.
Puedes llamar a label()
varias veces para crear un arreglo de valores bajo el nombre dado.
import * as allure from "allure-js-commons";
import { test } from "vitest";
test("Test Authentication", async () => {
await allure.label("microservice", "UI");
// ...
});
import { test } from "vitest";
test("Test Authentication @allure.label.microservice:UI", async () => {
// ...
});
ID
@allure.id:⟨VALUE⟩
Establece el ID de la prueba.
import { test } from "vitest";
test("Test Authentication @allure.id:123", async () => {
// ...
});
Link
allure.link(url: string, name?: string, type?: LinkType | string): PromiseLike<void>
allure.links(...linksList: Link[]): PromiseLike<void>
allure.issue(url: string, name?: string): PromiseLike<void>
allure.tms(url: string, name?: string): PromiseLike<void>
Agrega un enlace relacionado con la prueba.
Según el type
(que puede ser cualquier cadena, el valor predeterminado es “link”), Allure intentará cargar una plantilla de enlace correspondiente para procesar la URL, según lo definido por la opción de configuración links. Si no se encuentra una plantilla para el tipo dado, la URL se deja sin modificar.
Si la URL no comienza con “http” o “https”, se procesará según la opción de configuración links.
El name
se utilizará como texto del enlace. Si se omite, se usará la URL en su lugar.
Para conveniencia, Allure proporciona dos funciones abreviadas con tipos de enlace preseleccionados: issue
y tms
.
import * as allure from "allure-js-commons";
import { test } from "vitest";
test("Test Authentication", async () => {
await allure.issue("AUTH-123", "Related issue");
await allure.tms("TMS-456", "Related TMS issue");
await allure.link("JIRA-777", "Related Jira issue", "jira");
await allure.link("https://example.com/", "Project website");
// ...
});
Jerarquía basada en el comportamiento
allure.epic(name: string): PromiseLike<void>
allure.feature(name: string): PromiseLike<void>
allure.story(name: string): PromiseLike<void>
@allure.label.epic:⟨VALUE⟩
@allure.label.feature:⟨VALUE⟩
@allure.label.story:⟨VALUE⟩
Asigna nombres de épicas, características o historias de usuario para una prueba, como parte de la jerarquía basada en el comportamiento de Allure.
import * as allure from "allure-js-commons";
import { test } from "vitest";
test("Test Authentication", async () => {
await allure.epic("Web interface");
await allure.feature("Essential features");
await allure.story("Authentication");
// ...
});
import { test } from "vitest";
test(
"Test Authentication" +
" @allure.label.epic:WebInterface" +
" @allure.label.feature:EssentialFeatures" +
" @allure.label.story:Authentication",
async () => {
// ...
},
);
Jerarquía basada en la suite
allure.parentSuite(name: string): PromiseLike<void>
allure.suite(name: string): PromiseLike<void>
allure.subSuite(name: string): PromiseLike<void>
@allure.label.parentSuite:⟨VALUE⟩
@allure.label.suite:⟨VALUE⟩
@allure.label.subSuite:⟨VALUE⟩
Asigna los nombres de suite principal, suite o sub-suite para una prueba, como parte de la jerarquía basada en suites de Allure.
Esto sobrescribe los niveles correspondientes de la jerarquía predeterminada de suites, que Allure Vitest crea en función de los argumentos de describe()
.
import * as allure from "allure-js-commons";
import { test } from "vitest";
test("Test Authentication", async () => {
await allure.parentSuite("Tests for web interface");
await allure.suite("Tests for essential features");
await allure.subSuite("Tests for authentication");
// ...
});
import { test } from "vitest";
test(
"Test Authentication" +
" @allure.label.parentSuite:TestsForWebInterface" +
" @allure.label.suite:TestsForEssentialFeatures" +
" @allure.label.subSuite:TestsForAuthentication",
async () => {
// ...
},
);
Pasos de prueba
allure.step<T = void>(name: string, body: (context: StepContext) => T | PromiseLike<T>): PromiseLike<T>
allure.logStep(name: string, status?: Status, error?: Error): PromiseLike<void>
Define un paso de prueba o sub-paso con el nombre
dado.
La función step()
es asincrónica, y acepta una función anónima asincrónica como su segundo argumento. Fíjate en las palabras clave async
y await
en el siguiente ejemplo.
La función anónima puede aceptar ningún argumento o un solo argumento de la clase StepContext
. Este objeto proporciona los siguientes métodos:
displayName()
— sobrescribe el nombre del paso durante su ejecución.parameter()
— indica parámetros arbitrarios utilizados para el paso. Las firmas disponibles de este método son similares a la implementación a nivel de prueba, consulta Pruebas parametrizadas.
Para crear un paso sin cuerpo, llama a la función logStep()
que acepta un nombre y un estado de paso opcional.
import * as allure from "allure-js-commons";
import { Status } from "allure-js-commons";
import { test } from "vitest";
test("Test Authentication", async () => {
await allure.step("Step 1", async () => {
await allure.step("Sub-step 1", async (ctx) => {
await ctx.parameter("foo", "1");
// ...
});
await allure.step("Sub-step 2", async (ctx) => {
await ctx.parameter("foo", "2");
// ...
});
});
await allure.logStep("Step 2", Status.SKIPPED);
});
Pruebas parametrizadas
allure.parameter(name: string, value: string, options?: ParameterOptions): PromiseLike<void>
El patrón de pruebas parametrizadas en Vitest se puede implementar llamando a la función test.each()
o incluso ejecutando una simple test()
dentro de un bucle. En ambos casos, Allure Report reconoce cada iteración como una ejecución de prueba separada.
Los valores que distinguen una iteración de otra se llaman parámetros de prueba. Para mostrar un valor de parámetro en el informe de la prueba, pásalo a la función parameter()
.
El argumento options
, si se proporciona, debe ser un objeto con dos propiedades opcionales excluded
y mode
.
Si
excluded
está configurado como verdadero, Allure no utilizará el parámetro al comparar el resultado actual de la prueba con el anterior en el historial. Consulta Problema común: los reintentos de una prueba se muestran como pruebas separadas.El
mode
afecta cómo se mostrará el parámetro en el informe. Las opciones disponibles son:"default"
(igual que no especificar ningún modo) — el parámetro y su valor se mostrarán en una tabla junto con otros parámetros."masked"
— el parámetro se mostrará en la tabla, pero su valor será ocultado. Usa este modo para contraseñas, tokens y otros parámetros sensibles."hidden"
— el parámetro y su valor no se mostrarán en el informe de la prueba.
Ten en cuenta que, incluso cuando uses el modo
"masked"
o"hidden"
, aún es posible extraer el valor del directorioallure_results
si lo publicas.
import * as allure from "allure-js-commons";
import { test } from "vitest";
for (const login of ["johndoe", "[email protected]"]) {
test(`Test Authentication as ${login}`, async () => {
await allure.parameter("login", login);
await allure.parameter("time", new Date().toUTCString(), { excluded: true });
// ...
});
}
import * as allure from "allure-js-commons";
import { test } from "vitest";
test.each(["johndoe", "[email protected]"])("Test Authentication as %s", async (login) => {
await allure.parameter("login", login);
await allure.parameter("time", new Date().toUTCString(), { excluded: true });
// ...
});
Archivos adjuntos
allure.attachment(name: string, content: Buffer | string, options: ContentType | string | AttachmentOptions): PromiseLike<void>
allure.attachmentPath(name: string, path: string, options: ContentType | string | Omit<AttachmentOptions, "encoding">): PromiseLike<void>
Agrega un adjunto al resultado de la prueba bajo el nombre
dado. Pasa ya sea el contenido
o la ruta
desde la cual se leerán los datos.
El argumento options
controla el tipo de medio del contenido y la extensión del nombre del archivo que se utilizará si un usuario descarga el adjunto desde el informe de la prueba. Puedes especificar ambas opciones en un objeto (como se muestra para el adjunto de imagen a continuación) o solo especificar el tipo de medio y dejar que Allure deduzca la extensión de nombre de archivo apropiada automáticamente (como se muestra para el adjunto de texto a continuación). En cualquiera de los casos, el tipo de medio puede ser un valor de la enumeración ContentType
o cualquier cadena.
import * as allure from "allure-js-commons";
import { ContentType } from "allure-js-commons";
import { test } from "vitest";
test("Test Authentication", async () => {
// ...
await allure.attachment("Text file", "This is the file content.", ContentType.TEXT);
await allure.attachmentPath("Screenshot", "/path/to/image.png", {
contentType: ContentType.PNG,
fileExtension: "png",
});
});