@matware/e2e-runner 1.3.0: Learning Feedback Loop, Multi-Pool y 8 Nuevos Action Types
El release más ambicioso de nuestro test runner E2E. Sistema de aprendizaje que retroalimenta la creación de tests, routing inteligente entre múltiples Chrome pools, GraphQL declarativo, y un plugin completo para Claude Code.


La versión 1.3.0 de @matware/e2e-runner representa el salto más significativo desde el lanzamiento inicial. Con 20 commits, más de 17,000 líneas de código añadidas, y un rediseño fundamental en cómo el sistema aprende de sus propias ejecuciones, este release transforma e2e-runner de un test runner en un asistente de testing inteligente.
Multi-Pool e Infraestructura Distribuida
La primera gran área de mejoras apunta a escenarios enterprise donde un solo pool de Chrome no es suficiente.
Routing por Least-Pressure
Ahora puedes configurar múltiples endpoints de Chrome (browserless/chrome, chrome-headless-shell, o cualquier CDP-compatible) y el sistema rutea automáticamente cada test al pool con menor carga:
{
"pools": [
{ "url": "ws://chrome-1:3000", "maxConcurrency": 10 },
{ "url": "ws://chrome-2:3000", "maxConcurrency": 10 },
{ "url": "ws://chrome-3:3000", "maxConcurrency": 5 }
],
"routing": "least-pressure"
}
El balanceador considera tanto conexiones activas como tiempos de respuesta recientes, distribuyendo la carga de manera óptima.
Watch Mode
Para desarrollo iterativo, el nuevo watch mode re-ejecuta tests automáticamente cuando detecta cambios en archivos:
npx @matware/e2e-runner run --watch
Combina esto con el dashboard para un ciclo de feedback instantáneo mientras desarrollas tests.
Arquitectura Hub/Agent
Para equipos que necesitan testing distribuido geográficamente, introducimos una arquitectura hub/agent. Un hub central coordina múltiples agentes remotos, cada uno con su propio pool de Chrome. Los resultados se consolidan en tiempo real en el dashboard central.
8 Nuevos Action Types
El vocabulario de acciones disponibles en tus tests JSON creció significativamente.
GraphQL Declarativo
El nuevo action type gql elimina la necesidad de wrappear llamadas GraphQL en bloques evaluate gigantes:
{
"action": "gql",
"endpoint": "/graphql",
"query": "query GetUser($id: ID!) { user(id: $id) { name email } }",
"variables": { "id": "123" },
"assert": {
"user.name": { "exists": true },
"user.email": { "contains": "@" }
}
}
Las assertions se evalúan inline contra la respuesta, con paths JSON para navegar estructuras anidadas.
Storage Actions
Manipula y verifica localStorage/sessionStorage directamente:
{ "action": "set_storage", "key": "auth_token", "value": "test-token-123" },
{ "action": "assert_storage", "key": "auth_token", "exists": true }
Ideal para tests que necesitan simular estados de autenticación o preferencias de usuario.
Interacciones UI Complejas
Tres nuevos action types para interacciones que antes requerían selectores frágiles:
- click_icon: Click en iconos por nombre semántico (search, menu, close)
- click_menu_item: Navega menús dropdown por texto del item
- click_in_context: Click relativo a un elemento contenedor
{ "action": "click_icon", "icon": "settings", "near": ".user-profile" },
{ "action": "click_menu_item", "menu": ".dropdown", "item": "Cerrar sesión" }
Wait Network Idle
Para SPAs con carga asíncrona compleja, wait_network_idle espera hasta que no haya requests pendientes por un período configurable:
{ "action": "wait_network_idle", "timeout": 5000, "idleTime": 500 }
Learning Feedback Loop
Esta es la estrella del release, y merece una explicación detallada.
Hasta ahora, los datos de ejecución fluían en una sola dirección: ejecutar tests, almacenar resultados, mostrar en dashboard. El sistema acumulaba conocimiento pero no lo utilizaba activamente.
Con 1.3.0, el sistema aprende y retroalimenta en dos momentos críticos:
Al Crear Tests
Cuando creas un nuevo test (manual o via MCP), el sistema consulta su base de learnings y te advierte:
- Selectores que han sido inestables históricamente
- Selectores estables con alta tasa de éxito
- Páginas con tiempos de carga problemáticos
- Errores frecuentes en tests similares
Al Ejecutar Tests
Cuando un test falla, el sistema no solo reporta el error — sugiere fixes concretos basados en patrones observados:
- Selectores alternativos que funcionaron en contextos similares
- Waits adicionales para elementos con carga asíncrona conocida
- Configuraciones de retry para endpoints intermitentes
Validación Inteligente
El sistema detecta anti-patterns antes de que causen problemas:
// Este evaluate SIEMPRE pasa - el sistema lo detecta
{
"action": "evaluate",
"script": "return `Solicitudes: ${hasSolicitudes}`"
}
Genera un warning: “Este test siempre pasará porque retorna un string truthy independientemente del valor de hasSolicitudes”.
También detecta:
- Dependencias implícitas entre tests
- Waits con valores numéricos fijos (anti-pattern vs. wait for selector)
- Assertions que nunca pueden fallar
Claude Code Plugin Completo
El plugin MCP se rediseñó completamente con tres agentes especializados:
test-creator
Genera tests a partir de descripciones en lenguaje natural, consultando los learnings para evitar selectores problemáticos desde el inicio.
test-analyzer
Analiza tests existentes, identifica fragilidades, y sugiere mejoras basadas en el historial de ejecuciones.
test-improver
Toma tests que fallan frecuentemente y los refactoriza aplicando los patrones exitosos del proyecto.
Los tres agentes utilizan skills con referencias on-demand — el contexto se carga solo cuando es necesario, evitando sobrecargar la ventana de contexto del LLM.
Compatible con Claude Code y OpenCode.
Instalación
Actualizar es directo:
npm install @matware/e2e-runner@1.3.0
Para el plugin de Claude Code:
claude plugin install @anthropic/claude-code-marketplace/fastslack/e2e-runner
Si vienes de una versión anterior, los learnings existentes se migran automáticamente al nuevo schema.
Conclusión
La versión 1.3.0 representa una evolución fundamental en cómo pensamos el testing automatizado. No es solo ejecutar tests y reportar resultados — es construir un sistema que aprende de cada ejecución y usa ese conocimiento para hacer tests más robustos, más mantenibles, y más fáciles de crear.
El código completo está disponible en GitHub. Issues, PRs, y feedback son bienvenidos.