@matware/e2e-runner 1.3.0: Learning Feedback Loop, Multi-Pool & 8 Nieuwe Action Types
Onze meest ambitieuze release tot nu toe. Een lerend systeem dat terugkoppelt naar testcreatie, intelligente routing over meerdere Chrome pools, declaratieve GraphQL, en een complete Claude Code plugin.


Versie 1.3.0 van @matware/e2e-runner vertegenwoordigt de grootste sprong sinds de eerste lancering. Met 20 commits, meer dan 17.000 regels code toegevoegd, en een fundamenteel herontwerp van hoe het systeem leert van zijn eigen uitvoeringen, transformeert deze release e2e-runner van een test runner naar een intelligente testing assistent.
Multi-Pool & Gedistribueerde Infrastructuur
Het eerste grote verbeteringsgebied richt zich op enterprise scenario’s waar een enkele Chrome pool niet voldoende is.
Least-Pressure Routing
Je kunt nu meerdere Chrome endpoints configureren (browserless/chrome, chrome-headless-shell, of elk CDP-compatibel systeem) en het systeem routeert automatisch elke test naar de pool met de laagste belasting:
{
"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"
}
De balancer houdt rekening met zowel actieve verbindingen als recente responstijden, en distribueert de belasting optimaal.
Watch Mode
Voor iteratieve ontwikkeling herstart de nieuwe watch mode automatisch tests wanneer bestandswijzigingen worden gedetecteerd:
npx @matware/e2e-runner run --watch
Combineer dit met het dashboard voor directe feedback tijdens het ontwikkelen van tests.
Hub/Agent Architectuur
Voor teams die geografisch gedistribueerd testen nodig hebben, introduceren we een hub/agent architectuur. Een centrale hub coördineert meerdere remote agents, elk met hun eigen Chrome pool. Resultaten worden realtime geconsolideerd op het centrale dashboard.
8 Nieuwe Action Types
Het vocabulaire van beschikbare acties in je JSON tests is aanzienlijk gegroeid.
Declaratieve GraphQL
Het nieuwe gql action type elimineert de noodzaak om GraphQL calls te wrappen in gigantische evaluate blokken:
{
"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": "@" }
}
}
Assertions worden inline geëvalueerd tegen de response, met JSON paths om geneste structuren te navigeren.
Storage Actions
Manipuleer en verifieer localStorage/sessionStorage direct:
{ "action": "set_storage", "key": "auth_token", "value": "test-token-123" },
{ "action": "assert_storage", "key": "auth_token", "exists": true }
Ideaal voor tests die authenticatiestaten of gebruikersvoorkeuren moeten simuleren.
Complexe UI Interacties
Drie nieuwe action types voor interacties die voorheen fragiele selectors vereisten:
- click_icon: Klik op iconen via semantische naam (search, menu, close)
- click_menu_item: Navigeer dropdown menu’s via itemtekst
- click_in_context: Klik relatief aan een container element
{ "action": "click_icon", "icon": "settings", "near": ".user-profile" },
{ "action": "click_menu_item", "menu": ".dropdown", "item": "Uitloggen" }
Wait Network Idle
Voor SPAs met complexe asynchrone loading wacht wait_network_idle tot er geen pending requests zijn voor een configureerbare periode:
{ "action": "wait_network_idle", "timeout": 5000, "idleTime": 500 }
Learning Feedback Loop
Dit is de ster van de release, en verdient een gedetailleerde uitleg.
Tot nu toe stroomden uitvoeringsgegevens in één richting: tests uitvoeren, resultaten opslaan, weergeven in dashboard. Het systeem verzamelde kennis maar gebruikte het niet actief.
Met 1.3.0 leert het systeem en koppelt terug op twee kritieke momenten:
Bij Het Creëren van Tests
Wanneer je een nieuwe test maakt (handmatig of via MCP), raadpleegt het systeem zijn learnings database en waarschuwt je voor:
- Selectors die historisch instabiel zijn geweest
- Stabiele selectors met hoge succespercentages
- Pagina’s met problematische laadtijden
- Frequente fouten in vergelijkbare tests
Bij Het Uitvoeren van Tests
Wanneer een test faalt, rapporteert het systeem niet alleen de fout — het suggereert concrete fixes gebaseerd op waargenomen patronen:
- Alternatieve selectors die werkten in vergelijkbare contexten
- Extra waits voor elementen met bekende async loading
- Retry configuraties voor intermitterende endpoints
Intelligente Validatie
Het systeem detecteert anti-patterns voordat ze problemen veroorzaken:
// Deze evaluate slaagt ALTIJD - het systeem detecteert dit
{
"action": "evaluate",
"script": "return `Aanvragen: ${hasRequests}`"
}
Het genereert een waarschuwing: “Deze test zal altijd slagen omdat het een truthy string retourneert ongeacht de waarde van hasRequests”.
Het detecteert ook:
- Impliciete afhankelijkheden tussen tests
- Waits met vaste numerieke waarden (anti-pattern vs. wait for selector)
- Assertions die nooit kunnen falen
Complete Claude Code Plugin
De MCP plugin is volledig herontworpen met drie gespecialiseerde agents:
test-creator
Genereert tests vanuit natuurlijke taalbeschrijvingen, raadpleegt learnings om problematische selectors vanaf het begin te vermijden.
test-analyzer
Analyseert bestaande tests, identificeert kwetsbaarheden, en suggereert verbeteringen gebaseerd op uitvoeringsgeschiedenis.
test-improver
Neemt vaak falende tests en refactort ze met toepassing van de succesvolle patronen van het project.
Alle drie agents gebruiken skills met on-demand references — context wordt alleen geladen wanneer nodig, om overbelasting van het LLM context window te voorkomen.
Compatibel met Claude Code en OpenCode.
Installatie
Updaten is eenvoudig:
npm install @matware/e2e-runner@1.3.0
Voor de Claude Code plugin:
claude plugin install @anthropic/claude-code-marketplace/fastslack/e2e-runner
Als je van een eerdere versie komt, worden bestaande learnings automatisch gemigreerd naar het nieuwe schema.
Conclusie
Versie 1.3.0 vertegenwoordigt een fundamentele evolutie in hoe we denken over geautomatiseerd testen. Het gaat niet alleen om tests uitvoeren en resultaten rapporteren — het gaat om het bouwen van een systeem dat leert van elke uitvoering en die kennis gebruikt om tests robuuster, beter onderhoudbaar en makkelijker te maken.
De volledige code is beschikbaar op GitHub. Issues, PRs en feedback zijn welkom.