Volver al Blog
Identidad

Higiene de datos y estado en pruebas de automatización del navegador

Mantén datos sintéticos, estado del navegador y limpieza con propietarios explícitos en workers aislados.

Documentación

Quieres la documentación estructurada de Identidad?

Este artículo forma parte de la biblioteca editorial. Para pasos de configuración, material de referencia y actualizaciones continuas, entra en la sección de docs.

Los datos sintéticos pasan por un estado de navegador propio hasta una limpieza determinista

Una prueba fiable declara cada entrada, propietario, resultado observable y límite de limpieza. Un contexto nuevo no vuelve independiente una cuenta compartida, un registro del servidor o una carpeta de descargas. Usa datos sintéticos creados por una interfaz de pruebas documentada y nunca exportaciones reales, documentos personales ni credenciales. Consulta la guía de fixtures y aislamiento para elegir el alcance.

Matriz de propiedad de datos y estado

RecursoCreadorPropietario mutableResultado observableLímite de limpieza
Cuenta sintéticaservicio de pruebasworker del escenarioencabezado o accesoAPI de reinicio
Contexto y cookiesfixturefixturecontexto limpiocerrar en finally
Baseline de estadorepositoriocopia del fixtureruta cargadaconservar baseline; borrar copia
Carpeta de artefactosworkerworkerrecibo cortoborrar ruta local
Trabajo remotoaplicaciónservicioestado documentadocancelar o esperar expiración

El cierre local no demuestra que se borró un registro remoto. Mantén el baseline de solo lectura y escribe copias con worker e intento. Dos contextos aún pueden competir por el mismo registro; asigna registros distintos o serializa la mutación documentada.

Fixture de fallo

Prueba una página sintética sin marcador de disponibilidad y conserva el primer error junto al resultado de limpieza:

import os from 'node:os';
import path from 'node:path';
import { mkdtemp, rm } from 'node:fs/promises';
import { chromium } from 'playwright';
import { expect } from '@playwright/test';

const dir = await mkdtemp(path.join(os.tmpdir(), 'state-hygiene-'));
const browser = await chromium.launch({ headless: true });
const context = await browser.newContext({ baseURL: 'http://fixture.test' });
const page = await context.newPage();
await page.route('/fixtures/without-ready-marker', route =>
  route.fulfill({ status: 200, contentType: 'text/html', body: '<main><p>Waiting</p></main>' })
);
let failure;
const remember = (label, error) => {
  const current = new Error(`${label}: ${error.message}`, { cause: error });
  failure = failure ? new AggregateError([failure, current], `${failure.message}; ${label} failed`) : current;
};
try {
  await page.goto('/fixtures/without-ready-marker');
  await expect(page.getByRole('status')).toHaveText('Ready', { timeout: 250 });
} catch (error) {
  remember('aserción de fixture', error);
} finally {
  try {
    await context.close();
  } catch (error) {
    remember('cierre de contexto', error);
  }
  try {
    await rm(dir, { recursive: true, force: true });
  } catch (error) {
    remember('limpieza de artefacto', error);
  }
  try {
    await browser.close();
  } catch (error) {
    remember('cierre de navegador', error);
  }
}
if (failure) throw failure;

Tabla de decisión

ObservaciónCategoríaAcciónNo demuestra
Falta el baselinefixturefallar y reparar la entradadisponibilidad del servicio
Aparece una cookie antiguaestado del navegadordescartar contextoinvalidación del servidor
Workers sobrescriben datosdatos de pruebaseparar o serializarfallo de aislamiento del navegador
Pasa la aserción, falla limpiezainfraestructuraconservar ambos erroresborrado remoto
Pasa un reintentoresultado inciertoconsultar estado admitidoque el primer intento fuera inocuo

Revisar las transiciones

Trata el estado como una secuencia: baseline, comprobación visible y limpieza. El cambio de cuenta requiere la salida documentada y un contexto nuevo; borrar el almacenamiento local no invalida una sesión remota. Una instantánea debe conservar su versión y origen, y una copia incompleta debe fallar en lugar de regenerarse en silencio.

Proteger secretos y artefactos

