Architecture Decision Record

Active theme: Light

← Beispiele für Entscheidungsprotokolle

Architecture Decision Record: Browser-Automatisierungs-Framework für E2E-Tests (Playwright oder Selenium)

1. Kontext

Wir sind dabei, ein Browser-Automatisierungs-Framework für unsere End-to-End-(E2E-)Test-Pipeline auszuwählen. Dieses Framework wird integraler Bestandteil unserer CI/CD-Prozesse sein und Tests ausführen, die reale Benutzerinteraktionen auf unserer Plattform simulieren. Konkret decken die Tests Szenarien wie Benutzerregistrierung/-anmeldung, Datei-Uploads, Dashboard-Interaktionen und Berichts-Downloads ab.

Als Startup liegt unser Fokus auf agiler Entwicklung, mit dem Bedarf, schnell zu iterieren und sich weiterzuentwickeln. Unser Team arbeitet überwiegend mit TypeScript und Python, und die Fähigkeit, Tests in diesen Sprachen zu schreiben, ist unerlässlich. Außerdem enthält die Plattform interaktive Diagramme und Dashboards, weshalb es entscheidend ist, dass das Automatisierungswerkzeug umfangreiche, dynamische UIs gut unterstützt.

Die beiden Kandidaten für diese Aufgabe sind Playwright und Selenium, jeweils mit eigenen Stärken und Abwägungen. Wir müssen diese Frameworks anhand der unten aufgeführten Funktionen und Anforderungen bewerten.

2. Erwogene Optionen

  • Playwright (von Microsoft)
  • Selenium (vom Selenium Project)

3. Entscheidungstreiber

Die Faktoren, die unsere Entscheidung beeinflussen, sind folgende:

  1. Agile Entwicklung: Das gewählte Werkzeug muss schnelle, flexible Entwicklungszyklen ermöglichen.
  2. Sprachunterstützung: Unser Team benötigt Unterstützung für TypeScript und Python.
  3. Test interaktiver UIs: Die Fähigkeit, interaktive Diagramme, Dashboards und dynamische Elemente zuverlässig zu testen, ist unerlässlich.
  4. Laufzeitgeschwindigkeit: Obwohl kein Hauptanliegen, ist die Leistung in CI/CD-Pipelines eine Überlegung.
  5. Skalierbarkeit: Wir planen in naher Zukunft keine massive Skalierung, möchten aber sicherstellen, dass die Lösung künftiges Wachstum bewältigen kann.
  6. Abwärtskompatibilität: Altsysteme und Kompatibilität mit älteren Browsern sind für unser Projekt derzeit nicht entscheidend.
  7. Mobiltests: Obwohl kein unmittelbarer Fokus, sollte das Framework in der Lage sein, mobil-responsive Funktionen zu testen oder für solche Anwendungsfälle erweiterbar sein.
  8. Multi-Monitor-Tests: Die Unterstützung von Multi-Monitor-Konfigurationen ist eine sekundäre Anforderung, besonders wenn wir jemals auf das Testen komplexerer Benutzerworkflows ausweiten.
  9. Test von Datei-Uploads: Das Framework muss Datei-Uploads effizient handhaben, eine Kernanforderung unserer Testbedürfnisse.

4. Bewertungskriterien

  • Benutzerfreundlichkeit: Wie einfach ist es, Tests zu schreiben und zu pflegen?
  • Sprachunterstützung: Unterstützt das Framework TypeScript und Python, die zwei Sprachen, die unser Team am häufigsten nutzt?
  • Test interaktiver UIs: Wie gut handhabt das Framework komplexe, interaktive Benutzeroberflächen wie Diagramme, Datei-Uploads und dynamische Daten?
  • CI/CD-Integration: Wie gut integriert sich das Framework in gängige CI/CD-Werkzeuge und -Dienste?
  • Browserübergreifende Unterstützung: Welche Browser werden unterstützt und wie gut schneiden sie ab?
  • Leistung und Geschwindigkeit: Wie schnell laufen Tests, besonders in einer CI/CD-Pipeline?
  • Skalierbarkeit: Wie gut lässt sich das Framework skalieren, wenn mehr Tests oder komplexere Szenarien hinzukommen?
  • Community und Ökosystem: Wie aktiv ist die Community des Frameworks? Gibt es viele Integrationen und Erweiterungen?

5. Überlegungen

5.1 Playwright

Vorteile:
  1. Intelligentere API für lokale Datei-Uploads: Die API von Playwright für die Interaktion mit lokalen Dateien und das Durchführen von Datei-Uploads ist einfacher und intuitiver. Das würde Datei-Upload-Tests leichter implementier- und wartbar machen.
  2. Syntax und Codegenerierung: Playwright hat eine kürzere, prägnantere Syntax. Das führt zu weniger Boilerplate-Code, was Wartbarkeit und Entwicklereffizienz verbessert. Zusätzlich verbessert diese kürzere Syntax die Qualität der Codegenerierung durch OpenAI und erleichtert so das automatische Erzeugen von Testskripten.
  3. Test interaktiver UIs: Playwright zeichnet sich beim Testen dynamischer, interaktiver Webanwendungen aus, etwa solcher mit umfangreichen Diagrammen, komplexen Benutzerinteraktionen und Echtzeit-Aktualisierungen. Es handhabt WebSockets, WebRTC, Shadow DOMs und andere moderne Webtechnologien sehr wirksam.
  4. Browserübergreifende Unterstützung: Playwright unterstützt Chromium, WebKit und Firefox. Es hat über diese Browser hinweg konsistente Leistung, was die meisten unserer Testbedürfnisse abdecken sollte.
  5. CI/CD-Integration: Playwright integriert sich nahtlos in moderne CI/CD-Plattformen (GitHub Actions, Jenkins usw.). Es kann Tests parallel über verschiedene Browser hinweg ausführen, wodurch die Testlaufzeiten optimiert werden und es sich für schnelle Entwicklung eignet.
  6. Schnell und zuverlässig: Playwright ist im Allgemeinen schneller als Selenium, besonders im Headless-Modus, und robuster im Umgang mit asynchronen Webelementen.
Nachteile:
  1. Eingeschränkte Mobiltests: Obwohl Playwright mobile Emulation für Browser unterstützt, fehlen ihm native Mobiltest-Fähigkeiten wie die Integration von Selenium mit Appium für echtes Mobiltesten.
  2. Kleineres Ökosystem: Playwright ist noch neuer und weniger etabliert als Selenium. Obwohl es eine schnell wachsende Community und gute Dokumentation hat, hat es möglicherweise noch nicht das riesige Ökosystem an Plugins und Integrationen, das Selenium bietet.
  3. Eingeschränkte Browserunterstützung: Obwohl Playwright die wichtigsten modernen Browser abdeckt (Chrome, Safari, Firefox), ist seine Unterstützung für Legacy-Browser (z. B. Internet Explorer) nicht so robust wie die von Selenium.

5.2 Selenium

Vorteile:
  1. Längere Geschichte und Reife: Selenium gibt es schon lange, und es hat eine nachgewiesene Erfolgsbilanz. Es wird in vielen Teams und Branchen breit eingesetzt, was zu einem riesigen Ökosystem an Plugins, Integrationen und Ressourcen geführt hat.
  2. Browser- und plattformübergreifende Unterstützung: Selenium unterstützt eine große Vielfalt an Browsern und Versionen, einschließlich Internet Explorer, und kann auch mit verschiedenen Werkzeugen wie Docker, Selenium Grid und Cloud-Diensten für verteilte Tests integriert werden.
  3. Mobiltests: Selenium ist durch seine Integration mit Appium deutlich robuster für Mobiltests, einschließlich Android- und iOS-Anwendungen. Das macht es zur besseren Wahl für Projekte mit Mobile-first- oder stark mobilem Schwerpunkt.
  4. Multi-Monitor-Tests: Selenium bietet bessere Unterstützung für Szenarien mit mehreren Monitoren oder komplexen Multi-Fenster-Interaktionen.
