- Inicio
- Habilidades
- Pruebas
- Arquitecto de Tests E2E
Arquitecto de Tests E2E
Disena estrategias de tests end-to-end que encuentran problemas reales del usuario — automatizacion de browser, rutas criticas y prevencion de flakiness.
El Problema
Los tests end-to-end son los mas valiosos — y los mas fragiles. Atrapan bugs que ninguna otra capa de testing puede, pero tambien se rompen por razones no relacionadas con tu codigo: redes lentas, selectores cambiados, timing de animaciones, scripts de terceros. Disenar una estrategia E2E que cubra los recorridos criticos del usuario sin convertirse en una pesadilla de mantenimiento requiere una arquitectura cuidadosa que la mayoria de equipos omite.
El Prompt
Disena una estrategia de tests end-to-end para mi aplicacion. Necesito tests que atrapen bugs reales visibles al usuario mientras se mantienen mantenibles y rapidos.
APLICACION:
[describe tu app — tipo, flujos clave del usuario, stack tecnologico]
ESTADO ACTUAL:
[ej. "Sin tests E2E aun" o "50 tests Cypress, 30% inestables"]
FRAMEWORK E2E: [Playwright / Cypress / Selenium]
Disenar lo siguiente:
1. **Inventario de Rutas Criticas** — Listar los 5-10 recorridos del usuario que DEBEN funcionar. Rankear por impacto al negocio.
2. **Page Object Model** — Generar las clases/helpers POM para las top 3 rutas criticas. Incluir:
- Selectores resilientes (data-testid, basados en rol, nunca clases CSS)
- Estrategias de espera (sin sleeps arbitrarios — esperar condiciones especificas)
- Acciones reutilizables (login, navegar, llenar formulario)
3. **Implementacion de Tests** — Escribir los tests E2E reales para la ruta critica #1 con:
- Setup: sembrar datos de test via API (no por UI)
- Aserciones sobre resultados visibles del usuario (no internos del DOM)
- Screenshot en fallo para debugging
- Limpieza: resetear estado despues de cada test
4. **Medidas Anti-Flake** — Config de reintentos, esperas de network idle, desactivacion de animaciones y ajuste de timeouts.
5. **Configuracion CI** — Proveer la config de GitHub Actions / CI para ejecutar estos tests en cada PR.
Ejemplo de Salida
// pages/CheckoutPage.ts — Page Object Model
export class CheckoutPage {
constructor(private page: Page) {}
async fillShippingAddress(address: Address) {
await this.page.getByLabel('Calle').fill(address.street);
await this.page.getByLabel('Ciudad').fill(address.city);
await this.page.getByLabel('Codigo Postal').fill(address.zip);
}
async submitOrder() {
await this.page.getByRole('button', { name: 'Realizar Pedido' }).click();
await this.page.waitForURL('**/confirmacion-pedido/**');
}
async getOrderNumber(): Promise<string> {
return this.page.getByTestId('order-number').textContent();
}
}
Cuando Usar
Usar cuando lanzas un producto nuevo, despues de que un flujo critico del usuario se rompe en produccion, o cuando tu suite E2E existente no es confiable y necesita una arquitectura nueva. Empezar con el recorrido del usuario mas importante y expandir gradualmente — cinco tests E2E estables valen mas que cincuenta inestables.
Tips Pro
- Setup API-first — sembrar datos de test via llamadas API en beforeEach, nunca por la UI. Pedir a la IA que genere los scripts de seed que coincidan con tu schema de base de datos.
- Testear resultados del usuario, no implementacion — asegurar “la confirmacion del pedido es visible” no “div.order-confirm tiene la clase active.”
- Desactivar servicios no esenciales — bloquear analytics, widgets de chat y scripts de terceros durante E2E para reducir inestabilidad.
- Usar archivos de trace — pedir a la IA que agregue grabacion de trace de Playwright para tener una linea de tiempo completa cuando un test falla en CI.