Je tests blijven in Playwright, Selenium en pytest. We vervangen ze niet. We maken ze geschikt voor zakelijk gebruik, en alles blijft van jou: code, bewijsmateriaal en geschiedenis.
Eén mislukte test. Alles wat die op je schijf achterliet.
Een echte uitvoering, geen demonstratiemodel: TC92 op 2026-09-30, zonder zichtbaar browservenster, in Chromium, Firefox en WebKit. De test opent example.com, volgt Learn more naar IANA en verwacht de kop Example Domain. Op de pagina staat Example Domains. Dit zijn de bestanden van de Chromium-uitvoering, hun werkelijke grootte en wat elk bestand bevat.
in de uitvoeringsmap, plus één rij in Geschiedenis
531.2 kB
de hele map, inclusief de video
32 velden
in metadata.json, voor machines
9 secties
in report.md, het forensische rapport
Wat één mislukte test achterlaat
Wat bewaart de Evidence Locker wanneer een test mislukt?
Een mislukte test slaat een map op met het forensische rapport, de metagegevens, het onbewerkte logboek en een schermafbeelding van het beeld waarop de test mislukte, plus de video bij een echte fout. Regel 23 van TC92_Iana_heading.js verwacht dat de kop Example Domain luidt. Op de pagina van IANA staat Example Domains: in 10000 ms vond de locator 23 keer een overeenkomst en las hij elke keer het meervoud. BREACHED, op alle drie de engines. Hier zie je het beeld waarop de test mislukte, en elk bestand dat werd weggeschreven.
https://www.iana.org/help/example-domains
screenshot.png · 89.8 kB · één schermafbeelding van het laatste beeld binnen het zichtbare paginagebied, 1280×720: wat een gebruiker zou hebben gezien toen de controle werd uitgevoerd
In de Evidence Locker wordt hetzelfde record op vijf tabbladen geopend:
ReportMetadataTelemetryRaw LogAI Analysis
report.md5.3 kB
Het forensische rapport, in Markdown: leesbaar zonder de Studio.
Incident summary
Root cause analysis
Network telemetry
Failure timeline
Historical stability
Self-healing log
Evidence artifacts
Performance budget
Lazy-loading audit
Gebruik dit om een melding aan te maken: de incidentsamenvatting vermeldt de test, browser, pagina en bedrijfsimpact, en de hoofdoorzaakanalyse vermeldt de mislukte controle, selector, verwachte en ontvangen waarden en de broncoderegel.
metadata.json2.2 kB
32 velden, machineleesbaar. Enkele daarvan, zoals vastgelegd:
Gebruik dit om mislukkingen te filteren met een script in plaats van een Markdown-parser. Dit is ook het bestand dat de bewijsketen verzegelt: een map met een metadata.json is een dossier.
raw-data.json5.1 kB
Het onbewerkte logboek: elke consoleregel, netwerkfout, beveiligingskwestie en paginafout van de uitvoering, plus de prestatiemetingen.
Gebruik dit om te zien wat de pagina rond de mislukking deed. Bij een geslaagde test met FLAKY of AUTO_RECOVER blijft het bestand raw-data.json van de mislukte poging bewaard, zodat een nieuwe poging die de mislukking verborg toch een logboek achterlaat.
Telemetrygemeten
Gemeten aan het einde van de test en vergeleken met je limieten. De balk toont de meting ten opzichte van de limiet.
LCP992 / 2500 ms
FCP992 / 1800 ms
CLS0.0295 / 0.1
TTFB727 / 800 ms
TBT0 / 200 ms
DOM114 / 1500 nodes
Heap5 / 50 MB
INPnot measured
Alles blijft binnen de limieten, en het rapport markeert TTFB als dicht bij de limiet. Bij INP staat niet gemeten, nooit geslaagd: op de gemeten pagina is niets aangeklikt of getypt. De controle op uitgesteld laden gaf de pagina 85 van de 100 punten, beoordeling B: één afbeelding zonder breedte en hoogte.
Gebruik dit om een trage pagina te onderscheiden van een onjuiste assertie.
video.webm428.8 kB
0:08 van 0:16
De hele sessie, 16.6 seconden: example.com, de klik op Meer informatie, daarna de pagina van IANA terwijl de controle opnieuw werd geprobeerd. Bewaard omdat de uitvoering BREACHED was, en afspeelbaar in de Bewijskluis. Bij een echte fout blijft de video bewaard: standaard bij BREACHED, BREACHED_FLAKY en CHAOS_BREACHED, en bij TIMEOUT en BLOCKED als je die inschakelt in Instellingen. CRASHED en UNREACHABLE worden nooit aangeboden, omdat die opnamen beschadigd of leeg zijn. Alleen Playwright-uitvoeringen voor het web en geëmuleerde mobiele apparaten worden opgenomen: een echte Android-telefoon, een Selenium-uitvoering en een API-test niet.
Gebruik dit om stap voor stap te zien hoe de pagina bij de mislukte controle terechtkwam; de schermafbeelding hierboven is het laatste beeld.
AI-analyseje AI
Standaard ingeschakeld, als je AI is verbonden. Met een lokaal Ollama-model, de standaardoptie, of een andere aanbieder die je kiest, voegt de engine vier koppen toe aan het rapport: Diagnose, Waarschijnlijke oorzaak, Impact en Aanbevolen actie. Als je eigen AI-opdrachtregelprogramma is ingeschakeld in de AI-schrijver, leest dat na de uitvoering in plaats daarvan report.md, voor maximaal vijf fouten per uitvoering, en voegt het een vijfde kop toe:
Diagnosis
Classificatie (alleen opdrachtregelprogramma)
Probable cause
Impact
Recommended action
De classificatie is precies één van APP_BUG, APP_CHANGE, TEST_AUTHORSHIP, TEST_SETUP of INFRA_FLAKY. Geen AI verbonden: geen analyse, en de vijf bestanden blijven ongewijzigd.
trace.zip is een zesde bestand. Als Forensische trace vastleggen bij mislukking aanstaat, wat standaard het geval is, bevat een BREACHED-map ook een Playwright-trace (DOM-momentopnamen, schermafbeeldingen en bronbestanden), te openen met npx playwright show-trace trace.zip. Deze wordt niet vastgelegd op een echte Android-telefoon. TC92 werd uitgevoerd voordat tracing standaard werd ingeschakeld, dus die map bevat de vijf bestanden hierboven.
Wat er bij één mislukking wordt vastgelegd
TC91 op chromium, 2026-09-30 13:26 TIMEOUT
De daadwerkelijke map van de testuitvoering die wordt afgespeeld in de demo bovenaan de startpagina, een test die opzettelijk is opgezet met de oude linktekst van example.com, zoals de Evidence Locker die opent: bug-reports/chromium/TC91 - Example more info/2026-09-30_13-26 [TIMEOUT].
https://example.com/
screenshot.png · 12.6 kB · het exacte beeld op het moment van de mislukking
report.md4.9 kBIncidentsamenvatting, hoofdoorzaak, netwerktelemetrie, tijdlijn van de mislukking, historische stabiliteit, zelfherstellogboek, bewijsbestanden, prestatiebudget en controle op uitgesteld laden.
metadata.json2.3 kB32 velden, waaronder de selector, de wachttijd van 30000ms, stabiliteit CRITICAL, opeenvolgende mislukkingen, poging 2 van 2, stealth en de score voor uitgesteld laden (100, A).
Telemetryin het rapportLCP 156 ms · FCP 156 ms · CLS 0.0018 · TTFB 122 ms · TBT 0 ms · 808 DOM-knooppunten · 2 MB heap. INP niet gemeten: niets om te meten.
video.webmechte foutenOpgenomen bij een echte fout. Bij een TIMEOUT zoals deze wordt geen video bewaard, omdat TIMEOUT standaard uitstaat, en dat staat ook in het rapport.
AI-analyseje AIAls je AI is gekoppeld, voegt die een diagnose, de waarschijnlijke oorzaak, de impact en een aanbevolen actie aan het rapport toe; via je eigen AI-opdrachtregelprogramma wordt de fout ook geclassificeerd.
Beoordelingen
Wat zijn de 14 oordelen, en wat doe je daarna?
Elk van de 14 oordelen geeft aan wie aan zet is: niemand, de test, de toepassing, de omgeving of het testharnas. Het oordeel staat in de mapnaam: die van TC92 eindigt op [BREACHED]. De classificatie beoordeelt een fout in een vaste volgorde: eerst het testharnas, dan een crash, een blokkade, een onbereikbare host en een time-out, en pas daarna BREACHED_FLAKY of BREACHED. Een BREACHED is dus een fout die door geen enkel omgevingspatroon wordt verklaard. Elke kaart vermeldt wie aan zet is en wat er onder dat oordeel wordt vastgelegd.
SECURENiemand
Zelfstandig geslaagd: geen nieuwe poging, geen herstelde selector. Geen actie nodig. Opgeslagen in evidence-passed-test, de nieuwste 5 per test en browser.
screenshot.pngmetadata.json
CHAOS_RESILIENTNiemand
Geslaagd terwijl een fout werd geïnjecteerd, dus de app hield stand. Opgeslagen in chaos-runs, los van de bugrapporten, zodat chaostests de stabiliteitscijfers nooit vertekenen.
Groen, maar niet zonder hulp: het zelfherstelmechanisme heeft een defecte selector vervangen. De locator in de test werkt niet meer, en de volgende DOM-wijziging laat de testsuite echt mislukken. Herstel de locator. raw-data.json verschijnt als een nieuwe poging nodig was en hoort bij de mislukte poging.
screenshot.pngmetadata.jsonraw-data.json
FLAKYTest of app
Mislukt, daarna bij een nieuwe poging geslaagd, zonder dat er iets werd hersteld. Dat is onverklaarde instabiliteit in de app of de test, geen oplossing. Lees raw-data.json van de mislukte poging en bekijk daarna de trend in Geschiedenis.
screenshot.pngmetadata.jsonraw-data.json
PERFORMANCE_DEGRADEDApp
De controles slaagden en de pagina was te traag: een limiet voor Web Vitals of lui laden werd overschreden. Adviserend totdat je de controle strikt maakt.
screenshot.pngmetadata.json
A11Y_VIOLATIONApp
De controles slaagden, maar de toegankelijkheidscontrole niet. metadata.json vermeldt elke overtreden axe-core-regel, met de impact en het aantal knooppunten. Adviserend totdat je de controle strikt maakt.
screenshot.pngmetadata.json
SECURITY_VIOLATIONApp
De controles slaagden, maar de beveiligingsheaders voldeden niet (bijvoorbeeld door een ontbrekende CSP). Herstel de antwoordheaders. Adviserend totdat je de controle strikt maakt.
screenshot.pngmetadata.json
BREACHEDApp
Een controle is mislukt en geen patroon in de omgeving of het testharnas verklaart de fout. Lees Verwacht en Ontvangen in report.md, bekijk de video en markeer het vervolgens als Echte bug of Vals alarm, met een reden.
Mislukt bij de laatste poging na een eerdere herhaling: de fout zelf is inconsistent. Vergelijk de pogingen voordat je een bug meldt. De video wordt standaard bewaard.
Mislukt door een geïnjecteerde fout. Een bevinding over weerbaarheid, apart gehouden van de functionele bugrapporten; het rapport vermeldt de toegepaste fout en de impact op de gebruiker. Het bewaarbeleid verwijdert nooit een mislukte uitvoering. De video wordt standaard bewaard.
Reageerde niet op tijd, wat niet bewijst dat de app defect is. Controleer in Telemetrie hoe snel de pagina was voordat je iets bijstelt: een ruimere tijdslimiet verbergt geen defect element, maar laat het later mislukken. De video staat standaard uit; zet deze aan in Instellingen, onder Video van mislukking bewaren voor.
De host was helemaal niet bereikbaar: DNS of de verbinding mislukte voordat er een pagina werd waargenomen. Controleer de URL, het netwerk en de beschikbaarheid van het doel. Geen bevinding over de app. Er werd geen pagina geladen, dus de video zou leeg zijn en wordt niet aangeboden.
De site beschermde zichzelf: een 403, een 429, een blokkeerpagina of een botcontrole. metadata.json benoemt het afweermechanisme als dit op het scherm te zien was. Geen bevinding over de app, en Jira registreert nooit een blokkering. De video staat standaard uit; zet deze aan in Instellingen, onder Video van mislukking bewaren voor.
De browser of het proces is gestopt: een gesloten pagina, een DevTools-protocolfout, een beëindigde WebDriver-sessie. Infrastructuur, niet de app. Controleer de machine en het stuurprogramma. De opname van een vastgelopen browser is onbruikbaar en wordt daarom niet aangeboden.
Niet bij de 14: CONFIG_ERROR (het testharnas kon de test niet starten: een defecte import, een ontbrekende .env-waarde), SKIPPED en INTERRUPTED. Geen daarvan is een resultaat over je app, dus geen ervan levert een bewijsmap of een rij in Geschiedenis op. Een CONFIG_ERROR wordt wel volledig, met een aanwijzing, naar een logbestand onder .run-cache/config-errors/ geschreven, zodat de defecte test wordt hersteld. API-tests hebben zeven eigen beoordelingen: API-tests.
History
Wat legt Geschiedenis vast voor elke uitvoering?
Naast de map voegt elke uitvoering een rij toe aan history/<browser>/<test>/runs.json: standaard de laatste 50 uitvoeringen van elke test in elke browser. Dit zijn de drie rijen van TC92, één per browser, zoals ze zijn vastgelegd. Dezelfde error_signature in alle drie geeft aan dat het om één fout gaat, niet om drie.
Een waarde die de browser niet kan meten, wordt vastgelegd als null, nooit als nul: WebKit rapporteert hier geen TTFB. De tijdstippen in de rijen zijn in UTC, zoals ze worden vastgelegd; mapnamen gebruiken de lokale tijd van de computer, op deze computer UTC−5.
perf bevat LCP, FCP, CLS, TTFB, TBT, INP, langdurige taken, DOM-grootte, heap, elke bezochte pagina en de score voor uitgesteld laden. raw_log_ref en evidence_ref verwijzen terug naar de bovenstaande map.
Wat de engine hieruit weergeeft
TC92 chromium BREACHED 13.7s
expect(locator).toHaveText(expected) failed
at TC92_Iana_heading.js:23 waiting for getByRole('heading', { level: 1 })
stability CRITICAL 0% · 0/1 runs · 1 failed in a row
# TC91, de geënsceneerde demo op de startpagina: een BREACHED, daarna een TIMEOUT
stability CRITICAL 0% · 0/2 runs · 2 failed in a row
De duration_ms van de rij, 12291, is de duur van de test zelf, zoals gemeten door Playwright, bij de tweede van de twee pogingen.
Dezelfde rijen vormen de basis voor de sectie Historische stabiliteit in het rapport, de trends op het scherm Geschiedenis (Verslechterd, Hersteld, Nog steeds defect, Trager) en de risicorangschikking, waarin niets bij minder dan vijf uitvoeringen als onbetrouwbaar wordt aangemerkt.
Hoeveel bewijsmateriaal bewaart Nexus Studio, en hoelang?
Bij een geslaagde test worden een schermafbeelding en de bijbehorende metagegevens bewaard, bij een mislukte test alles wat nodig is om de fout te reproduceren, en de oudste bestanden worden als eerste verwijderd. Een testsuite die elke nacht draait, vult een schijf. De engine begrenst elke map waarnaar deze schrijft, per test en browser, en bewaart al het bewijsmateriaal samen binnen één opslaglimiet, standaard 20 GB, terwijl er 10 GB vrij blijft op de schijf. Zo stopt het schijfgebruik met groeien bij een omvang die je zelf kiest. Bij een mislukte test blijft alles bewaard wat nodig is om de fout te reproduceren: de fout met de bijbehorende selector en waarden, de pagina-URL, het frame, de console-, netwerk- en paginafoutregels, de uitvoeringsomgeving en het platform, en de context van de uitvoering, waartegen deze werd getoetst. De maplimieten en de totale opslaglimiet stel je in bij Instellingen, onder Bewijsmateriaal & Bewaartermijnen.
Dezelfde bestanden zonder de opname, omdat video bij TIMEOUT standaard is uitgeschakeld: 23.9 kB voor de TIMEOUT van TC91, de geënsceneerde demo op de startpagina.
Een geslaagde test
screenshot.pngmetadata.json
Apart van de bugrapporten opgeslagen, de nieuwste 5 per test en browser. De schermafbeelding wordt gebruikt voor de visuele regressievergelijking. Een geslaagde FLAKY- of AUTO_RECOVER-test behoudt ook zijn map, met raw-data.json van de mislukte poging, zolang Bewijsmateriaal van een geslaagde FLAKY / AUTO_RECOVER-test bewaren aanstaat.
Deze drie regels volgden op de uitvoering van TC92. De tijdelijke telemetriebestanden van de uitvoering gelden nooit als bewijsmateriaal: ze worden in een zipbestand gezet, de losse exemplaren worden verwijderd en er blijven maximaal 2 zipbestanden van hoogstens 7 dagen oud bewaard, met een totale omvang van maximaal 500 MB. Die drie limieten zijn NEXUS_CACHE_ZIPS, NEXUS_CACHE_RETENTION_DAYS en NEXUS_CACHE_MAX_MB in .env, geen velden in Instellingen.
In Instellingen verwijdert Cache wissen de mappen test-results en playwright-report van de werkruimte en sluit het elke browser die na een vastgelopen of afgebroken uitvoering is achtergebleven. Dit wordt geweigerd zolang er een patrouille actief is.
Werkruimte · Schijf · de huidige limiet per map
area limit today
Bug reports newest 20 runs per test and browser
Passed tests newest 5 runs per test and browser
API evidence newest 20 passing runs per test; failures kept
Chaos runs newest 20 held runs; runs that broke kept
Smart Monkey newest 10 sessions
Visual regressions newest 10 per test and checkpoint
Run context newest 100 runs
Run history newest 50 runs per test and browser
Chain of custody append-only, never trimmed
Archive no automatic limit
Het paneel Schijf toont alle mappen waarnaar een uitvoering schrijft, de grootste eerst, met hun grootte, aantal bestanden en oudste datum, het totaal en de vrije ruimte op de schijf. Mappen zonder automatische limiet worden gemarkeerd. Opruimen wordt alleen aangeboden waar dat veilig is: de uitvoeringscache, versies van testbestanden ouder dan 14 dagen en Executive-rapporten ouder dan 30 dagen. Bewijsmateriaal en het archief blijven altijd onaangeroerd.
Naast de limieten geldt voor al het bewijsmateriaal samen één budget, standaard 20 GB, en blijft er 10 GB schijfruimte vrij. Na elke uitvoering controleert de engine beide grenzen. Bij overschrijding van een van beide verwijdert de engine de oudste uitvoeringen, geslaagde vóór mislukte, totdat aan beide wordt voldaan; de nieuwste uitvoering van elke test en browser blijft altijd behouden. Het paneel toont hoeveel bewijsmateriaal er is ten opzichte van het budget, hoeveel vrije ruimte er is ten opzichte van de ondergrens en hoeveel ruimte de laatste controle heeft vrijgemaakt, met Onderhoud nu uitvoeren.
Evidence Locker · bewaar wat telt, ruim de rest op
Archiveren… kopieert precies de onderdelen die je aanvinkt naar Weergave → Archief, waarbij Schermafbeelding en Rapport standaard zijn aangevinkt. De kopie staat naast de map met bewijsmateriaal, niet erin, zodat automatische opschoning op basis van de bewaartermijn deze niet raakt en de uitvoering in de Locker onaangeroerd blijft.
Herstellen, op het scherm Archief, zet een record terug op de oorspronkelijke plek en telt het weer mee. Als de map is opgeruimd, worden de gearchiveerde onderdelen teruggeschreven naar de Evidence Locker. Met het oordeel Vals alarm blijft het record buiten de telling.
Schijfruimte vrijmaken verplaatst een map naar de prullenbak. Als het record verzegeld is, legt de engine eerst de verwijdering vast, zodat nexus verify PURGED meldt en niet TAMPERED. Het bewaarbeleid doet hetzelfde wanneer het de oudste map verwijdert, en het register blijft bewijzen welke hash de map had, wie deze heeft verwijderd en wanneer. Verzegeling is optioneel: tot het eerste oordeel Echte fout of Vals alarm, of nexus verify --seal, toont de Locker UNVERIFIED.
Bekijk wat je eigen fouten achterlaten.
30 dagen gratis, met alle functies, op je eigen computers. Geen betaalkaart nodig.