Nachteile:
  1. Komplexität: Die API von Selenium ist ausführlicher und expliziter. Das kann in manchen Fällen ein Vorteil sein, bedeutet aber mehr Code, der geschrieben und gewartet werden muss, was die Beweglichkeit der Entwickler verringern kann – besonders wichtig in einem Startup-Umfeld.
  2. Leistung: Selenium läuft im Allgemeinen langsamer als Playwright, besonders im Headless-Modus. Das könnte CI/CD-Pipelines beeinträchtigen, besonders wenn die Zahl der Tests wächst.
  3. Test interaktiver UIs: Selenium ist beim Testen moderner, interaktiver Web-UIs, besonders mit Diagrammen und Echtzeit-Datenaktualisierungen, nicht so reibungslos wie Playwright. Es erfordert mehr Einrichtung und Handhabung, um zuverlässig mit dynamischen Inhalten zu interagieren.

6. Vergleichszusammenfassung

Merkmal Playwright Selenium
Benutzerfreundlichkeit Kürzere Syntax, intuitiver für moderne UIs Expliziter, erfordert mehr Boilerplate
Sprachunterstützung TypeScript, Python, JavaScript TypeScript, Python, Java, Ruby, C#
Test interaktiver UIs Ausgezeichnet für dynamische Echtzeit-UIs Handhabt einfache UIs, aber ausführlicher und komplexer bei umfangreichen Interaktionen
Test von Datei-Uploads Intelligentere API für Datei-Uploads Ausführlicher, weniger intuitive API
CI/CD-Integration Einfache Integration mit GitHub Actions, Jenkins Starke Integration mit vielen CI-Werkzeugen
Mobiltests Eingeschränkt, nur Emulation Volle Unterstützung über Appium
Browserübergreifende Unterstützung Chromium, WebKit, Firefox Volle Unterstützung für gängige und Legacy-Browser
Leistung Schnell, für Headless-Tests optimiert Langsamer, besonders im Headless-Modus
Multi-Monitor-Tests Eingeschränkt Gute Unterstützung für Multi-Monitor-Aufbauten
Community und Ökosystem Wachsend, gute Dokumentation Groß, ausgereift, umfangreiches Ökosystem

7. Entscheidung

Nach Abwägung der Anforderungen und Kompromisse ist Playwright die bessere Wahl für unsere aktuellen Bedürfnisse. Seine intelligentere API für das Testen lokaler Datei-Uploads, die prägnante Syntax und die starke Unterstützung für das Testen interaktiver UIs machen es zu einer idealen Passung für unseren agilen Entwicklungszyklus. Die Tatsache, dass es sowohl TypeScript als auch Python unterstützt, ist für unser Team entscheidend, und der moderne Ansatz des Frameworks beim Testen wird es uns erlauben, sauberen, wartbaren Code zu schreiben.

Obwohl Selenium ein großartiges Werkzeug bleibt, besonders für Mobiltests, Legacy-Browser-Unterstützung und Multi-Monitor-Aufbauten, ist es für unsere aktuellen Bedürfnisse weniger gut geeignet. Seine Ausführlichkeit, die langsamere Leistung und die komplexere Handhabung dynamischer UIs wie Diagramme machen es für unseren Anwendungsfall weniger optimal.

8. Konsequenzen

  • Sofortmaßnahme: Wir führen Playwright für unsere E2E-Tests ein und konzentrieren uns auf das Testen von Benutzerabläufen mit Registrierung, Anmeldung, Datei-Uploads, Dashboards und Berichts-Downloads.
  • Langfristige Überlegungen: Wir beobachten die Entwicklung des Playwright-Ökosystems. Wenn sich unsere Bedürfnisse ändern, besonders bei Mobiltests oder der Unterstützung von Legacy-Browsern, könnten wir Selenium erneut betrachten.
  • Schulung und Dokumentation: Die Entwicklungsteams müssen sich mit der API von Playwright vertraut machen, besonders für den Umgang mit dynamischen UIs und Datei-Uploads.
  • Migration: Bestehende Selenium-Tests (falls vorhanden) werden schrittweise nach Playwright migriert.

9. Künftige Überlegungen