Testautomatisierung mit Cypress vs. Selenium
Cypress und Selenium sind bekannte Testwerkzeuge, die für die Automatisierung von Webapplikationen eingesetzt werden. Selenium ist ein Open-Source-Automatisierungsframework, das in unterschiedlichen Produktversionen vorhanden ist. Die Automatisierungslösung Selenium existiert schon seit 2004 und ist ein etabliertes Produkt mit einer großen Nutzerbasis weltweit. Das End-to-End-Tool Cypress hingegen ist seit 2014 ein Newcomer auf dem Markt, welches sich wie Selenium für die Automatisierung von Webapplikationen eignet. Cypress hat in den letzten Jahren durch seine rasche Entwicklung und Erweiterung kontinuierlich an Beliebtheit gewonnen. Doch welches Werkzeug ist besser?
In diesem Artikel gehen wir auf die Eigenschaften und Spezifikationen beider Testtools, sowie deren Vor- und Nachteile.
Über die Architekturen von Selenium und Cypress können Sie sich unter unseren Lexikonbeiträgen ausführlich informieren:
Selenium: https://www.testautomatisierung.org/lexikon/selenium/.
Cypress: https://www.testautomatisierung.org/cypress/.
Um die Frage, welches Testautomatisierungswerkzeug besser ist, beantworten zu können, zeigen wir Ihnen die Unterschiede und Gemeinsamkeiten zwischen Cypress und Selenium.
Vergleich zwischen Selenium und Cypress
1. Programmiersprachen
Selenium verfügt über sehr viele Language-Bindings (Java / C# / JS / Python), während Cypress nur auf JavaScript basiert. Das macht Selenium flexibler, da in der favorisierten Sprache gearbeitet werden kann. Anderseits, wenn man in JavaScript erfahren ist, kann man mit beiden Testwerkzeuge arbeiten.
2. Framework Ausprägungen
Als etabliertes Tool blickt Selenium auf viele Jahre zurück, in denen ein ganzes Eco-System entstanden ist. Dazu gehört neben nativem Selenium auch das Spin-Off Appium, sowie zahlreiche Wrapper und viele kommerzielle Anbieter, die auf der Selenium Technologie aufbauen. Das Framework von Cypress ist viel einfacher aufgebaut: Es gibt lediglich Hauptapplikation mit Subkomponenten.
3. Ansprechen von Elementen
Selenium bietet eine Menge an Optionen an. Die wichtigsten sind CSS und XPath Ausdrücke. Cypress hat mit Absicht eine reduzierte Auswahl mit CSS und inhaltsbasierter Suche bereitgestellt.
5. Asynchronität
Testskripte sollten synchron laufen – das ist aber nicht in jeder Programmiersprache gewährleistet. Im Fall von Selenium führt das Framework alle Befehle bei synchroner Programmierung (z.B. mit Java) synchron aus. Bei asynchroner Programmierung, z.B. in JS und Protractor Wrapper, kam es früher sehr häufig zu der gefürchteten Promise Hell. Mit ECMA 2015 kam die Möglichkeit async / await zu nutzen, was die Situation verbessert hat, sorgt allerdings immer noch für sehr viele Probleme, z.B. bei vergessenen awaits.
Cypress führt eigene Befehle intern synchron aus, obwohl es ebenfalls im JS Umfeld asynchron läuft. Lediglich bei Mischbetrieb von Cypress und eigenem JS Code kann es ebenfalls zu einer Promise Hell kommen.
5. Umgang mit Waits and Delays
Für die Stabilität der Testausführung spielt der Umgang mit Warten auf Hintergrundoperationen eine wichtige Rolle.
Selenium bietet kein automatisches Warten an, deswegen müssen sich Testautomatisierer selbst darum kümmern. Manche Wrapper wie Protractor versuchen automatisches Warten zu implementieren, indem sie die Angular Zone überwachen, was aber nicht immer zum Erfolg führt.
Cypress hingegen hat von Anfang an auf praxisrelevante automatische Wartemechanismen gesetzt, die auf Backend Responses und Polling bei Standardzugriff auf UI-Elemente erfolgen. Dadurch können selbst unerfahrene Tester stabile Testskripte out-of–the-box erstellen.
6. Stabilität der Tests
Die Waits-Behandlung hat einen großen Einfluss auf die Stabilität der Tests. Neben den falsch umgesetzten Waits, können weitere Infrastruktur-Faktoren, wie falsche Version der Browser Drivers die Stabilität beeinflussen. Daneben passiert es sehr häufig, dass es beim Zugriff auf ein Element die StaleElementException auftritt, wenn z.B. Content auf der Seite nachgeladen wird.
Erfahrungsgemäß liegt in großen Testsuiten die allgemeine Instabilität bei Selenium basierten Tests bei ca. 10 %. Cypress läuft dank des automatischen Wartens deutlich stabiler. Allerdings, haben wir im Praxiseinsatz noch keine wirklich großen Testsuiten gesehen, daher ist ein Vergleich hier nur bedingt möglich. Bei kleineren Testsuiten ist der Unterschied deutlich.
7. Geschwindigkeit der Tests
Ein weiterer Aspekt ist die Geschwindigkeit der Testdurchführung. Selenium ist viel schneller als die Werkzeuge der letzten Generation, was auch einer der Gründe ist, warum es sich durchgesetzt hat. Architekturbedingt ist Selenium aber durch die externe Ansteuerung des Browsers langsamer als eine direkte Skriptausführung innerhalb des Browsers.
Cypress hat aufgrund seiner Architektur insgesamt eine schnelle Ausführung, da keine Delays zwischen Skript und SUT bestehen. Das automatische Warten reduziert die Gefahr falscher Wendung der Waits.
8. Reporting
Um Testläufe vernünftig analysieren zu können, ist ein gutes Reporting unerlässlich.
Selenium lässt Reporting komplett außen vor. Abhängig von der verwendeten Sprache / Wrapper gibt es zahlreiche Lösungen, die selbst integriert, konfiguriert und angepasst werden müssen.
Cypress dagegen hat Reporting von Anfang an als festen Bestandteil der Lösung bereitgestellt und einige wirklich innovative Utilities umgesetzt. Besonders hervorzuheben ist die innovative Snapshot-Funktionalität. Die kommerzielle Version aggregiert alle Reporting Informationen auf einem leicht zugänglichen Dashboard.
9. Crossbrowser / Crossdevice Testing
Bei Selenium ist Cross-Browserunterstützung in allen auf dem Markt verfügbaren Browser und in so gut wie allen Versionen. Appium kann neben iOS und Android, auch Windows Anwendungen, TVs und sogar Playstation testen.
Cypress hingegen bietet so gut wie kein Crossbrowser-Testing. Ursprünglich nur für Chrome entwickelt, wurde jetzt durch Chromium auch Edge hinzugenommen, Firefox in der neuesten Version als Beta drin. Safari wird nicht unterstützt. Bei mobiler Anwendungen gibt es kein Support von nativen und hybriden Apps, sowie keine Webanwendungen.
10. Cloud Testing
Mit dem Cloud-Hype wurden auch viele Cloud Testing Lösungen ins Leben gerufen. Selenium und Appium sind dabei die Haupttechnologien, die von den Anbietern unterstützt werden.
Für Cypress gibt es erst seit diesem Jahr erste Betas (z.B. bei Browserstack).
11. Verteilte Ausführung
Verteilte Ausführung auf heterogener Infrastruktur kann für viele Unternehmen relevant sein. Zu der Selenium Familie gehört die Selenium Grid Komponente an, mit welcher Testausführung über mehrere Zielrechner parallelisiert werden kann.
In Cypress ist die verteilte Ausführung Out-of–the-box nur in der kommerziellen Version möglich.
In beiden Versionen kann manuelle Verteilung, z.B. über CI, erfolgen.
12. Mocks und Schnittstellentests
Der ursprünglichere Fokus von Selenium waren E2E Tests auf UI Ebene aus Sicht eines Endnutzers, deswegen wurden bis jetzt überwiegend solche Tests auf der obersten, langsamsten und instabilsten Stufe der Testpyramide durch Tester geschrieben.
Cypress bietet neben E2E Tests auf UI Ebene, auch die Möglichkeit entwicklungsnähere Tests zu schreiben – so können zusätzliche Tests auf API Ebene ausgeführt oder UI gegen gemocktes Backend getestet werden. Dadurch erreicht man eine bessere Verteilung über die Testpyramide, schnellere und stabilere Tests, sowie Testszenarien, die so gar nicht in E2E Tests möglich sind wie z.B. techn. Fehlerhandling.
13. Kosten & Support
Selenium gehört der Open Source Foundation an und ist eine komplett kostenlose Lösung. Cypress wird von einer kommerziellen Firma entwickelt. Diese stellt Cypress in zwei Versionen bereit – Cypress Core als Open Source auf github und Dashboard Service als kommerzielles Produkt.
Der Support unterscheidet sich bei beiden Testwerkzeugen auch sehr. Für Selenium gibt es keinen offiziellen Support, aber eine sehr große Community und viele Stackoverflow Beiträge. Cypress bietet eine zentrale und umfassende Dokumentation an, sowie einen E-Mail-Support.
14. Verbreitung im D-A-C-H – Raum
Bei Xing und Freelancermap ist Selenium Know-How zehnmal so verbreitet wie Cypress.
Vor allem, wenn man auf externe Unterstützung bei Realisierung eines Projektes angewiesen ist, ist es zur Zeit einfacher Selenium Know-how zu finden.
Zusammenfassung
In der Tabelle finden Sie noch einmal die Eigenschaften von Selenium und Cypress zusammengefasst.
Selenium | Cypress | |
---|---|---|
Programmiersprachen | Java, Ruby, C#, Python, JavaScript | JavaScript |
Framework Ausprägungen | Natives Selenium; Appium; Selenium Wrapper; Kommerzielle Anbieter | Hauptapplikation mit Subkomponenten, kleines Eco-System |
Ansprechen von Elementen | CSS, XPath, ID, Name, Class Name, Tag Name, Link Name, Partial Link Text | CSS und inhaltsbasierter Suche |
Asynchronität | Führt alle Befehle bei synchroner Programmierung synchron aus | Führt eigene Befehle intern synchron aus |
Umgang mit Waits and Delays
| Kein automatisches Warten; nur automatisches Warten in Wrappern | Automatisches Warten auf Elemente und auf HTTP Requests |
Stabilität der Tests
| Oft abhängig vom Browser Driver, StaleElementExceptions an der Tagesordnung, Instabilität bei ca. 10 % | Hohe Stabilität durch Synchronisierung und automatisches Warten |
Geschwindigkeit der Tests | Viel schneller als Testwerkzeuge der letzten Generation; Architekturbedingt langsamer als direkte Ausführung im Browser; Bei langsamen Testfällen ist das Problem eher in SUT bzw. vor der Tastatur | Direkte und schnelle Ausführung in Browser; Keine Delays zwischen TestDriver und SUT; Verzicht auf Waits reduziert die Gefahr falsch verwendeter Waits |
Reporting | Lösungen müssen sebst integriert, konfiguriert und angepasst werden | HTML Report; Screenshots; Videos; Historische Snapshots in Test Runner; Kommerzielle Dashboard & Analyselösung |
Crossbrowser / Crossdevice Testing | Alle Versionen von Selenium; Appium | Kein Support von Win-Apps und mobiler Devices |
Cloud Testing | Unterstützt | Unterstützt |
Verteilte Ausführung | Selenium Grid | Out-of-the-Box (kommerziell) |
Mocks und Schnittstellentests | E2E Tests über UI | E2E Tests über UI; API Tests über XHR Requests; UI Integrationstests über Mocks |
Kosten & Support | Kostenlos; keinen offiziellen Support, aber eine sehr große Community | Kostenlos; keinen offiziellen Support, aber eine sehr große Community |
Trends & Ausblick
Bei Selenium wird in der nächsten Zeit Version 4 erwartet, die von vielen technischen Neuerungen charakterisiert wird. Ebenso werden andere Neuerungen wie Docx wie z.B. relative Lokatoren oder die Möglichkeit mit Hilfe von Chrome Debug Protokol Requests zu mocken und abzufragen angeboten. Die schlechte Neuigkeiten sind, dass der Main-Commiter Simon Stewart das Projekt voraussichtlich nach Releas von Selenium 4 verlassen wird.
Auf die andere Seite bringt Cypress vermehrt aggressiv Releases auf den Markt. So gab es erst vor einem Monat ein Cypress 5.0 Release. Auch die Trends sprechen für einen weiteren Erfolg von dem Testwerkzeug. So ist es anhand von Statistiken erkenntlich, dass das Tool dieses Jahr den weltweiten Download Zahlen überholt hat. Sogar ThoughtWorks, die Firma, die ursprünglich Selenium entwickelt hat, stuft Cypress als Must Have für neue Projekte ein.
Cypress oder Selenium?
Zusammenfassend lässt sich feststellen, dass Selenium eine tolle Programmiersprachenvielfalt, bei mäßigem Reporting und geringerer Stabilität und Geschwindigkeit anbietet.
Cypress hingegen trumpft mit exzellentem Reporting, guter Stabilität und schneller Ausführung. Allerdings gibt es nur JavaScript zur Auswahl. Welches Framework der Sieger ist hat keine allgemeingültige Antwort. Selenium eignet sich gut, wenn Tester nicht in JavaScript gewandt sind und wenn Cross Browser und Device Tests benötigt werden. Cypress ist sinnvoll, wenn man mit modernen Frameworks experimentieren möchte und stabilere und schnellere Tests erzielen möchte.
Die Auswahl der Tools sollte an den individuellen Zielen und Unternehmensstrategie angepasst werden.
Begeisterter Entwickler, Trainer und Berater zu allem Themen rund um agile Softwareentwicklung, Softwarequalität und Testautomatisierung.
Gründer und Geschäftsführer der Firma SimplyTest GmbH