Geschichte der Frage:
Ursprünglich wurden automatisierte Tests oft "aus dem Stegreif" geschrieben, ohne architektonische Trennungen: Prüf-Logik und Ausführungsmechanismen wurden vermischt. Mit dem Wachstum von Projekten wurde offensichtlich, dass die Vermischung von Framework- und Testlogik eine fragile, schwer wartbare Codebasis schafft. Es entstanden architektonische Empfehlungen zur Trennung der Verantwortung.
Problem:
Wenn Tests von internen Implementierungen des Frameworks abhängen oder Logik zur Interaktion mit der Umgebung enthalten, zwingt jede Änderung dazu, viele Tests neu zu schreiben. Testfälle sind komplex, Code wird dupliziert, die Migration auf ein neues Framework oder eine neue Plattform wird erschwert.
Lösung:
Strikte Trennung:
Wichtige Merkmale:
Kann man Testschritte direkt in den Tests schreiben, wenn es sehr wenige sind?
Sollte man nicht. Selbst kurze Tests können wachsen, und das Fehlen von Schichten führt schnell zu Chaos.
Sollten Testszenarien über die Startmechanik Bescheid wissen (z. B. wann Treiber initialisiert werden sollten)?
Nein. Alle Details der Infrastruktur sollten im Framework-Schicht verborgen bleiben.
Ist es normal, Testparameter innerhalb von Fällen hart zu codieren (z. B. URL, Anmeldeinformationen)?
Nein. Testparameter sollten über die Einstellungen des Frameworks und der Umgebung konfiguriert werden.
Im Projekt rufen Tests direkt Methoden des Selenium-Treibers auf, in jedem Test wird die Verbindung zu WebDriver wiederholt. Jeder Test parst selbstständig die Konfiguration.
Vorteile:
Nachteile:
Tests verwenden grundlegende Abstraktionen des Frameworks: allgemeine Initialisierung und Teardown, Durchreiche von Parametern über den Konfigurator, Testlogik wird durch hochgradige Methoden ausgedrückt.
Vorteile:
Nachteile: