Ir al contenido

Reporter de Cypress

@probara/cypress-reporter es un reporter de Cypress que envía a Probara cada resultado de un cypress run: cada intento con su estado, su duración y su error, vinculado a su caso de prueba, con la captura de pantalla de cada fallo y los pasos, los adjuntos y los enlaces que añaden tus pruebas. Los casos que faltan se crean, y la ejecución se cierra cuando todo ha llegado.

Es de código abierto, está publicado en npm en la versión 0.1.0 y vive en el repositorio probara-sdk. Hasta la 1.0, una versión menor puede traer cambios incompatibles: fija la versión (actualizar el reporter).

  • Un resultado por intento, incluidos los retries de Cypress, con el veredicto del propio Cypress: it.skip y this.skip() se envían como omitidos, y también cada prueba que un hook fallido impidió ejecutar.
  • Las mismas claves de automatización que probara import junit sobre el JUnit XML del reporter junit de Cypress o de cypress-junit, así que al dejar la importación JUnit conservas cada caso y su historial.
  • Capturas de pantalla adjuntas al intento exacto para el que Cypress las tomó, y el vídeo de una spec en sus resultados fallidos con attachVideos.
  • Vinculación por un ID de caso en el título de una prueba o de un describe (SHOP-12 adds an item) o con probara.id(), y el navegador como parámetro browser de cada resultado, nunca en la clave.
  • Helpers de prueba que se ejecutan donde se ejecuta la spec: probara.step(), probara.attach(), probara.link(), probara.issue(), probara.parameters(), y el título, la suite, las etiquetas y los campos de un caso nuevo.
  • Salida de consola de cada prueba como adjuntos, y selección de pruebas: ejecuta solo las pruebas de una ejecución creada en Probara.
  • Ejecuciones con nombre, entorno, hito, plan de pruebas, configuraciones y etiquetas; una sola ejecución para todas las máquinas de un pipeline repartido.
  • Nunca rompe tu ejecución de pruebas. Un problema al reportar se registra, nunca se lanza, y cypress run sigue terminando con el número de sus propias pruebas fallidas. Lo que no se pudo enviar puede guardarse en un archivo y enviarse más tarde.
NecesitasPor qué
Node.js 22.12 o posteriorEl rango engines del paquete, para el Node.js que arranca cypress.
Cypress 15.10.0 o posteriorEl rango de peer: 15.10.0 es el primer Cypress con Cypress.expose(), que entrega al navegador sus ajustes. Probado en 16.1.1.
cypress runCypress solo construye un reporter en cypress run: cypress open no reporta nada.
Un plan de pago (Pro o Enterprise, o una prueba Pro)El envío de resultados desde CI no forma parte del plan Free. En Free, Probara responde 403 forbidden.
Un propietario o administrador de ProbaraSolo los propietarios y administradores crean y revocan tokens de aplicación.
El ID del Proyecto al que enviar los resultadosPor ejemplo SHOP: una letra mayúscula y después mayúsculas o dígitos.

El reporter se autentica con un token de aplicación: un token que pertenece a tu organización, no a una persona. No ocupa ningún puesto y sigue funcionando cuando la persona que lo creó se va.

  1. En Probara, abre Workspace › Integraciones y selecciona la tarjeta Cypress.
  2. Abre la pestaña Tokens de acceso y selecciona Crear un token de aplicación.
  3. Escribe un Nombre del token con el nombre de lo que lo usa (el repositorio o el pipeline) y selecciona Crear token.
  4. Selecciona Copiar token en Copia tu nuevo token. Solo se muestra una vez: guárdalo en ese momento como un secreto de CI llamado PROBARA_API_TOKEN.

La guía de la integración con Cypress cubre la tarjeta, cómo gestionar y revocar los tokens, y qué muestra Probara en las ejecuciones que crea un token de aplicación.

Ventana de terminal
npm install --save-dev @probara/cypress-reporter

Define el reporter como el reporter de e2e, con tu ID del Proyecto, y devuelve su plugin desde setupNodeEvents:

cypress.config.js
const { defineConfig } = require('cypress');
const { probaraNodeEvents } = require('@probara/cypress-reporter/setup');
module.exports = defineConfig({
e2e: {
reporter: '@probara/cypress-reporter',
reporterOptions: { projectId: 'SHOP' },
setupNodeEvents(on, config) {
return probaraNodeEvents(on, config);
},
},
});

El reporter convierte los eventos de prueba de Cypress en resultados. El plugin es dueño de la ejecución de Probara (una para todo el cypress run, cerrada al final), recoge las capturas y el vídeo, y transporta lo que dicen los helpers probara.*. Lee los mismos reporterOptions, así que no necesita ajustes propios. Si setupNodeEvents ya registra otros plugins, consulta con otros plugins.

Puedes omitir projectId y definir PROBARA_PROJECT en el entorno. El token nunca va en la configuración: la configuración se sube al repositorio, y el reporter lee el token de PROBARA_API_TOKEN.

Cypress ejecuta un solo reporter: con este, dejan de imprimirse las líneas por prueba de su reporter spec por defecto, aunque las tablas propias de Cypress de cada spec y de la ejecución siguen apareciendo. Para conservar también las líneas de spec, declara ambos reporters en cypress-multi-reporters.

Importa el archivo de soporte una vez, en el archivo de soporte de Cypress:

cypress/support/e2e.js
import '@probara/cypress-reporter/support';

Se ejecuta en el navegador, junto a tus specs, y activa los helpers probara.* (un global: las specs los llaman sin importar nada), captureOutput y la selección de pruebas.

Pasa el secreto al paso que ejecuta cypress run. En GitHub Actions:

- name: Run Cypress tests
run: npx cypress run
env:
PROBARA_API_TOKEN: ${{ secrets.PROBARA_API_TOKEN }}

No hay un paso de subida aparte: el plugin envía los resultados cuando termina la ejecución. Proveedores de CI tiene pipelines completos para GitHub Actions, GitLab CI, Jenkins, CircleCI, Azure Pipelines, Bitbucket Pipelines y Buildkite.

Sin un token y un proyecto, el reporter queda desactivado y en silencio, así que las ejecuciones locales no envían nada. En CI escribe en stdout, en líneas [probara] entre la salida propia de Cypress, y termina con el enlace a la ejecución:

$ npx cypress run --spec cypress/e2e/cart.cy.js
[probara] Sending 5 results of 4 tests (3 passed, 2 failed, 0 skipped, 0 blocked)
[probara] Recorded 5 results (2 new cases, 0 unmatched) in R-1 (closed): https://app.probara.net/projects/SHOP/runs/R-1