Las instantáneas pueden contener cookies. Restringe sus permisos y conserva un recibo corto con escenario, worker, resultado y limpieza. No registres tokens, cuerpos completos ni texto personal. La carpeta temporal del worker y la retención de CI son responsabilidades distintas. La guía de cargas y descargas muestra un límite parecido.

Revisar reintentos y paralelismo

Nombra archivos con escenario, worker e intento, no con identificadores personales. Tras un tiempo de espera, consulta el estado admitido antes de repetir una mutación. Ejecuta casos de contexto limpio, estado expirado, cambio de cuenta, salida paralela y limpieza forzada después de cambios de navegador o aplicación.

La repetibilidad procede de entradas controladas, no de un navegador compartido durante mucho tiempo.

Fija la ruta, el esquema del fixture, la forma del registro sintético y la configuración necesaria.

Así cada cambio se atribuye a la aplicación, al fixture o al runner.

Evita una preparación global que cree cuentas, conceda permisos y deje páginas abiertas.

Esa preparación mezcla la causa del primer fallo con los efectos de pruebas anteriores.

El fixture de inicio debe informar que cargó estado conocido o que completó el acceso documentado.

No debe imprimir el material de sesión que permitió ese acceso.

El fixture de datos debe informar etiqueta de escenario y resultado del reinicio.

No debe enumerar registros para encontrar uno que funcione por casualidad.

Si falta la entrada esperada, termina como fallo de fixture.

Una sustitución no planificada impide reproducir el resultado.

Algunos estados viven fuera del navegador, como un simulador de correo o un servicio de notificaciones.

Cada dependencia externa necesita su propio espacio sintético y recibo.

La prueba de navegador puede observar una confirmación, no afirmar cada entrega posterior.

Usa la interfaz de prueba del servicio para los hechos que pertenecen al servicio.

Cerrar una página libera listeners y handles de esa página.

Cerrar un contexto libera el estado gestionado dentro de ese contexto.

Ninguna de esas acciones borra por sí sola un archivo copiado, un objeto cargado o un token de otro dispositivo.

Haz el cierre de sesión documentado mientras la página está disponible.

Después cierra recursos del navegador y elimina el directorio local del worker.

Un fallo de limpieza de la aplicación puede ser independiente del cierre del navegador.

Conserva ambas observaciones en el recibo breve.

No amplíes la limpieza buscando perfiles, directorios o contextos con nombres parecidos.

Una recuperación puede poner en cuarentena su propio directorio conocido si no logra eliminarlo.

Un registro sintético debe reconocerse sin parecer datos de una persona.

Usa prefijo de escenario, etiqueta de ejecución y valores diseñados para la aserción.

Para un límite, cambia una sola propiedad declarada de la entrada.

Un reinicio debe restaurar una baseline conocida y no adivinar una reparación parcial.

No reutilices automáticamente una etiqueta cuyo recibo informa limpieza incompleta.

Una aserción debe describir lo que una persona o prueba autorizada puede ver.

No deduzcas una sesión remota a partir de una entrada vacía de almacenamiento local.

No deduzcas un trabajo asíncrono por una navegación completada.

Registra la señal ausente, el estado visible inesperado o la categoría de error documentada.

Revisa primero registro único, contexto único y directorio privado antes de cambiar tiempos.

La revisión periódica compara el recibo fallido con el contrato declarado antes de cambiar una espera.

Capacidad y límite de BotBrowser

BotBrowser ofrece BrowserContexts aislados con cookies, almacenamiento y estado de sesión separados para flujos sintéticos autorizados. Sirve para comprobar que un contexto nuevo no hereda estado del cliente; consulta la documentación de aislamiento multi-cuenta. No sustituye el ciclo de vida de Playwright o Selenium, la limpieza de la aplicación, la invalidación de sesiones del servidor ni la gestión de secretos. No garantiza la aceptación de una cookie expirada, la cancelación de un trabajo ni el borrado de un registro del proveedor.

Registra solo escenario, worker, resultado visible y limpieza. Ejecuta un caso limpio, uno expirado y este fallo forzado antes de integrar cambios.

Fuentes

#Automatización Del Navegador#Datos De Prueba#Estado#Aislamiento#Limpieza

Lleva BotBrowser de la investigación a producción

Usa estas guías para entender el modelo y después avanzar hacia validación multiplataforma, contextos aislados y despliegue de navegador preparado para escalar.