# Enviar resultados desde CI con Cucumber

> Crea el token de aplicación con el que se autentica el reporter de Probara para Cucumber, añádelo a tu cucumber.js, sincroniza tus archivos .feature y revisa lo que envía.

La aplicación **Cucumber** envía los resultados de cucumber-js a Probara desde cualquier pipeline de CI, con el reporter
de Probara para Cucumber. Cada ejecución se convierte en una ejecución de pruebas automatizada con sus resultados: cada
escenario y cada paso, los casos de prueba a los que se vincula cada escenario, y los archivos que adjunta. La misma
aplicación sincroniza tus archivos `.feature`, así que Git mantiene sus escenarios como los casos de Probara.

El reporter inicia sesión con un **token de aplicación**: un token que pertenece a la organización, no a una persona. No
consume un puesto, y sigue funcionando cuando quien lo creó deja la organización. Esta guía cubre la tarjeta en Probara y
la configuración. La [documentación del reporter](https://docs.probara.net/es/developers/ci-integrations/cucumber/) cubre cada
[opción del reporter](https://docs.probara.net/es/developers/ci-integrations/cucumber/configuration/), los pasos y los adjuntos, y las reglas que
vinculan un escenario con su caso.

## Antes de empezar

| Lo que necesitas                                                                                 | Por qué                                                                                                                                                                   |
| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Un plan de pago (**Pro** o **Enterprise**, o cualquier prueba)                                   | Reportar desde CI y la sincronización de archivos no forman parte del plan Free. En Free, su diálogo muestra **Ver planes** en lugar de **Crear un token de aplicación**. |
| Ser **propietario** o **administrador** de Probara                                               | Solo los propietarios y administradores pueden crear y gestionar tokens de aplicación. Los demás miembros ven la tarjeta sin sus tokens.                                  |
| Un proyecto de cucumber-js (`@cucumber/cucumber` 13.3 o posterior, en Node.js 22.12 o posterior) | El reporter se ejecuta con tus escenarios, en el mismo comando `npx cucumber-js`.                                                                                         |

## Configúralo

1. En **Workspace › Integraciones**, selecciona la tarjeta **Cucumber**. El diálogo muestra qué puede hacer la
   aplicación y enlaza a esta guía.
2. Abre la pestaña **Tokens de acceso** y selecciona **Crear un token de aplicación**.
3. Escribe un **Nombre del token** y selecciona **Crear token**. Ponle el nombre de lo que lo usa: el repositorio o el
   pipeline, para saber cuál revocar más tarde.
4. Selecciona **Copiar token** en **Copia tu nuevo token**. Es la única vez que Probara lo muestra: guárdalo en tu CI como
   un secreto llamado `PROBARA_API_TOKEN` antes de seleccionar **Listo**.
5. Instala el reporter junto a cucumber-js:

   ```bash
   npm install --save-dev @cucumber/cucumber @probara/cucumber-reporter
   ```

6. Añade el formateador a `format` en `cucumber.js`, y sustituye `<PROJECT_CODE>` por el ID de tu proyecto, como `SHOP`:

   ```js
   // cucumber.js
   module.exports = {
     default: {
       format: ['@probara/cucumber-reporter'],
       formatOptions: { probara: { projectId: '<PROJECT_CODE>' } },
     },
   };
   ```

   El reporter sustituye la salida de progreso de cucumber-js. Para conservarla, indica también una ruta de archivo para el
   reporter: `format: ['progress', '@probara/cucumber-reporter:reports/probara.txt']`.

7. Pasa el secreto a tus pruebas y ejecútalas. Por ejemplo, en GitHub Actions:

   ```yaml
   - name: Ejecutar las pruebas de Cucumber
     run: npx cucumber-js
     env:
       PROBARA_API_TOKEN: ${{ secrets.PROBARA_API_TOKEN }}
   ```

El token nunca va en `cucumber.js`: el reporter lo lee del entorno. La tarjeta de la página de Integraciones muestra
cuántos tokens activos tiene la aplicación.

## Sincroniza los archivos `.feature`

Los resultados llegan a casos, así que sincroniza primero los archivos `.feature`, en la rama principal, con el mismo token:

```yaml
- name: Sincronizar los archivos .feature con Probara
  run: npx @probara/cli sync gherkin "features/**/*.feature"
  env:
    PROBARA_API_TOKEN: ${{ secrets.PROBARA_API_TOKEN }}
    PROBARA_PROJECT: <PROJECT_CODE>
```

La guía [Sincronizar archivos .feature desde Git](https://docs.probara.net/es/guides/syncing-feature-files-from-git/) explica la sincronización:
sus claves, los movimientos y las vinculaciones, el archivado, y qué campos de un caso sincronizado son de solo lectura.
La página de [proveedores de CI](https://docs.probara.net/es/developers/ci-integrations/cucumber/ci-providers/) tiene pipelines completos que
sincronizan y ejecutan las pruebas.

## Qué envía el reporter

| Qué              | Cómo lo registra Probara                                                                                                                                                                                                                                           |
| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Resultados       | Un resultado por intento: un escenario reintentado con `--retry` envía cada intento, en orden. Cada fila de un esquema de escenario es un resultado propio, registrado en el caso de ejecución con los valores de la fila. El caso conserva el último resultado.   |
| Pasos            | Cada paso con su palabra clave (`Given`, `When`, `Then`, `And`, `But` o `*`), estado, duración, error, y su Doc String o Data Table. Los pasos de Background van bajo un paso `Background`.                                                                        |
| Estados          | Un paso que falla, o que coincide con más de una definición, queda fallido. Un paso omitido, pendiente o sin definición queda omitido. Un escenario falla cuando falla un paso o un hook `Before` o `After`.                                                       |
| Adjuntos         | Los archivos que un escenario adjunta con `this.attach`, `this.log` y `this.link`: en su resultado, o en el paso que los adjuntó.                                                                                                                                  |
| Vínculos         | Un escenario etiquetado con `@probara:SHOP-12` reporta al caso con ese identificador visible, sea cual sea su clave. Si no, su clave lo vincula con su caso sincronizado.                                                                                          |
| Casos nuevos     | Un escenario que no coincide con ningún caso crea uno, con el nombre del escenario, salvo que `createMissingCases` esté desactivado. Su clave es la que construye `probara sync gherkin`, así que la siguiente sincronización lo encuentra.                        |
| Casos existentes | Un caso archivado al que un escenario reporta se restaura. Un caso encontrado por su clave de automatización se mueve a la suite del archivo `.feature` de su escenario; un caso que gestiona tu sincronización Git, o uno vinculado por su ID, conserva su suite. |
| Ejecuciones      | Una ejecución automatizada por cada ejecución de cucumber-js, con el nombre de la compilación de CI, que se cierra cuando han llegado todos los resultados.                                                                                                        |

Un problema al reportar nunca hace fallar tus pruebas. Una opción bajo `probara` que el reporter no conoce se ignora, con una advertencia en el registro
que la nombra.

## Mismos casos que la importación del JSON de Cucumber

Si ya envías el reporte JSON de Cucumber con `probara import cucumber`, el reporter encuentra los mismos casos: sus claves son
las de la sincronización y la importación, así que al cambiar cada escenario conserva su caso y su historial. Hay dos
diferencias que conviene conocer. El reporter envía los resultados al final de la ejecución, y sube los archivos que adjuntan sus pasos,
algo que la importación no envía. Quita el paso de importación en cuanto el reporter funcione, para no enviar dos veces los
mismos resultados.

## Otras herramientas que escriben JSON de Cucumber

Cucumber-JVM, playwright-bdd y otras herramientas escriben reportes JSON de Cucumber. Envía esos reportes después de la
ejecución con `probara import cucumber`, que describe la [página de la CLI](https://docs.probara.net/es/developers/cli/#importar-resultados-de-cucumber).
El reporter es para cucumber-js.

## Gestiona los tokens

En **Tokens de aplicación**, la pestaña **Tokens de acceso** lista cada token activo con quién lo creó (o **Creado por un
usuario eliminado**), cuándo, y cuándo se usó por última vez (**Nunca** hasta su primer reporte).

**Revoca** un token, y confírmalo, cuando pueda haberse filtrado o cuando alguien que podía leerlo deje tu equipo: las
pipelines que lo usan dejan de reportar al momento, y no se puede deshacer. Crea antes un token nuevo para ellas. Como un token
de aplicación sobrevive a quien lo creó, rotarlo depende de ti: Probara nunca lo revoca por su cuenta.

## Qué puede hacer un token de aplicación

Un token de aplicación solo puede hacer lo que hacen el reporter y la sincronización: crear ejecuciones automatizadas, enviar
reportes (que pueden crear los casos de prueba y las suites que nombran), añadir adjuntos a sus resultados, cerrar ejecuciones y
sincronizar archivos `.feature` (que crean, actualizan y archivan casos sincronizados). Cualquier otra llamada responde
`403 forbidden`. Las [llamadas permitidas](https://docs.probara.net/es/developers/authentication/#llamadas-permitidas) están en la referencia de
autenticación. Para scripts y otros clientes de la API, usa un [token de API](https://docs.probara.net/es/developers/authentication/) personal.

Las ejecuciones, las entradas de actividad y los adjuntos que creó un token de aplicación muestran el logotipo y el nombre de la
aplicación junto al nombre del token, por ejemplo **Cucumber · e2e-ci**, en la lista de ejecuciones, en los resúmenes de ejecución
e hitos, en la [actividad del workspace](https://docs.probara.net/es/guides/workspace/activity/) y en la lista de adjuntos.

## Cuando cambia el plan

Si tu organización pasa al plan Free, sus tokens de aplicación se conservan, pero Probara los rechaza, así que las pipelines
dejan de reportar y sincronizar. El diálogo de la tarjeta lo indica y ofrece **Ver planes**. Puedes seguir viéndolos y revocarlos.
Vuelven a funcionar en cuanto la organización vuelve a un plan de pago, sin nada que configurar de nuevo. Las ejecuciones de
pruebas manuales no se ven afectadas.

## Siguiente paso

- [Documentación del reporter](https://docs.probara.net/es/developers/ci-integrations/cucumber/): las
  [opciones](https://docs.probara.net/es/developers/ci-integrations/cucumber/configuration/), la
  [vinculación](https://docs.probara.net/es/developers/ci-integrations/cucumber/linking/) y los
  [resultados y reintentos](https://docs.probara.net/es/developers/ci-integrations/cucumber/results-and-retries/).
- [Sincronizar archivos .feature desde Git](https://docs.probara.net/es/guides/syncing-feature-files-from-git/): las claves de la sincronización,
  los movimientos, el archivado y los campos de solo lectura.
- [Integraciones CI](https://docs.probara.net/es/developers/ci-integrations/): cómo se compara el reporter de Cucumber con la
  [CLI](https://docs.probara.net/es/developers/cli/) y con los reporters de Playwright, Jest, Cypress y Vitest.
- [API de reportes](https://docs.probara.net/es/developers/api-reference/#reportes-de-ci): el endpoint que llama el reporter, para tus propias herramientas.
