Testumgebungen sind ein entscheidendes Element des Automatisierungsprozesses beim Testen. Sie bieten eine stabile Plattform für die Ausführung von Automatisierungstests und die frühzeitige Identifizierung von Fehlern in der Entwicklung.
Geschichte der Frage:
Frühe Ansätze zum Testen erforderten eine manuelle Konfiguration der Umgebungen, was zu unvorhersehbaren Ergebnissen führte. Mit der Entwicklung der Automatisierung entstand die Notwendigkeit nach Standardisierung und Kontrolle über die Testinfrastruktur – sowohl physisch (Maschinen, Netzwerke) als auch softwaretechnisch (Konfigurationen, Datenbanken, Versionen von Services).
Problem:
Die hauptsächlichen Schwierigkeiten hängen zusammen mit:
Lösung:
Die Verwendung von Containerisierung (Docker), Orchestrierung (Kubernetes) sowie Infrastructure as Code (Terraform, Ansible) hilft, benötigte Umgebungen schnell einzurichten, die Konfiguration von Testdaten wird vorhersehbar und das Skalieren wird erleichtert. Die CI/CD-Bindung ermöglicht es, Umgebungen automatisch für jeden Build zu starten und Änderungen sofort zu testen.
Wichtige Merkmale:
Kann man automatische Tests in der Produktionsumgebung für maximale Realitätstauglichkeit ausführen?
Nein, das ist unerwünscht. Das Ausführen von Tests in der Produktion kann echte Daten gefährden und die Benutzererfahrung beeinträchtigen. Für automatisierte Tests werden separate Umgebungen mit Kopien der Hauptservices und kontrollierten Daten verwendet.
Reicht eine einzige Testumgebung für alle Teams aus?
Nein. Bei gleichzeitiger Arbeit mehrerer Teams können Testdaten oder Services in Konflikt geraten. Es ist besser, separate Stände bereitzustellen oder einen Mechanismus zur Bereinigung und Initialisierung der Daten für jede Ausführung zu implementieren.
Stimmen Testumgebungen oft vollständig mit der Produktionsumgebung überein?
Praktisch ist das aufgrund von Ressourcen-, Lizenz- oder Sicherheitsbeschränkungen nicht immer der Fall. Bei signifikanten Unterschieden zwischen Test- und Produktionsumgebung verlieren automatisierte Tests ihre Effektivität und zeigen eine "falsche" Stabilität.
Für alle automatisierten Tests wird ein einziger statischer Testserver verwendet, der aufgrund gleichzeitiger Testausführungen verschiedener Teams regelmäßig ausfällt. Es treten Bugs auf, die in der Produktion nicht existieren, während echte Bugs aufgrund von Unterschieden in der Umgebung nicht reproduziert werden können.
Vorteile:
Nachteile:
Jeder Pull-Request wird automatisch in einer isolierten Umgebung (mithilfe von Docker Compose und Cloud) bereitgestellt. Nach den Tests wird die Umgebung automatisch zerstört.
Vorteile:
Nachteile: