Habilidad de Pruebas E2E
Disparador
- Palabras clave:
teste,e2e,playwright,browser test,visual test,smoke test - Llamada:
/e2e-test [suite] [--flags]
Descripción
Prueba E2E automatizada con comportamiento humano para vista previa y producción. Usa Chrome MCP o Playwright MCP para la automatización del navegador.
Suites de Prueba
| Suite | Duración | Descripción |
|---|---|---|
smoke | 30s | Inicio de sesión, carga, UI básica (predeterminada con "teste") |
full | 5min | Todos los escenarios P0+P1 |
visual | 2min | Solo comparaciones de capturas |
upload | 1min | Todos los formatos de archivo |
download | 2min | Funciones de exportación |
login | 30s | Flujo de autenticación |
api | 1min | Pruebas de endpoints de API |
Banderas
| Banderas | Descripción |
|---|---|
--preview | Probar solo en localhost |
--production | Probar solo en la URL de producción |
--quick | Solo escenarios P0 (prueba más rápida) |
--human | Chrome MCP con navegador real |
--headless | Playwright MCP sin interfaz (CI/CD) |
--update-baselines | Actualizar líneas base de capturas |
--mobile | Probar con viewports móviles (375px, 768px) |
Flujo de Trabajo
1. VERIFICACIÓN DEL ENTORNO
- Comprobar si localhost está funcionando (curl/fetch)
- Comprobar si la URL de producción es accesible
- Seleccionar entorno de prueba según las banderas
2. CONFIGURACIÓN DEL NAVEGADOR
- Si `--human`: Usar Chrome MCP (mcp__claude-in-chrome__)
- Sino: Usar Playwright MCP (mcp__playwright__)
- Viewport: 1280x720 (escritorio) o 375x667 (móvil)
3. ACTIVAR COMPORTAMIENTO HUMANO
- Retrasos aleatorios: 200-800ms entre acciones
- Velocidad de escritura: 50-150ms por tecla
- Pasar el cursor antes de hacer clic (pausa de 200-500ms)
- Desplazamiento suave en lugar de instantáneo
4. EJECUTAR SUITE DE PRUEBAS
- Para cada prueba: captura de pantalla antes/después
- En caso de error: guardar captura + registros de consola
- Verificación de descarga: comprobar tamaño del archivo
5. GENERAR INFORME
- Informe Markdown en .playwright-mcp/reports/
- Imágenes de diferencias en caso de desviaciones visuales
- Resumen con estado Aprobado/Error/Inestable
Escenarios de Prueba (P0 - Críticos para el Negocio)
1. Carga de Página Principal
- Navegar a la URL
- Esperar a que el elemento principal sea visible
- Verificar que el logotipo/marca sea visible
- Captura de pantalla: landing-page.png
2. Flujo de Inicio de Sesión/Autenticación
- Hacer clic en el botón de inicio de sesión
- Esperar a la animación del modal/página
- Verificar que las opciones de autenticación sean visibles (OAuth, correo, etc.)
- Captura de pantalla: login-modal.png
3. Cambio de Idioma (si hay i18n)
- Encontrar el selector de idioma
- Hacer clic con retardo humano
- Esperar al cambio de texto
- Verificar que los textos de la interfaz cambiaron
- Captura de pantalla: language-toggle.png
4. Carga de Archivos (si existe)
- Hacer clic en el área de carga
- Seleccionar archivo de prueba
- Esperar confirmación
- Verificar que se muestre el nombre del archivo
- Captura de pantalla: file-uploaded.png
5. Ejecutar Acción Principal
- Ejecutar la función principal de la aplicación
- Esperar el estado de carga
- Esperar el resultado (máx. 60s)
- Verificar que el contenido del resultado esté presente
- Captura de pantalla: result.png
6. Exportación/Descarga (si existe)
- Hacer clic en el botón de descarga
- Esperar el evento de descarga
- Verificar que el formato del archivo sea correcto
- Verificar que el tamaño del archivo sea mayor al mínimo
- Captura de pantalla: download-complete.png
Escenarios de Prueba (P1 - Importantes)
7. Navegación/Historial
- Hacer clic en un elemento de navegación
- Esperar la animación
- Verificar que se cargó el contenido correcto
8. Cambio de Tema (si existe)
- Encontrar el alternador de tema
- Anotar los colores actuales
- Hacer clic en el alternador
- Verificar que los colores cambiaron
- Captura de pantalla: theme-toggle.png
9. Diseño Responsivo
- Establecer viewport a 375x667
- Verificar que la navegación móvil sea visible
- Verificar que las funciones principales sean accesibles
- Captura de pantalla: mobile-view.png
10. Manejo de Errores
- Provocar un error (entrada inválida)
- Esperar el mensaje de error
- Verificar que el error sea amigable para el usuario
- Captura de pantalla: error-state.png
Funciones de Comportamiento Humano
// Retraso aleatorio (200-800ms)
async function humanDelay() {
const delay = 200 + Math.random() * 600;
await page.waitForTimeout(delay);
}
// Escritura humana (50-150ms por tecla)
async function humanType(selector: string, text: string) {
await page.click(selector);
await humanDelay();
for (const char of text) {
await page.keyboard.type(char);
await page.waitForTimeout(50 + Math.random() * 100);
}
}
// Patrón: Pasar cursor -> Pausa -> Hacer clic
async function humanClick(selector: string) {
await page.hover(selector);
await page.waitForTimeout(200 + Math.random() * 300);
await page.click(selector);
await humanDelay();
}
// Desplazamiento suave
async function humanScroll(pixels: number) {
await page.evaluate((px) => {
window.scrollTo({ top: px, behavior: "smooth" });
}, pixels);
await page.waitForTimeout(500);
}
Formato del Informe
## Informe de Pruebas E2E - [FECHA] [HORA]
### Entorno
- **URL**: [URL probada]
- **Navegador**: Chromium [versión]
- **Viewport**: 1280x720
- **Suite**: smoke
### Resultados
| # | Prueba | Estado | Duración | Captura |
| --- | ------------------ | ------- | -------- | ------------------------- |
| 1 | Carga de Página | APROBADO | 0.8s | [ver](landing-page.png) |
| 2 | Modal de Inicio | APROBADO | 1.2s | [ver](login-modal.png) |
| 3 | Carga de Archivo | APROBADO | 2.1s | [ver](file-uploaded.png) |
| 4 | Acción Principal | LENTO | 45.2s | [ver](result.png) |
| 5 | Descarga | ERROR | 3.4s | [ver](error.png) |
### Resumen
- **Total**: N pruebas
- **Aprobados**: X (Y%)
- **Fallidos**: A (B%)
- **Lentos/Inestables**: C (D%)
- **Duración**: Zs
Líneas Base Visuales
.playwright-mcp/
├── baselines/ # Referencia dorada (seguida por git)
│ ├── landing-page-desktop.png
│ ├── landing-page-mobile.png
│ ├── login-modal.png
│ ├── result.png
│ └── error-state.png
├── current/ # Capturas actuales (ignoradas por git)
├── diffs/ # Diferencias de píxeles (ignoradas por git)
└── reports/ # Informes de prueba (ignorados por git)
Ejecución
Llamada más simple
Usuario: "teste"
-> Ejecuta la suite smoke en el entorno disponible
Pruebas Específicas
Usuario: "teste upload"
-> Ejecuta solo la suite upload
Usuario: "teste production visual"
-> Ejecuta la suite visual en producción
Usuario: "teste --quick --human"
-> Prueba rápida con navegador Chrome real
Integración CI/CD
Usuario: "teste --headless --full"
-> Todas las pruebas sin interfaz para el pipeline
Manejo de Errores
-
Localhost no accesible:
- Mostrar advertencia
- Preguntar si se debe iniciar el servidor de desarrollo
-
Producción no accesible:
- Mostrar advertencia
- Verificar estado del despliegue
-
Tiempo de espera agotado (>60s):
- Captura de pantalla del estado actual
- Guardar registros de consola
- Marcar como ERROR
-
Diferencia visual detectada:
- Generar imagen de diferencia
- Marcar como INESTABLE (no automáticamente ERROR)
- El usuario decide si es necesario actualizar la línea base
Configuración
Archivo opcional .e2e-config.json en la raíz del proyecto:
{
"previewUrl": "http://localhost:5173",
"productionUrl": "https://your-app.com",
"defaultSuite": "smoke",
"timeouts": {
"navigation": 10000,
"action": 60000,
"download": 30000
},
"viewports": {
"desktop": { "width": 1280, "height": 720 },
"tablet": { "width": 768, "height": 1024 },
"mobile": { "width": 375, "height": 667 }
},
"humanBehavior": {
"enabled": true,
"minDelay": 200,
"maxDelay": 800,
"typingSpeed": { "min": 50, "max": 150 }
},
"screenshots": {
"onEveryStep": false,
"onFailure": true,
"fullPage": false
}
}
Requisitos Previos
- Chrome MCP o Playwright MCP instalado
- Proyecto Node.js con
package.json - Opcional:
.e2e-config.jsonpara configuración del proyecto
Autor
Dresden AI Insights - https://dresdenaiinsights.com