Referencia de Allure para TestCafe
Estas son las funciones y convenciones que puedes usar para integrar tus pruebas de TestCafe con Allure. Para una introducción a los tres estilos de API (API en tiempo de ejecución, API Meta y anotaciones en el título), consulta Primeros pasos.
Para etiquetas y enlaces, la meta a nivel de prueba sobrescribe la meta a nivel de fixture para la misma clave. Esto te permite establecer valores predeterminados en un fixture y sobrescribirlos en pruebas individuales.
Metadatos
Asigna la descripción, enlaces y otros metadatos de una prueba.
Descripción
allure.description(markdown: string): Promise<void>
Establece la descripción de la prueba. Se permite formato Markdown.
const { description } = require("allure-js-commons");
fixture`Authentication`.page`https://example.com/login`;
test("sign in", async () => {
await description("Esta prueba verifica que un usuario puede iniciar sesión con credenciales válidas.");
// ...
});Para establecer una descripción en HTML, usa allure.descriptionHtml(html: string).
Nombre para mostrar
allure.displayName(name: string): Promise<void>
Sobrescribe el nombre de la prueba tal como aparece en el reporte. Esto no afecta la identidad de la prueba ni el seguimiento del historial — solo la etiqueta mostrada.
const { displayName } = require("allure-js-commons");
fixture`Authentication`.page`https://example.com/login`;
test("sign in", async () => {
await displayName("Iniciar sesión con nombre de usuario y contraseña");
// ...
});Propietario
allure.owner(name: string): Promise<void>- Meta:
"allure.label.owner": "<value>" - Título:
@allure.label.owner=<value>
Establece el propietario de la prueba.
const { owner } = require("allure-js-commons");
fixture`Authentication`.page`https://example.com/login`;
test("sign in", async () => {
await owner("alice");
// ...
});fixture`Authentication`.page`https://example.com/login`;
test.meta({ "allure.label.owner": "alice" })("sign in", async (t) => {
// ...
});fixture`Authentication`.page`https://example.com/login`;
test("sign in @allure.label.owner=alice", async () => {
// ...
});Tag
allure.tag(name: string): Promise<void>allure.tags(...names: string[]): Promise<void>- Meta:
"allure.label.tag": "<value>"o"allure.label.tag": ["<value1>", "<value2>"] - Título:
@allure.label.tag=<value>(repetir para múltiples tags)
Establece los tags de la prueba.
const { tag, tags } = require("allure-js-commons");
fixture`Authentication`.page`https://example.com/login`;
test("sign in", async () => {
await tag("smoke");
await tags("authentication", "web");
// ...
});fixture`Authentication`.page`https://example.com/login`;
test.meta({ "allure.label.tag": ["smoke", "authentication", "web"] })("sign in", async (t) => {
// ...
});fixture`Authentication`.page`https://example.com/login`;
test(
"sign in" +
" @allure.label.tag=smoke" +
" @allure.label.tag=authentication" +
" @allure.label.tag=web",
async () => {
// ...
},
);Severidad
allure.severity(level: string): Promise<void>- Meta:
"allure.label.severity": "<value>" - Título:
@allure.label.severity=<value>
Establece la severidad de la prueba.
Los valores permitidos son: "trivial", "minor", "normal", "critical" y "blocker".
const { severity, Severity } = require("allure-js-commons");
fixture`Authentication`.page`https://example.com/login`;
test("sign in", async () => {
await severity(Severity.CRITICAL);
// ...
});fixture`Authentication`.page`https://example.com/login`;
test.meta({ "allure.label.severity": "critical" })("sign in", async (t) => {
// ...
});Etiqueta
allure.label(name: string, value: string): Promise<void>allure.labels(...labels: Label[]): Promise<void>- Meta:
"allure.label.<name>": "<value>" - Título:
@allure.label.<name>=<value>
Establece una etiqueta arbitraria para la prueba. Esta es la función base utilizada por la mayoría de los otros helpers de etiquetas de Allure.
Puedes llamar a label() varias veces con el mismo nombre para asignar varios valores.
const { label } = require("allure-js-commons");
fixture`Authentication`.page`https://example.com/login`;
test("sign in", async () => {
await label("microservice", "auth-service");
// ...
});fixture`Authentication`.page`https://example.com/login`;
test.meta({ "allure.label.microservice": "auth-service" })("sign in", async (t) => {
// ...
});ID
allure.allureId(id: string): Promise<void>- Meta:
"allure.id": "<value>" - Título:
@allure.id=<value>
Establece el Allure ID de la prueba. Se utiliza para filtrado por plan de pruebas para seleccionar pruebas por ID. El filtrado por plan de pruebas se ejecuta antes de que se ejecute el cuerpo de la prueba, por lo que solo las formas de clave meta y anotación en el título son efectivas para la selección basada en el plan — la función en tiempo de ejecución allureId() se ejecuta demasiado tarde para influir en el filtrado.
const { allureId } = require("allure-js-commons");
fixture`Authentication`.page`https://example.com/login`;
test("sign in", async () => {
await allureId("42");
// ...
});fixture`Authentication`.page`https://example.com/login`;
test.meta({ "allure.id": "42" })("sign in", async (t) => {
// ...
});fixture`Authentication`.page`https://example.com/login`;
test("sign in @allure.id=42", async () => {
// ...
});Enlace
allure.link(url: string, name?: string, type?: string): Promise<void>allure.links(...links: Link[]): Promise<void>allure.issue(url: string, name?: string): Promise<void>allure.tms(url: string, name?: string): Promise<void>- Meta:
"allure.link.<type>": "<url-or-id>"o"allure.link.<type>": ["<url1>", "<url2>"] - Título:
@allure.link.<type>=<url-or-id>
Agrega un enlace relacionado con la prueba.
Según el type (que puede ser cualquier cadena, por defecto "link"), Allure intentará cargar una plantilla de enlace correspondiente definida por la opción de configuración links. Si no se encuentra una plantilla o si el valor ya es una URL completa, se deja sin modificar.
Por conveniencia, Allure proporciona dos funciones abreviadas con tipos de enlace preseleccionados: issue y tms.
const { issue, tms, link } = require("allure-js-commons");
fixture`Authentication`.page`https://example.com/login`;
test("sign in", async () => {
await issue("AUTH-123", "Problema relacionado");
await tms("TMS-456", "Ticket TMS relacionado");
await link("https://example.com/docs/auth", "Documentación de Auth");
// ...
});fixture`Authentication`.page`https://example.com/login`.meta({
"allure.link.issue": "AUTH-123",
});
test.meta({
"allure.link.tms": ["TMS-456", "TMS-789"],
})("sign in", async (t) => {
// ...
});Identidad de la prueba
allure.historyId(id: string): Promise<void>allure.testCaseId(id: string): Promise<void>
Sobrescribe los identificadores que Allure utiliza para asociar esta prueba entre ejecuciones al calcular el historial y agrupar reintentos.
historyIdreemplaza el valor calculado que se usa para buscar resultados anteriores. Úsalo cuando la misma prueba lógica se ejecuta con diferentes nombres o parámetros entre ejecuciones.testCaseIdreemplaza el identificador estable que se usa para agrupar reintentos. Los resultados que comparten untestCaseIdse tratan como reintentos de la misma prueba.
const { historyId, testCaseId } = require("allure-js-commons");
fixture`Authentication`.page`https://example.com/login`;
test("sign in", async () => {
await historyId("auth-signin-v2");
await testCaseId("TC-1001");
// ...
});Jerarquía basada en comportamiento
allure.epic(name: string): Promise<void>allure.feature(name: string): Promise<void>allure.story(name: string): Promise<void>- Meta:
"allure.label.epic","allure.label.feature","allure.label.story" - Título:
@allure.label.epic=<value>,@allure.label.feature=<value>,@allure.label.story=<value>
Asigna nombres de epics, features o historias de usuario para una prueba, como parte de la jerarquía basada en comportamiento de Allure.
const { epic, feature, story } = require("allure-js-commons");
fixture`Authentication`.page`https://example.com/login`;
test("sign in", async () => {
await epic("Web interface");
await feature("Essential features");
await story("Authentication");
// ...
});fixture`Authentication`.page`https://example.com/login`.meta({
"allure.label.epic": "Web interface",
"allure.label.feature": "Essential features",
});
test.meta({
"allure.label.story": "Authentication",
})("sign in", async (t) => {
// ...
});Un patrón común es establecer epic y feature en el fixture para que todas las pruebas del archivo las compartan, y sobrescribir story por prueba.
Jerarquía basada en suite
allure.parentSuite(name: string): Promise<void>allure.suite(name: string): Promise<void>allure.subSuite(name: string): Promise<void>- Meta:
"allure.label.parentSuite","allure.label.suite","allure.label.subSuite" - Título:
@allure.label.parentSuite=<value>, etc.
Asigna los nombres de parent suite, suite o sub-suite para una prueba, como parte de la jerarquía basada en suite de Allure.
const { parentSuite, suite, subSuite } = require("allure-js-commons");
fixture`Authentication`.page`https://example.com/login`;
test("sign in", async () => {
await parentSuite("Pruebas para la interfaz web");
await suite("Pruebas para funciones esenciales");
await subSuite("Pruebas para autenticación");
// ...
});fixture`Authentication`.page`https://example.com/login`.meta({
"allure.label.parentSuite": "Pruebas para la interfaz web",
"allure.label.suite": "Pruebas para funciones esenciales",
"allure.label.subSuite": "Pruebas para autenticación",
});
test("sign in", async (t) => {
// ...
});fixture`Authentication`.page`https://example.com/login`;
test(
"sign in" +
" @allure.label.parentSuite=TestsForWebInterface" +
" @allure.label.suite=TestsForEssentialFeatures" +
" @allure.label.subSuite=TestsForAuthentication",
async () => {
// ...
},
);Pasos de prueba
allure.step<T>(name: string, body: (context: StepContext) => T | Promise<T>): Promise<T>allure.logStep(name: string, status?: Status, error?: Error): Promise<void>
Define un paso de prueba con el name dado.
Hay dos formas de definir un paso:
Pasos lambda
Pasa una función a
allure.step(). La función recibe un objetoStepContextcon dos métodos:displayName(name: string)— sobrescribe el nombre del paso mientras se ejecuta.parameter(name, value, mode?)— registra un parámetro para el paso.modepuede ser"default","masked"o"hidden".
Los pasos de acción de TestCafe creados automáticamente se anidan dentro de cualquier paso lambda que los englobe.
Pasos instantáneos (no-op)
allure.logStep()agrega un paso instantáneo sin cuerpo. Útil para anotaciones tipo log dentro de una prueba. El argumento opcionalstatuspor defecto esStatus.PASSED. Pasa un objetoErrorcomo tercer argumento para incluir su mensaje en el paso.
const { step, logStep, Status } = require("allure-js-commons");
fixture`Authentication`.page`https://example.com/login`;
test("sign in", async (t) => {
await step("Rellenar el formulario", async (ctx) => {
await ctx.displayName("Rellenar formulario de credenciales");
await ctx.parameter("environment", "staging");
await t.typeText("#login", "demo-user");
await t.typeText("#password", "secret");
});
await step("Enviar el formulario", async () => {
await t.click("#submit");
});
await logStep("Redirección verificada", Status.PASSED);
});Pruebas parametrizadas
allure.parameter(name: string, value: string, options?: ParameterOptions): Promise<void>
Registra un par de parámetro name/value para la prueba. Consulta Pruebas parametrizadas para más detalles.
El argumento opcional options es un objeto con dos propiedades:
excluded— si estrue, Allure excluye este parámetro al comparar la prueba con su historial. Úsalo para marcas de tiempo u otros valores que cambian en cada ejecución. Consulta Error común: los reintentos de una prueba se muestran como pruebas separadas.mode— controla cómo aparece el parámetro en el reporte:"default"— se muestra en una tabla junto con otros parámetros."masked"— se muestra en la tabla, pero el valor está oculto. Úsalo para contraseñas y tokens."hidden"— no se muestra en el reporte.
const { parameter } = require("allure-js-commons");
fixture`Authentication`.page`https://example.com/login`;
for (const login of ["johndoe", "[email protected]"]) {
test(`sign in as ${login}`, async () => {
await parameter("login", login);
await parameter("timestamp", new Date().toISOString(), { excluded: true });
// ...
});
}Meta simple como parámetros
Cualquier clave en un objeto meta de fixture o prueba que no comience con "allure." y cuyo valor sea un escalar (string, number, boolean o bigint) se agrega automáticamente al resultado de prueba como parámetro. Esto significa que puedes anotar variantes de prueba directamente en meta sin llamar a parameter() en el cuerpo de la prueba:
fixture`Authentication`.page`https://example.com/login`;
test.meta({ env: "staging", shard: 1 })("sign in", async (t) => {
// "env" y "shard" aparecen como parámetros en el reporte
// ...
});Adjuntos
allure.attachment(name: string, content: Buffer | string, options: ContentType | string | AttachmentOptions): Promise<void>allure.attachmentPath(name: string, path: string, options: ContentType | string | Omit<AttachmentOptions, "encoding">): Promise<void>
Agrega un adjunto al resultado de prueba bajo el name dado. Pasa el content o el path desde el cual se leerán los datos.
El argumento options controla el tipo de medio y la extensión de archivo utilizada si un usuario descarga el adjunto. Puedes especificar ambos en un objeto o solo el tipo de medio y dejar que Allure infiera la extensión.
const { attachment, attachmentPath } = require("allure-js-commons");
const { ContentType } = require("allure-js-commons");
const path = require("node:path");
fixture`Authentication`.page`https://example.com/login`;
test("sign in", async () => {
// ...
await attachment("Respuesta del servidor", JSON.stringify({ status: "ok" }), "application/json");
await attachmentPath("Archivo de configuración", path.join(__dirname, "config.txt"), ContentType.TEXT);
});Capturas de pantalla automáticas
Cuando TestCafe captura capturas de pantalla (por ejemplo, al fallar una prueba o mediante t.takeScreenshot()), el reporter las adjunta automáticamente. Las capturas de pantalla se adjuntan al paso de acción al que pertenecen cuando TestCafe proporciona la asociación; de lo contrario, se adjuntan a nivel de prueba.
Videos automáticos
Cuando TestCafe graba videos, se adjuntan automáticamente al resultado de prueba correspondiente.
Referencia de la API Meta
La API Meta es una forma específica de TestCafe para asignar metadatos de Allure usando llamadas .meta() en fixture y prueba. Complementa la API en tiempo de ejecución y las anotaciones en el título.
| Clave meta | Efecto |
|---|---|
"allure.id" | Establece el Allure ID para la prueba |
"allure.label.<name>" | Agrega una etiqueta con el nombre dado; el valor puede ser string o array |
"allure.link.<type>" | Agrega un enlace del tipo dado; el valor puede ser una URL/ID o un array |
| Cualquier otra clave escalar | Se convierte en un parámetro visible en el reporte |
La meta a nivel de fixture se fusiona con la meta a nivel de prueba. Para la misma clave, la meta a nivel de prueba tiene prioridad.
Ejemplo combinando meta de fixture y de prueba:
fixture`Checkout`.page`https://example.com/checkout`.meta({
"allure.label.epic": "Storefront",
"allure.label.feature": "Checkout",
"allure.link.issue": "SHOP-100",
});
test.meta({
"allure.id": "42",
"allure.label.story": "Pay with card",
"allure.link.issue": "PAY-42", // sobrescribe el enlace de issue a nivel de fixture
env: "staging", // se convierte en parámetro
})("pay with card", async (t) => {
await t.expect(true).ok();
});Referencia de anotaciones en el título
Las anotaciones en el título usan @allure.<type>=<value> (o equivalentes @allure.<type>:<value>) incrustadas en el nombre de la prueba. El nombre limpio de la prueba mostrado en el reporte tiene estas anotaciones eliminadas.
Los valores que contienen espacios deben ir entre comillas ", ' o backticks:
test('sign in @allure.label.epic="Web interface" @allure.label.feature="Essential features"', async () => {
// ...
});| Anotación | Efecto |
|---|---|
@allure.id=<value> | Establece el Allure ID |
@allure.label.<name>=<value> | Agrega una etiqueta con el nombre dado |
@allure.link.<type>=<value> | Agrega un enlace del tipo dado |
fixture`Authentication`.page`https://example.com/login`;
test(
"sign in" +
" @allure.id=42" +
" @allure.label.severity=critical" +
" @allure.label.tag=smoke" +
" @allure.link.issue=AUTH-123",
async () => {
// nombre de prueba mostrado en el reporte: "sign in"
// ...
},
);