Testomgevingen zijn een cruciaal element van het automatiseringsproces van testen. Ze bieden een stabiel platform voor het uitvoeren van geautomatiseerde tests en het opsporen van bugs in de vroege stadia van de ontwikkeling.
Achtergrond van de vraag:
Vroege testaanpakken vereisten handmatige configuratie van omgevingen, wat leidde tot onvoorspelbare resultaten. Met de ontwikkeling van automatisering ontstond de behoefte aan standaardisatie en controle over de testinfrastructuur — zowel fysiek (machines, netwerken) als softwarematig (instellingen, databases, versies van services).
Probleem:
De belangrijkste complicaties zijn gerelateerd aan:
Oplossing:
Het gebruik van containerisatie (Docker), orkestratie (Kubernetes) en infrastructure as code (Terraform, Ansible) helpt om snel de benodigde omgevingen op te zetten, de configuratie van testdata voorspelbaar te maken en schaling te vergemakkelijken. CI/CD-koppelingen maken het mogelijk om automatisch omgevingen voor elke build te implementeren en wijzigingen direct te testen.
Belangrijkste kenmerken:
Is het mogelijk om geautomatiseerde tests in de productieomgeving uit te voeren voor maximale realiteitszin?
Nee, dit is ongewenst. Het draaien van tests in de productie kan echte gegevens beschadigen en de werking voor gebruikers verstoren. Voor geautomatiseerde tests worden aparte omgevingen met kopieën van de belangrijkste services en gecontroleerde gegevens gebruikt.
Is één testomgeving voldoende voor alle teams?
Nee. Bij gelijktijdig werkende teams kunnen testdata of services conflicteren. Het is beter om aparte omgevingen toe te wijzen of een mechanisme voor het opschonen en initialiseren van gegevens voor elke run te implementeren.
Komt het vaak voor dat testomgevingen volledig overeenkomen met productieomgevingen?
In de praktijk is dit niet altijd het geval door beperkingen in middelen, licenties of veiligheid. Bij aanzienlijke verschillen tussen de test- en productieomgeving verliezen geautomatiseerde tests hun effectiviteit en vertonen ze een "valse" stabiliteit.
Voor alle geautomatiseerde tests wordt één statische testserver gebruikt, die af en toe kapot gaat door gelijktijdige uitvoering van tests van verschillende teams. Er ontstaan bugs die niet in productie voorkomen, en echte bugs worden niet gereproduceerd door verschillen in de omgeving.
Voordelen:
Nadelen:
Elke pull request wordt automatisch geïmplementeerd in een geïsoleerde omgeving (met behulp van Docker Compose en de cloud). Na de tests wordt de omgeving automatisch vernietigd.
Voordelen:
Nadelen: