Is deze test instabiel, of is het een echte bug?
Een instabiele test faalde en slaagde vervolgens bij een herhaalde poging zonder dat iemand iets repareerde, terwijl een echte bug faalt om een reden die geen herhaalde poging verandert. Nexus Studio, van Verdict System LLC, maakt dit onderscheid door elke herhaalde poging vast te leggen: FLAKY voor een mislukking waarna een herhaalde poging slaagde, BREACHED voor een echte bevinding en BREACHED_FLAKY voor een mislukking die zelf inconsistent is. Een herhaalde poging maakt van een defect nooit een groene uitvoering.
Door het team van Nexus Studio, Verdict System LLC. 7 oktober 2026.
Wat is een instabiele test?
Een instabiele test is een test waarvan de pogingen verschillende resultaten opleveren: hij faalt de ene keer en slaagt bij een andere poging, zonder wijzigingen in de code of de test. In Nexus Studio heeft dit woord één betekenis. FLAKY is een test die faalde en vervolgens bij een herhaalde poging slaagde, zonder dat er iets automatisch werd hersteld. Er is iets instabiel, in de applicatie of in de test, en er is niets gerepareerd.
Een harde fout die bij elke poging optreedt, is niet instabiel, ook niet wanneer de automatische herstelstap tevergeefs heeft geprobeerd een selector te repareren. Een eerdere versie van de engine classificeerde dit geval als FLAKY. Teams lezen FLAKY als "de test deugt niet" en gaan verder, waardoor een defecte applicatie werd uitgebracht omdat de fout als ruis werd beschouwd. De engine doet dat niet meer.
Verbergen herhaalde pogingen echte bugs?
Dat kan, en dat komt door het aantal statussen. Met alleen geslaagd en mislukt maakt een geslaagde herhaalde poging een rode uitvoering groen, waardoor een defect dat af en toe optreedt in de applicatie onzichtbaar wordt. Dat is een van de duurste soorten bugs om op te sporen. Als rood ook een kortstondige netwerkstoring of een vastgelopen browser kan betekenen, leert het team rode uitvoeringen opnieuw te starten in plaats van ze te onderzoeken, en verliest de testsuite aan vertrouwen.
Nexus Studio houdt de herhaalde poging zichtbaar. Een test die faalde en vervolgens slaagde, is niet SECURE. De test eindigt met afsluitcode 0 in CI en laat de build dus niet mislukken, maar verschijnt in het rapport en in Geschiedenis als FLAKY: geslaagd met een voorbehoud. Zie hoe de 14 oordelen worden bepaald voor de volledige volgorde van de controles.
Wat is het verschil tussen FLAKY, BREACHED en BREACHED_FLAKY?
- FLAKY: mislukt, vervolgens geslaagd bij een herhaalde poging, zonder dat er iets werd gerepareerd. Lees het bestand raw-data.json van de mislukte poging en bekijk daarna de trend in Geschiedenis. De afsluitcode is 0.
- BREACHED: de test faalde bij één enkele poging en geen patroon in de omgeving of het testharnas verklaart de fout. Een assertie is mislukt. Dit is de bugmelding en de afsluitcode is 1.
- BREACHED_FLAKY: de test faalde bij de laatste poging na een eerdere herhaalde poging, en geen patroon in de omgeving of het testharnas verklaart dit. De mislukking zelf is inconsistent. Vergelijk de pogingen voordat je een bug meldt. De afsluitcode is 1.
Twee verwante oordelen houden het beeld zuiver. AUTO_RECOVER is een geslaagde test waarbij automatisch herstel een selector heeft vervangen, dus de locator van de auteur werkt niet meer en de test is niet zuiver. Een eerste poging die alleen door tijdsoverschrijding faalde en vervolgens bij een herhaalde poging slaagde, is SECURE, omdat dat op vertraging wijst, niet op instabiliteit.
Voordat een mislukking BREACHED of BREACHED_FLAKY kan zijn, sluit de classificatie de andere verklaringen in een vaste volgorde uit: een fout in het testharnas, een crash, een blokkade, een onbereikbare host en een time-out. Alleen een mislukking die door geen van deze oorzaken wordt verklaard, is een bevinding. Daarom komt een time-out of een CAPTCHA niet als bugmelding binnen.
Hoe worden herhaalde pogingen geteld?
De engine leest het pogingnummer van de uitvoering. Een geslaagde test met een herhalingsnummer hoger dan nul is FLAKY, tenzij een selector automatisch is hersteld; in dat geval is het AUTO_RECOVER. Een mislukte test of een test met een time-out met een herhalingsnummer hoger dan nul, zonder verklaring vanuit de omgeving, is BREACHED_FLAKY. Voor een zuiver geslaagde test moet het herhalingsnummer nul zijn en mag er geen selector automatisch zijn hersteld.
FLAKY betekent dat de pogingen verschillende resultaten opleverden, en niets anders. Een mislukking bij één enkele poging, zonder herhaalde pogingen, krijgt nooit het label instabiel. Elke rij in Geschiedenis legt ook retry_attempt en attempts vast, zodat het aantal bij de uitvoering bewaard blijft.
Welk bewijsmateriaal laat elk oordeel achter?
- FLAKY: screenshot.png, metadata.json en raw-data.json. De map bewaart het bestand raw-data.json van de mislukte poging, zodat een herhaalde poging die de mislukking verborg toch een logboek achterlaat. Dit volgt de instelling Bewijsmateriaal van een geslaagde test met FLAKY / AUTO_RECOVER bewaren, die standaard is ingeschakeld.
- BREACHED_FLAKY: report.md, metadata.json, raw-data.json en screenshot.png, en de video van de mislukking wordt standaard bewaard.
- BREACHED: dezelfde bestanden, waarbij de video standaard wordt bewaard.
Het oordeel staat in de naam van de map met bewijsmateriaal, bijvoorbeeld een naam die eindigt op [BREACHED]. De pagina Bewijsmateriaal volgt één mislukte test door alle bestanden heen.
Hoe herkent Geschiedenis een test met wisselende resultaten?
History bewaart voor elke test en browser of elk apparaat één rij per uitvoering, met het oordeel, de herhaalpoging en de foutsignatuur. Op basis van die rijen toont het trends per sessie, dag of week: Achteruitgegaan, Hersteld, Nog steeds defect en Trager. Een test die groen, rood en weer groen wordt, verschijnt daar in plaats van te verdwijnen tussen de herhaalde uitvoeringen.
De risicorangschikking in Evidence Locker en Patrol rangschikt tests op basis van hoe vaak ze van resultaat wisselen, mislukken of tijd kosten. Ze toont ook een voorspeld risico op basis van logistische regressie op je testgeschiedenis, met EWMA als terugvaloptie bij weinig gegevens. Bij minder dan vijf uitvoeringen wordt niets als instabiel aangemerkt, omdat één of twee uitvoeringen geen patroon kunnen aantonen.
Beperkingen
- Herhaalpogingen maken het onderscheid tussen FLAKY en SECURE en tussen BREACHED_FLAKY en BREACHED. Als herhaalpogingen uitstaan, wordt een fout die af en toe optreedt een BREACHED.
- INSTABIEL betekent dat de pogingen verschillende resultaten opleverden. Het zegt niet waarom. De oorzaak in de applicatie of de test vinden blijft mensenwerk.
- De classificatie leest foutteksten, waardoor een aangepaste assertiemelding met woorden zoals
403ofForbiddenals een omgevingsprobleem kan worden geïnterpreteerd. Open metadata.json als een oordeel je verrast. - Bij minder dan vijf uitvoeringen merken History en de risicorangschikking niets als instabiel aan.
Volgende stappen
De Evidence-pagina toont elk bestand dat een mislukte test achterlaat, en Hoe Nexus Studio tot 14 testoordelen komt legt de volgorde van de controles uit. De proefversie van 30 dagen gebruikt dezelfde engine voor je eigen tests.
Wil je de controle eerst op je eigen machine uitvoeren, dan vind je in Hoe onderscheid ik een echte fout van een onbetrouwbare test? een uitvoerbaar voorbeeld.