Ir al contenido

Configuración del reporter de Playwright

Cada ajuste es una opción del reporter en playwright.config, y la mayoría tiene también una variable de entorno PROBARA_*. Deja el token en el entorno, el proyecto en la configuración (o en el entorno), y el resto donde mejor encaje en tu pipeline.

  1. Crea un token de aplicación desde la tarjeta Playwright en Workspace › Integraciones (primeros pasos) y guárdalo como un secreto de CI llamado PROBARA_API_TOKEN.
  2. Define el ID del Proyecto: projectId en las opciones del reporter, o PROBARA_PROJECT. Es una letra mayúscula seguida de mayúsculas o dígitos (SHOP, E2E); cualquier otro valor desactiva el envío con un error.
  3. Deja el resto con su valor por defecto. La ejecución toma el nombre del build de CI, y su rama, su commit y la URL del build salen del CI.
playwright.config.ts
import { defineConfig } from '@playwright/test';
export default defineConfig({
reporter: [['list'], ['@probara/playwright-reporter', { projectId: 'SHOP' }]],
});

apiToken existe para el código que lee el token de su propio almacén de secretos. No escribas el token en playwright.config: el archivo se sube al repositorio.

Gana la primera fuente que define un valor:

OrdenFuenteEjemplo
1Una opción en playwright.config{ run: { name: 'Release 2.4' } }
2Una variable PROBARA_*PROBARA_RUN_NAME=Nightly
3La detección del CICI #42, del workflow y el número de ejecución
4El valor por defectoAutomated run 2026-09-29 14:05 UTC
  • Una opción con valor undefined nunca oculta su variable, y una variable vacía cuenta como no definida. Para que una variable pueda sustituir a una opción, omite la opción (o pasa process.env.X ?? default).
  • Los booleanos aceptan true, 1, yes, on y false, 0, no, off. Las listas van separadas por comas en las variables (PROBARA_RUN_TAGS=nightly,smoke), y los registros son pares key=value (PROBARA_RUN_ULIDS=WEB=<ulid>,API=<ulid>).
  • La detección del CI solo rellena el nombre de la ejecución y su origen (rama, commit, URL del build, y en GitHub Actions la ejecución del workflow que agrupa los jobs en paralelo): consulta qué rellena cada CI.

Puedes combinar opciones y variables. Esta configuración define el proyecto y las etiquetas, y el pipeline añade el entorno con PROBARA_ENVIRONMENT=staging:

reporter: [
['list'],
['@probara/playwright-reporter', { projectId: 'SHOP', run: { tags: ['e2e', 'nightly'] } }],
],
OpciónVariableTipoPor defectoQué hace
enabledPROBARA_ENABLEDbooleanactivadofalse desactiva el envío: no se envía ni se registra nada
apiTokenPROBARA_API_TOKENstringninguno (obligatorio)El token de aplicación. Déjalo en el entorno
projectIdPROBARA_PROJECTstringninguno (obligatorio)El ID del Proyecto (mayúsculas y dígitos), por ejemplo SHOP
baseUrlPROBARA_BASE_URLstringhttps://app.probara.netEl host de Probara al que enviar (URL base)
run.ulidPROBARA_RUN_ULIDstringninguno: una ejecución nuevaEnviar a una ejecución existente (shards)
run.namePROBARA_RUN_NAMEstringel nombre del build de CI, si no Automated run <date>Nombre de una ejecución nueva
run.descriptionPROBARA_RUN_DESCRIPTIONstringningunoDescripción de una ejecución nueva
run.environmentPROBARA_ENVIRONMENTstringningunoEntorno de una ejecución nueva por nombre, que se crea si no existe (opciones de la ejecución)
run.environmentIdPROBARA_ENVIRONMENT_IDstringningunoEntorno de una ejecución nueva por ULID
run.milestonePROBARA_MILESTONEstringningunoHito de una ejecución nueva por ID visible (M-3) o nombre
run.milestoneIdPROBARA_MILESTONE_IDstringningunoHito de una ejecución nueva por ULID
run.planPROBARA_PLANstringningunoPlan de prueba de una ejecución nueva por ID visible (PLAN-2) o nombre: la ejecución empieza con sus casos
run.configurationsPROBARA_CONFIGURATIONS{ group, name }[]ningunoConfiguraciones de una ejecución nueva por nombre (Browser=Chrome,OS=Linux), cada grupo una vez
run.configurationUlidsPROBARA_CONFIGURATION_ULIDSstring[]ningunoConfiguraciones de una ejecución nueva por ULID
run.tagsPROBARA_RUN_TAGSstring[]ningunoEtiquetas de una ejecución nueva
run.ulidsPROBARA_RUN_ULIDSRecord<string, string>ningunoLa ejecución que reutilizar en cada proyecto (WEB=<ulid>,API=<ulid>) (varios proyectos)
projectsPROBARA_PROJECTSstring[]ningunoOtros proyectos a los que pueden ir los resultados (WEB,API) (varios proyectos)
source—false | objeto (campos GitHub abajo)detectado del CIfalse no envía origen; un objeto sustituye los campos detectados uno a uno
source.branchPROBARA_BRANCHstringdetectado del CIRama del origen de la ejecución
source.commitPROBARA_COMMITstringdetectado del CICommit del origen de la ejecución
source.buildUrlPROBARA_BUILD_URLstringdetectado del CIURL del build de CI del origen de la ejecución
createMissingCasesPROBARA_CREATE_MISSING_CASESbooleantrueCrear un caso para una prueba que no coincide con ninguno (casos que faltan)
suiteUlidPROBARA_SUITE_ULIDstringla raíz del proyectoSuite bajo la que se crean los casos
closeRunPROBARA_CLOSE_RUNbooleantrue para una ejecución nueva, false para una reutilizadaCerrar la ejecución al final
closeRuns—Record<string, boolean>ningunoCerrar la ejecución de cada proyecto ({ SHOP: true, WEB: false }) cuando closeRun no está definido
uploadAttachmentsPROBARA_UPLOAD_ATTACHMENTSbooleantruefalse no sube ningún archivo (adjuntos)
captureOutputPROBARA_CAPTURE_OUTPUTbooleanfalseAdjuntar el stdout y el stderr de cada intento como stdout.log y stderr.log
statusMappingPROBARA_STATUS_MAPPING{ passed, failed, skipped, blocked }ningunoEnviar un estado como otro (failed=blocked) (estados)
statusFilterPROBARA_STATUS_FILTERstring[]ningunoNo enviar ningún resultado con estos estados, después del mapeo (skipped)
resultsFilePROBARA_RESULTS_FILEstringningunoArchivo JSON para lo que no se pudo enviar (archivo de resultados)
assignFailedToPROBARA_ASSIGN_FAILED_TOstring[]ningunoAsignar cada resultado fallido sin responsable a uno de estos miembros, por turnos (asignar fallos)
debugPROBARA_DEBUGbooleanfalseRegistrar cada petición (depuración)
rootDir—stringel rootDir de PlaywrightDirectorio respecto al que se expresan las rutas de las claves de automatización (claves)
chunkSize—number500Resultados por petición de informe, de 1 a 500
timeoutMs—number30000Tiempo máximo de un intento HTTP, en milisegundos, de 1 a 600000 (red)
maxRetries—number4Reintentos de una petición fallida, de 0 a 10
attachmentConcurrency—number2Resultados cuyos adjuntos se suben a la vez, de 1 a 8

El reporter envía su propio nombre y versión en el User-Agent (por ejemplo probara-playwright-reporter/0.1.0 probara-core/0.2.0 node/22.12.0); no hay ninguna opción para cambiarlo.

En GitHub Actions el origen también recibe estos campos, detectados de las variables GITHUB_*:

