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:  

Seleniumhttps://www.testautomatisierung.org/lexikon/selenium/. 

Cypresshttps://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 istDazu 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äuftLediglich 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ümmernManche 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-ofthe-box erstellen. 

6. Stabilität der Tests 

Die Waits-Behandlung hat einen großen Einfluss auf die Stabilität der TestsNeben 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ührungSelenium 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ätDie 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 VersionenAppium kann neben iOS und Android, auch Windows Anwendungen, TVs und sogar Playstation testen.

Cypress hingegen bietet so gut wie kein Crossbrowser-TestingUrsprü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ütztBei 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 seinZu 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-ofthe-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ösungCypress 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
ProgrammiersprachenJava, Ruby, C#, Python, JavaScriptJavaScript
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ätFü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
ReportingLö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ütztUnterstützt
Verteilte Ausführung Selenium GridOut-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 CommunityKostenlos; 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 ReleaseAuch 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.