QA E2E¶
Plugin de testing End-to-End automatizado que valida criterios de aceptacion (ACs) de Feature Specs contra un servidor de pruebas usando Playwright MCP. Para cada AC que falla, crea un GitHub Issue estructurado con evidencia (screenshots, logs, pasos para reproducir). Cierra el gap entre la verificacion unitaria de ATL y la validacion real en browser que ve el usuario final.
Prerequisitos¶
- Claude Code instalado
- Playwright MCP configurado (
claude mcp add playwright -- npx @anthropic-ai/mcp-playwright) - GitHub CLI (
gh) instalado y autenticado (gh auth login) - Servidor de pruebas accesible (localhost o staging)
- Feature Spec con ACs en formato Given/When/Then (generado por SDD-Wizards, SDD-Intake o ATL)
- Variables de entorno configuradas segun la estrategia de auth elegida
Skills¶
QA E2E expone 2 skills que se ejecutan en secuencia: primero el wizard configura la sesion de testing, luego el runner ejecuta las pruebas y reporta resultados. Ambos usan context: fork para aislar su ventana de contexto y disable-model-invocation: true para evitar auto-activacion.
| Skill | Descripcion | Invocacion | Tools permitidos |
|---|---|---|---|
| qa-wizard | Configura la sesion de testing: selecciona Feature Spec, URL del servidor, estrategia de auth. Genera .context/qa-e2e/config.json. |
/qa-e2e:qa-wizard [feature-name] |
Read, Write, Glob, Grep, Bash (echo, gh, mkdir, ls, cat), Engram (mem_save, mem_search, mem_context) |
| qa-run | Orquesta la ejecucion E2E: autentica, ejecuta cada AC en browser, crea GitHub Issues por fallos, genera reporte final. | /qa-e2e:qa-run [feature-name] |
Read, Write, Glob, Grep, Bash (echo, gh, curl, mkdir, ls, cat, date), Agent (qa-navigator, qa-reporter), Engram (mem_save, mem_search) |
Agentes¶
El plugin usa 2 subagentes especializados que son delegados por qa-run durante la ejecucion. Cada uno tiene un rol acotado con tools restringidos al minimo necesario.
| Agente | Rol | Modelo | Tools | maxTurns |
|---|---|---|---|---|
| qa-navigator | Ejecuta flujos E2E en el browser: navega paginas, llena formularios, toma screenshots, verifica condiciones del DOM. Maneja los 4 tipos de autenticacion. | sonnet | Read, Bash (echo, curl), Playwright MCP (navigate, click, fill_form, type, press_key, snapshot, take_screenshot, evaluate, wait_for, hover, select_option, handle_dialog, console_messages, network_requests, tabs, navigate_back, file_upload, drag, run_code, resize) | 30 |
| qa-reporter | Crea GitHub Issues estructurados para ACs que fallaron. Se delega cuando qa-run detecta un AC con status FAIL y necesita crear un issue con evidencia. | sonnet | Bash (gh), Read, Glob, Grep | 15 |
Flujo de trabajo¶
El pipeline es secuencial en dos fases: configuracion y ejecucion. El usuario interactua con dos comandos simples:
-
Configuracion (
/qa-e2e:qa-wizard): El wizard identifica el Feature Spec (busca en Engram,.context/atl/, o GitHub), configura la URL del servidor de pruebas, elige la estrategia de autenticacion y extrae todos los ACs en formato Given/When/Then. Genera.context/qa-e2e/config.json. -
Verificacion del servidor: qa-run valida que el servidor responda antes de continuar. Si no responde, se detiene con mensaje claro.
-
Autenticacion: qa-run delega al agente qa-navigator para autenticarse segun la estrategia configurada:
form-login: navega al formulario, llena credenciales desde env vars, submitapi-token: inyecta token en localStorage/headersmanual-session: abre browser, pausa para login manual del usuario, captura cookies-
otp-interactive: llena formulario, pausa para que el usuario ingrese codigo 2FA, continua -
Ejecucion AC por AC: Para cada AC del Feature Spec, qa-run traduce Given/When/Then a pasos Playwright y delega a qa-navigator. El agente ejecuta el setup (Given), las acciones (When), y verifica las condiciones (Then). Toma screenshots antes y despues como evidencia.
-
Reporte de fallos: Para cada AC con status FAIL, qa-run delega a qa-reporter para crear un GitHub Issue con: AC referenciado, escenario Given/When/Then, resultado observado, evidencia, pasos para reproducir y contexto tecnico.
-
Reporte final: qa-run genera un reporte en
.context/qa-e2e/results/con resumen de cobertura (PASS/FAIL/ERROR/SKIP por AC) y lista de issues creados. Persiste el resultado en Engram.
Estrategias de autenticacion¶
Uno de los aspectos mas criticos del testing E2E es manejar la autenticacion correctamente. El plugin soporta 4 estrategias que cubren la mayoria de escenarios reales. Las credenciales nunca se guardan en archivos — siempre se leen de variables de entorno.
| Estrategia | Cuando usarla | Env vars requeridas |
|---|---|---|
form-login |
App con formulario web de login (usuario + contraseña) | QA_E2E_USERNAME, QA_E2E_PASSWORD |
api-token |
APIs o apps con auth por header (Bearer, API key) | QA_E2E_API_TOKEN |
manual-session |
Auth compleja: SSO, OAuth externo, CAPTCHA | Ninguna (login manual) |
otp-interactive |
Login con codigo 2FA, OTP por email/SMS | QA_E2E_USERNAME, QA_E2E_PASSWORD |
none |
App publica o paginas sin auth | Ninguna |
La referencia completa de cada estrategia (auto-deteccion de selectores, flujos Playwright, errores comunes) esta en skills/qa-wizard/references/auth-strategies.md.
Contratos de datos¶
Archivos producidos¶
El plugin genera archivos de configuracion y resultados que se almacenan en .context/qa-e2e/ (gitignored). Estos archivos conectan la fase de configuracion con la de ejecucion.
| Archivo | Productor | Consumidor | Descripcion |
|---|---|---|---|
.context/qa-e2e/config.json |
qa-wizard | qa-run | Configuracion completa: feature, server, auth, ACs extraidos |
.context/qa-e2e/results/{feature}-{timestamp}.json |
qa-run | Externo | Resultados crudos por AC con status, evidencia, timestamps |
.context/qa-e2e/results/{feature}-report.md |
qa-run | Externo | Reporte legible con tabla de resultados y resumen |
Archivos consumidos¶
| Archivo | Fuente | Descripcion |
|---|---|---|
.context/atl/{feature}/spec.md |
ATL / SDD-Wizards | Feature Spec con ACs en formato Given/When/Then |
| GitHub milestone issues | SDD-Wizards / SDD-Intake | Feature Spec almacenado en GitHub Projects |
Engram¶
El plugin usa Engram para persistir configuracion y resultados entre sesiones, siguiendo el patron de topic keys del equipo.
| Topic key | Writer | Reader | Contenido |
|---|---|---|---|
qa-e2e/{feature}/config |
qa-wizard | qa-run | Resumen de configuracion de la sesion de testing |
qa-e2e/{feature}/report |
qa-run | Externo | Resumen de resultados: ACs passed/failed, issues creados |
GitHub¶
El plugin crea issues en GitHub con labels especificos para identificar fallos de E2E. Los labels se crean automaticamente con --force (idempotente).
| Label | Color | Descripcion |
|---|---|---|
qa-e2e |
#d93f0b |
Identifica issues creados por el plugin qa-e2e |
ac-failure |
#e11d48 |
Criterio de aceptacion especifico que fallo |
needs-fix |
#fbca04 |
Requiere correccion del equipo de desarrollo |
Hooks¶
El plugin incluye un hook de seguridad que restringe los comandos Bash a una whitelist de operaciones seguras, previniendo ejecucion accidental de comandos destructivos durante el testing.
| Hook | Evento | Script | Que hace |
|---|---|---|---|
| block-destructive | PreToolUse (matcher: Bash) | hooks/block-destructive.sh |
Permite solo: echo, curl, gh, mkdir, ls, cat, date, printf, test. Bloquea todo lo demas con exit 2. Timeout: 10s. |
Configuracion para proyectos¶
Para usar qa-e2e en un proyecto, agregar al CLAUDE.md del proyecto las variables de entorno y el flujo de testing. El template completo esta en examples/CLAUDE.md.
# Instalar Playwright MCP
claude mcp add playwright -- npx @anthropic-ai/mcp-playwright
# Configurar variables de auth
export QA_E2E_USERNAME="test@example.com"
export QA_E2E_PASSWORD="test-password"
# Lanzar Claude con el plugin
claude --plugin-dir ./plugins/qa-e2e
# Flujo de testing
/qa-e2e:qa-wizard mi-feature # Paso 1: configurar
/qa-e2e:qa-run mi-feature # Paso 2: ejecutar
Agregar a .gitignore:
.context/qa-e2e/config.json
Limitaciones conocidas¶
- No soporta CAPTCHA: Si el formulario de login tiene CAPTCHA, usar la estrategia
manual-sessioncomo workaround. - Sesiones pueden expirar: En
manual-session, si las pruebas tardan mucho la sesion capturada puede expirar. Re-ejecutar qa-wizard para recapturar. - Un browser a la vez: Playwright MCP ejecuta en un solo browser. Los ACs se prueban en secuencia, no en paralelo.
- Screenshots como texto: Los screenshots se describen como texto en los issues de GitHub, no se adjuntan como imagenes (limitacion de
gh issue create). - Requiere servidor corriendo: El servidor de pruebas debe estar levantado antes de ejecutar qa-run. El plugin no lo levanta automaticamente.