OpciónVariableTipoPor defectoQué hace
source.provider—stringdetectado de GitHub Actionsgithub_actions (detectado) u other
source.repository—stringdetectado de GitHub ActionsRepositorio del origen de la ejecución, owner/name
source.commitAuthor—stringdetectado de GitHub ActionsQuién activó el build
source.pullRequestNumber—numberdetectado de GitHub ActionsPull request del build
source.workflow—stringdetectado de GitHub ActionsWorkflow de CI del origen de la ejecución
source.ciRunId—stringdetectado de GitHub ActionsId de la ejecución de CI: los jobs de un mismo workflow comparten una ejecución
source.ciRunAttempt—numberdetectado de GitHub ActionsIntento de la ejecución de CI: una re-ejecución va a una ejecución propia
source.ciJob—stringdetectado de GitHub ActionsJob de CI del origen de la ejecución

Para código y pruebas, el reporter acepta también las opciones de runtime de @probara/core, la librería sobre la que está construido. No tienen variable, y un playwright.config rara vez las necesita:

OpciónTipoPor defectoQué hace
logger{ debug, info, warn, error }líneas [probara] en stderrDónde escribe el reporter
envRecord<string, string>process.envDe dónde se leen las variables PROBARA_* y las del CI
fetchfunctionel fetch globalEl cliente HTTP
sleepfunctionsetTimeoutLas esperas entre reintentos
randomfunctionMath.randomLa variación aleatoria de la espera entre reintentos
nowfunctionla hora actualEl reloj del nombre por defecto y de las fechas de Retry-After
ConfiguraciónQué hace el reporter
Sin token ni proyecto, o enabled: falseQueda desactivado y en silencio: no envía ni registra nada (salvo en modo depuración).
Solo uno de los dos, o un valor no válidoEl envío se desactiva; se registra cada problema, y las pruebas se ejecutan como siempre.
Un token y un proyecto, con todos los valores válidosEnvía los resultados.

Un valor del tipo equivocado, como run.tags: 'nightly' en lugar de una lista, es un valor no válido:

reporter: [['@probara/playwright-reporter', { projectId: 'SHOP', run: { tags: 'nightly' } }]],
$ npx playwright test
[probara] Probara reporting is off: run.tags must be a list of strings

Los problemas nombran la opción o la variable afectada, nunca su valor, así que un token nunca aparece en el registro.

Define enabled: false o PROBARA_ENABLED=false, u omite el token: el reporter no envía nada y queda en silencio. Los builds que no reciben secretos, como los pull requests desde forks en la mayoría de los CI, no envían nada por sí solos. Para conservar lo que una ejecución habría enviado, incluso con el envío desactivado, define un archivo de resultados.

baseUrl (PROBARA_BASE_URL) es el host de Probara con el que habla el reporter: la URL de la aplicación, sin ruta. Por defecto es https://app.probara.net, y las peticiones van a ese host y a ningún otro. Déjalo sin definir salvo que Probara te indique otro host.

El reporter habla HTTPS con un solo host, la URL base, desde el proceso principal de Playwright.

AjustePor defectoRangoQué limita
timeoutMs30000 ms1 a 600000Un intento de una petición, incluido el cuerpo de la respuesta
Subidas120000 ms, o timeoutMs si es mayor—Un intento de subida de un adjunto (un archivo grande en una red lenta)

Un intento que agota su tiempo se reintenta como un error de red.

RespuestaQué pasa
Error de red, tiempo agotado, 408, 429, 500, 502, 503, 504Se reintenta
409 con Retry-After (la misma petición sigue en curso)Se reintenta
Un 201 cuyo cuerpo nunca llegóSe reintenta; la clave de idempotencia lo repite
Cualquier otra respuesta (400, 401, 403, 404, 409, 413, 422…)No se reintenta: la petición falla
  • maxRetries (de 0 a 10, 4 por defecto) fija los reintentos tras el primer intento: 5 intentos en total por defecto.
  • La espera antes del reintento n es 1 s × 2ⁿ⁻¹, con un máximo de 30 s, más hasta un 20 % de variación aleatoria.
  • Una cabecera Retry-After (en segundos o como fecha HTTP) sustituye esa espera, con un máximo de 120 s.
  • Cada reintento se registra, con el intento y la espera.

