Automatisering van testen begon historisch gezien met het idee om de snelheid te verhogen en de menselijke factor in de controles te verminderen, maar het bleek al snel dat geautomatiseerde tests vaak anders reageren bij elke uitvoering. Herhaalbaarheid (repeatability) en determinisme zijn een van de basisvereisten voor de kwaliteit van autotests, die hetzelfde resultaat moeten geven onder dezelfde omstandigheden.
Problemen ontstaan door impliciete afhankelijkheden: onbetrouwbare testgegevens, niet-synchroniseerde omgevingen, parallelle processen of externe services. Dit leidt tot flaky tests — de resultaten daarvan zijn niet te voorspellen.
Oplossingen zijn gebaseerd op strikte controle van de uitvoeringsomgeving, isolatie van tests, mock/stub-objecten, statische gegevens en reproduceerbare scenario's (bijvoorbeeld het schoonmaken en voorbereiden van de database voor elke test).
Kernkenmerken:
Wat te doen als een flaky test alleen in CI optreedt, terwijl het lokaal stabiel is?
Dit heeft bijna altijd te maken met verschillen in omgevingen: versies van afhankelijkheden, snelheid van infrastructuur, parallelisme, configuratie van het besturingssysteem of de volgorde van testuitvoering. De oplossing is om de CI-omgeving zo dicht mogelijk bij de dev-machine te brengen (Docker, gelijke seed-waarden, configuratie van setUp/tearDown in tests).
Kunnen parameterized tests volledig deterministisch worden beschouwd als de gegevens uit de database komen?
Nee. Zelfs als de basisgegevens overeenkomen, kan de database tussen tests of tussen releases veranderen. Voor ware determinisme moeten de gegevens expliciet worden voorbereid en gewist in elke test.
Zal het gebruik van sleep om te wachten op het laden van elementen het probleem van onbetrouwbare UI-tests oplossen?
Nee. Sleep maskeert slechts het probleem en vertraagt de uitvoering van tests. Het is correct om expliciete wachttijden (Explicit Waits) te gebruiken, die wachten op specifieke voorwaarden in plaats van een vaste tijd.
In een project werden UI-tests uitgevoerd op een omgeving die niemand na handmatige tests schoonmaakte. Om de paar nachten faalden de tests met "random" fouten die lokaal niet voorkwamen. Het team voegde sleep toe aan de tests en negeerde de flaky-problemen.
Pluspunten:
Minpunten:
Na de komst van een ervaren DevOps-engineer implementeerde het team scripts voor het resetten en initiëren van testgegevens, voegden ze mockservices toe voor onbetrouwbare integraties en begonnen ze tests in containers uit te voeren. Flaky tests verdwenen bijna geheel.
Pluspunten:
Minpunten: