Ir al contenido

Vincular pruebas de Playwright con casos

Cada resultado va a un caso de prueba de Probara. Una prueba que nombra su caso queda vinculada a él; una prueba que no nombra ninguno se busca por su clave de automatización, y su caso se crea la primera vez que se envía. Vincula las pruebas por ID cuando sus casos ya existen en Probara, escritos a mano o importados.

FormaEjemploCuándo
Una anotación probara_casetest('pays', { annotation: { type: 'probara_case', description: 'SHOP-12' } }, ...)La forma habitual; funciona también con pruebas omitidas
Un ID de caso en el títulotest('SHOP-12 pays with a card', ...)Rápida, y visible en todos los informes
probara.id() en la pruebaprobara.id('SHOP-14')IDs que solo se conocen en tiempo de ejecución
tests/checkout.spec.ts
import { test } from '@playwright/test';
import { probara } from '@probara/playwright-reporter';
test.describe('checkout', () => {
test(
'pays with a card',
{ annotation: { type: 'probara_case', description: 'SHOP-12' } },
async () => {
// ...
},
);
test('SHOP-13 pays with a voucher', async () => {
// ...
});
test('pays with a gift card', async () => {
probara.id('SHOP-14');
});
test('shows the total', async () => {
// No case named: matched by its key, created the first time.
});
});

Probara recibe un resultado por prueba, cada uno con su caso, y la misma clave que tendría sin los IDs:

[
{
"caseDisplayId": "SHOP-12",
"automationKey": "checkout.spec.ts > checkout > pays with a card",
"title": "pays with a card"
},
{
"caseDisplayId": "SHOP-13",
"automationKey": "checkout.spec.ts > checkout > pays with a voucher",
"title": "pays with a voucher"
},
{
"caseDisplayId": "SHOP-14",
"automationKey": "checkout.spec.ts > checkout > pays with a gift card"
},
{ "automationKey": "checkout.spec.ts > checkout > shows the total" }
]

Una anotación acepta un ID o una lista separada por comas ('SHOP-12, SHOP-13'), y varias anotaciones se suman. Desde Playwright 1.42 van en los detalles de la prueba; una prueba también puede añadir una en tiempo de ejecución:

test.info().annotations.push({ type: 'probara_case', description: 'SHOP-12' });

Un ID en el título es un ID del proyecto al que se envía (o de uno de los projects) dentro del título de un describe o de una prueba, escrito SHOP-12 o SHOP_12, en cualquier parte del título. Se quita del título y de la clave, así que añadir uno nunca cambia una clave. Un ID de un proyecto que el reporter no conoce se queda en el título, como texto.

probara.id() acepta un ID o una lista, y añade una anotación probara_case al intento en curso. Una prueba que se omite antes de ejecutarse (test.skip('title', ...), o un describe omitido) nunca ejecuta su cuerpo: vincúlala con una anotación o con un ID en el título.

Los IDs son el ID visible del caso: el ID del Proyecto, un guion y el número que muestra Probara (SHOP-12). Un ID que Probara no conoce no se registra, y el registro lo nombra como sin coincidencia (solución de problemas).

Todas las fuentes cuentan: primero las anotaciones (en orden, probara.id() entre ellas) y después los IDs de los títulos, cada ID una vez. Una prueba vinculada a varios casos se envía una vez por caso, con la misma clave, y sus adjuntos se suben a cada resultado:

tests/login.spec.ts
import { test } from '@playwright/test';
test(
'SHOP-21 logs in',
{ annotation: { type: 'probara_case', description: 'SHOP-20, SHOP-21' } },
async () => {
// ...
},
);
[
{ "caseDisplayId": "SHOP-20", "automationKey": "login.spec.ts > logs in" },
{ "caseDisplayId": "SHOP-21", "automationKey": "login.spec.ts > logs in" }
]

Una prueba que no nombra ningún caso se busca por su clave de automatización: la misma clave encuentra el mismo caso en cada ejecución, y una clave nueva crea un caso nuevo. La clave se construye con:

ParteDe dónde saleEjemplo
ArchivoEl archivo de la prueba, relativo a rootDir (el de Playwright, por defecto)checkout.spec.ts
Ruta de títulosLos títulos de describe y después el de la prueba, sin los IDs de casocheckout > pays
Proyecto de PlaywrightNo forma parte de la clave. Se envía con cada resultado como su parámetro projectproject=chromium

Así, checkout.spec.ts > checkout > pays es la clave de esa prueba en todos los proyectos. Los proyectos comparten una clave, así que comparten un caso, con un resultado por cada ejecución de proyecto. El proyecto viaja con cada resultado como su parámetro project, y un caso que declare un parámetro project obtiene un caso de ejecución por proyecto. El proyecto es contexto: se muestra en el resultado y nunca se convierte en un parámetro de un caso que un reporte crea.

Las versiones anteriores del reporter ponían el proyecto en la clave. Este comportamiento necesita la versión del reporter que envía los parámetros aparte de la clave; un caso reportado con una clave anterior no coincide con ella.

El algoritmo es la clave de automatización v1 de @probara/core, congelada y compartida por todas las herramientas de Probara.

Cambia la clave (crea un caso nuevo)No cambia la clave
Renombrar una prueba, un describe o un archivoAñadir o quitar un ID de caso
Mover un archivoprobara.title() y probara.suite()
Renombrar un proyecto de Playwrightprobara.parameters()
Cambiar rootDir, o testDir, al que sigue el rootDir de PlaywrightLa versión de Playwright, el CI o el directorio desde el que ejecutas

Para conservar un caso tras un cambio de nombre, vincula la prueba por ID. Para revisar las claves antes de una refactorización, consulta comprobar qué se enviaría.

Una prueba cuya clave no coincide con ningún caso crea uno, con el nombre de la prueba, en una ruta de suites construida a partir del archivo y de los títulos de describe, bajo suiteUlid (la raíz del proyecto por defecto). probara.title() y probara.suite() eligen el nombre y la suite de un caso creado.

Con createMissingCases: false (PROBARA_CREATE_MISSING_CASES=false), una prueba así no registra nada y aparece en el registro como sin coincidencia: solo los casos existentes reciben resultados.

El reporter construye las claves que la CLI de Probara asigna al reporter JUnit de Playwright (--reporter=junit), y lee los mismos vínculos: las anotaciones probara_case (que el reporter JUnit escribe como propiedades) y los IDs de caso en los títulos. Un proyecto que importaba el JUnit XML de Playwright con probara import junit puede pasarse al reporter y conservar cada caso; los pasos están en migrar desde probara import junit.

Siguiente: nombra los casos que crea un informe, o envía a varios proyectos.