Con los valores por defecto, una petición que sigue fallando se abandona tras unos 15 s de espera (1 + 2 + 4 + 8 s, hasta 18 s con la variación), más los propios intentos, cada uno de como mucho timeoutMs. El peor caso es un Retry-After en cada respuesta: 120 s antes de cada reintento, es decir, 8 minutos de espera con los 4 reintentos por defecto (20 minutos con maxRetries: 10). Eso es por petición, y un informe fallido detiene los siguientes de su proyecto. Playwright espera al reporter antes de terminar, así que baja maxRetries o timeoutMs para acotar un paso de CI.

Probara limita las peticiones a la API por organización (60 peticiones por minuto en Free, 1.200 en Pro y 3.000 en Enterprise), sumando todos los tokens de la organización. Lo que cuesta una ejecución:

PeticiónCuántas
Informe1 por chunk de hasta 500 resultados (chunkSize)
Preparación de adjuntos1 por resultado con archivos (por cada 20 archivos o 64 MiB)
Confirmación de adjuntos1 por resultado con archivos
Cierre1, si había adjuntos en cola (si no, el último informe cierra la ejecución)

Una ejecución de 2000 intentos sin archivos cuesta 4 peticiones; una en la que 100 intentos tienen una traza cuesta unas 200 más. Las respuestas 429 se reintentan tras su Retry-After. Para repartir las subidas, baja attachmentConcurrency; para enviar menos archivos, conserva las trazas y los vídeos solo de los fallos (retain-on-failure) o define uploadAttachments: false.

  • Los resultados salen en chunks de chunkSize (de 1 a 500, 500 por defecto), uno tras otro, en el orden en que terminaron los intentos. Un caso de la ejecución conserva el último resultado registrado, así que el orden importa. Cada chunk respeta además los totales de pasos y etiquetas por informe de Probara.
  • El primer chunk crea la ejecución (salvo que run.ulid indique una); los demás la reutilizan.
  • Cuando un chunk falla tras sus reintentos, los chunks siguientes de ese proyecto no se envían y la ejecución queda abierta; un archivo de resultados los conserva.
  • Las subidas empiezan cuando su informe se ha registrado, attachmentConcurrency resultados a la vez (de 1 a 8, 2 por defecto), y la ejecución se cierra después de las subidas.

Cada informe, creación de ejecución, cierre de ejecución y confirmación de adjuntos lleva una Idempotency-Key, la misma en cada reintento de esa petición. Si el primer intento de un informe reintentado sí se registró, Probara lo repite, nunca lo registra dos veces (idempotencia). Ejecutar playwright test otra vez es una ejecución nueva, con cada resultado registrado de nuevo.

El reporter usa el fetch integrado en Node y no tiene ninguna opción de proxy propia:

Node.jsSoporte de proxy
22.21 o posterior, 24 o posteriorDefine NODE_USE_ENV_PROXY=1 con HTTPS_PROXY (y NO_PROXY); fetch pasa por el proxy
22.12 a 22.20Sin soporte: fetch ignora HTTPS_PROXY y HTTP_PROXY
Ventana de terminal
NODE_USE_ENV_PROXY=1 HTTPS_PROXY=http://proxy.example.com:8080 npx playwright test

El ajuste se aplica a todo el proceso de Node (documentación de Node): añade localhost a NO_PROXY si tus pruebas llegan a un servidor local con fetch. En versiones anteriores de Node, actualiza Node o permite app.probara.net en el firewall.

Cuando tu red inspecciona TLS con una autoridad de certificación privada (un proxy corporativo, por ejemplo), pasa a Node el certificado de la CA (PEM) al arrancar:

Ventana de terminal
NODE_EXTRA_CA_CERTS=/etc/ssl/certs/company-ca.pem npx playwright test

Node lee NODE_EXTRA_CA_CERTS una sola vez al arrancar, así que defínela en el entorno del paso. Desde Node 22.19, NODE_USE_SYSTEM_CA=1 confía en cambio en el almacén de certificados del sistema operativo. No hay ninguna opción para desactivar la verificación TLS.

Siguiente: vincula tus pruebas con casos, o consulta las opciones de la ejecución.