En Probara, la ejecución aparece en la lista de ejecuciones del proyecto como una ejecución automatizada, con el nombre del build de CI (por ejemplo Cypress #42), su rama, su commit y la URL del build. Muestra la aplicación Cypress y el nombre del token (por ejemplo Cypress · shop-e2e) en lugar de una persona.

Qué está registradoQué obtienes
Reporter, plugin y archivo de soporteTodo: una ejecución para todo el cypress run, cerrada al final, las capturas de los intentos fallidos, el vídeo y los helpers
Reporter y plugin, sin archivo de soporteResultados, capturas y vídeo. Cada llamada probara.* no hace nada, captureOutput no captura nada y la selección de pruebas no omite nada
Solo el reporter, sin pluginSe envía cada resultado, pero en una ejecución por spec, sin capturas, sin vídeo y sin helpers. Una advertencia dice qué falta
Solo el plugin, sin reporterNo se reporta nada: Cypress nunca construye el reporter
CypressEn Probara
Una pruebaUn caso de prueba, encontrado por su clave de automatización o vinculado por un ID de caso
Cada intento (también los retries de Cypress)Un resultado en la ejecución, con su estado, su duración, su hora de inicio y su error
it.skip, this.skip(), una prueba que un hook fallido impidió ejecutarUn resultado omitido
Un beforeEach o before que fallaUn resultado fallido con el nombre que le da Cypress, más las pruebas que detuvo
Llamadas a probara.step()Los pasos del resultado, anidados, con su estado, su duración y su error
probara.attach(), captureOutput, la captura de un falloArchivos del resultado, o del paso en el que se adjuntaron
probara.link(), probara.issue()Enlaces del resultado
Otras llamadas probara.* en la pruebaEl título, la suite, las etiquetas, los campos y los pasos de un caso nuevo; parámetros del resultado
Una spec que Cypress no puede analizar, o que lanza un error al cargarseUn resultado fallido, con el nombre que le da Cypress, para que nunca aparezca en verde
El comando cypress runUna ejecución automatizada, con el nombre del build de CI, cerrada al final

El reporter da a cada prueba la clave de automatización que le da probara import junit sobre el informe del reporter junit integrado en Cypress o de cypress-junit escrito con sus opciones por defecto: el archivo de la spec relativo a la raíz del proyecto, después > entre espacios, y después los títulos de los describe y el título del it unidos por espacios, sin los IDs de caso. Para estas dos specs:

cypress/e2e/cart.cy.js
describe('Cart', () => {
it('SHOP-12 adds an item', () => {
cy.get('.add').click();
});
it('removes an item', () => {
cy.get('.remove').click();
});
});
cypress/e2e/login.cy.js
describe('Login', () => {
it('logs in with a valid password', () => {
cy.get('#submit').click();
});
});

el reporter envía:

[
{
"automationKey": "cypress/e2e/cart.cy.js > Cart adds an item",
"caseDisplayId": "SHOP-12",
"status": "passed"
},
{ "automationKey": "cypress/e2e/cart.cy.js > Cart removes an item", "status": "passed" },
{
"automationKey": "cypress/e2e/login.cy.js > Login logs in with a valid password",
"status": "passed"
}
]

Si tus informes JUnit se escribieron sin el atributo file de su suite raíz, define keyIncludesFile: false: las claves omiten entonces el archivo de la spec, como esos informes. En ambos casos, una prueba conserva su caso y su historial al cambiar (migrar desde la importación JUnit).

Reportar nunca rompe tu ejecución de pruebas

Sección titulada «Reportar nunca rompe tu ejecución de pruebas»

El reporter nunca lanza errores dentro de Cypress ni cambia su código de salida: una prueba fallida hace fallar el comando, un problema al reportar no. Cada problema (un ajuste incorrecto, Probara inalcanzable, un token rechazado) se registra, nunca con el token, y las pruebas conservan su resultado. Las llamadas probara.* tampoco hacen fallar una prueba: una llamada que Probara no puede usar se omite con una advertencia. No hay ninguna opción para hacer fallar el comando por un error al reportar; para conservar lo que no se pudo enviar, define un archivo de resultados.

PáginaQué cubre
ConfiguraciónLos tres registros, cada opción, su variable, su tipo y su valor por defecto; red; modo interactivo
Vincular pruebas con casosIDs de caso en títulos y describes, probara.id(), claves de automatización, it.only
Metadatos y enlacesTítulo, suite, comentario, etiquetas, campos, parámetros, ignorar un intento; enlaces e incidencias
Pasos y adjuntosprobara.step(), probara.attach(), capturas, el vídeo, salida de consola, límites
Resultados y reintentosOpciones de la ejecución, estados, hooks y specs rotas, reintentos, archivo de resultados, asignaciones
Selección de pruebasrunCasesOnly: ejecutar solo las pruebas de una ejecución de Probara
Sharding y proyectosUna ejecución para todas las máquinas; varios proyectos de Probara
Proveedores de CIGitHub Actions, GitLab CI, Jenkins, CircleCI, Azure Pipelines, Bitbucket Pipelines, Buildkite
Solución de problemasProblemas y soluciones, cada línea que registra el reporter, depuración
MigraciónDesde la importación JUnit, Qase, Allure Cypress y trcli de TestRail; actualizaciones

Relacionado: Resumen de integraciones de CI · Reporter de Jest · Reporter de Playwright · Reporter de Vitest · CLI · Guía de la integración con Cypress · Código fuente en GitHub