Qytera News

Testautomatisierung mit Cypress - Automatisierte UI-Tests

Lesedauer: 5 Minuten

In diesem Artikel möchten wir Ihnen das Testingframework Cypress vorstellen. Bei Cypress handelt es sich um ein Framework zum Testen von Webanwendungen oder von in JavaScript geschriebenen Komponenten. Die verwendete Plattform von Cypress ist Node.JS, die Sprache zum Schreiben der Testfälle ist JavaScript. Cypress wurde für zwei mögliche Anwendungsfälle entwickelt: Für End-to-End Tests von Webanwendungen und für Unit Tests für JavaScript-Code.

Installation

Die Installation von Cypress gestaltet sich sehr einfach. Hierzu muss lediglich die Plattform Node.JS auf Ihrem PC installiert sein. Anschließend können Sie in einem beliebigen JavaScript-Projekt Cypress mittels eines einzigen Befehls installieren. Während des Installationsvorgangs bietet Cypress Ihnen eine graphische Benutzeroberfläche, mittels derer Sie die Konfiguration von Cypress vornehmen können. Dies gestaltet den Installationsvorgang sehr einfach, da das Setup von Cypress automatisiert durchgeführt wird und Sie nach dem Installationsvorgang direkt mit dem Schreiben Ihrer Testfälle starten können. Nebenbei unterstützt Cypress die gängigsten Browser wie etwa Firefox, Edge und Chrome. Es müssen keine Treiber für die unterstützen Browser installiert werden, da Cypress sich um die Treiberverwaltung kümmert. Auch dies erleichtert das Aufsetzen einer Testumgebung.

Testfälle in CypressAufbau von Testfällen

Testfälle in Cypress werden in Szenarien organisiert. Ein Szenario beschreibt hier ein abstraktes Feature bzw. einen Prozess der Website, wie etwa einen Loginprozess. Innerhalb der Szenarien lassen sich Testfälle definieren, die wiederum Testschritte enthalten.

Das Schreiben von Testfällen in Cypress folgt dem Ansatz der strukturierten Skripterstellung. Die Testfälle werden in reinem JavaScipt-Code verfasst, jedoch stellt Cypress eine umfangreiche Bibliothek zum Abfragen und Manipulieren der Website zur Verfügung.

Wiederverwendbarkeit von Testskripten

Dadurch, dass Testfälle in Cypress in reinem JavaScript-Code geschrieben werden, ist es möglich, Testschritte in Funktionen zu kapseln und in anderen Testfällen wiederzuverwenden. Hierzu sollten die Tester:innen über solide Grundkenntnisse der Programmierung und der Modularisierung von Code verfügen. Es lassen sich somit auch parametrisierbare Funktionen implementieren, was ein nützliches Feature für strukturell ähnliche Testfälle ist.

Ausführung von Testfällen

Cypress stellt zum Ausführen von Testfällen eine graphische Benutzeroberfläche bereit. In dieser können Testfälle gestartet und bei der Ausführung beobachtet werden. Cypress zeigt zum einen die Reihenfolge der Testschritte und zum anderen die aktuelle Ansicht des Browsers an. Nach Ausführung des Testfalls können Sie einzelne Testschritte anklicken und sich Screenshots des jeweiligen Browserzustands zum Zeitpunkt der Ausführung des Testschritts anzeigen lassen. Dies ermöglicht ein gutes Debuggen von Testfällen.

Bild: Cypress - Ausführung von Testfällen (Klicken zum Vergrößern) [Quelle: Qytera] × ReportingKonsolenausgabe

Zunächst bietet Cypress die Möglichkeit an, den Testfortschritt über die Konsole auszugeben. So wird der Anwender über den aktuellen Fortschritt der Ausführung der Testsuite informiert. Dies kann vor allem in CI/CD-Pipelines ein nützliches Feature sein, um den Fortschritt der Ausführung beurteilen zu können. Für jedes Szenario wird dabei folgende Ausgabe erzeugt:

Bild: Cypress - Konsolenausgabe (Klicken zum Vergrößern) [Quelle: Qytera] ×

Am Ende der Ausführung gibt Cypress eine Zusammenfassung der Ergebnisse der Testszenarien aus.

Bild: Cypress - Konsolenausgabe (Klicken zum Vergrößern) [Quelle: Qytera] × Screenshots

Cypress erstellt Screenshots für fehlgeschlagene Testfälle. Hier sehen Sie einen Screenshot eines fehlgeschlagenen Login-Testfalls:

Bild: Cypress - Screenshots (Klicken zum Vergrößern) [Quelle: Qytera] ×

Cypress erlaubt es dem Nutzer jedoch auch, manuell Screenshots zu erstellen. Es können jedoch nicht nur Screenshots des vollständigen Bildschirminhalts, sondern auch Bilder von bestimmten HTML-Elementen aufgenommen werden. Hierzu müssen die Tester:innen lediglich den Selektor des Elementes angeben. In unserem Beispiel haben wir so beispielsweise einen Screenshot des Loginformulars und der Topbar aufgenommen, wie sie in folgenden Bildern zu sehen sind.

JSON Logfiles

Ein wichtiger Aspekt bei der Testautomatisierung ist die maschinell lesbare Dokumentation eines Testlaufs. Hierfür bietet Cypress Reports im JSON-Format an, einem gängigen Format zum Abspeichern strukturierter Daten.

HTML Report

Bei einem Testautomatisierungswerkzeug spielt ebenfalls die Dokumentation in einem für die Anwender:innen lesbaren Format eine wichtige Rolle. Hierfür bietet Cypress ein Plugin zum Erstellen von HTML-Reports an. Ein Beispiel eines HTML-Reports können Sie in folgendem Bild sehen. Es wurden zwei Unit-Tests sowie fünf weitere E2E-Testfälle ausgeführt. Für die nicht bestandenen Testfälle enthält der HTML-Report die Fehlermeldungen. Beim Unit-Tests sowie bei den E2E-Testfällen sind dies die erwarteten und die tatsächlich erhaltenen Ergebnisse, bzw. die aufgetretene Fehlermeldung.

Bild: Cypress - HTML Report (Klicken zum Vergrößern) [Quelle: Qytera] × Video-Mitschnitte

Cypress bietet unter anderem einen Videomitschnitt der Testfälle an. Dieser lässt sich über ein Konfigurationsfile aktivieren und zeichnet für jedes Testszenario ein Video auf. Im Videomitschnitt ist die graphische Benutzeroberfläche von Cypress zu sehen, d.h. der aktuelle Testschritt und die Ansicht, die derzeit im Browser zu sehen ist. Ein Beispiel aus einem Videomitschnitt sehen Sie in folgendem Bild:

Bild: Cypress - HTML Report (Klicken zum Vergrößern) [Quelle: Qytera] × Testmanagement: Anbindung an Jira Xray

Für Cypress existieren Plugins, welche es erlauben, Testberichte im JUnit-XML-Format zu erstellen. Dies ist eine sehr nützliche Funktion, da viele Testmanagementwerkzeuge wie etwa Xray den automatisierten Import dieser Berichte unterstützen. Der von Cypress erzeugte Bericht kann direkt über eine REST-API in Xray geladen werden. Xray legt hier automatisch neue Testfälle an, falls es die Testergebnisse aus dem Bericht keinem vorhandenen Testfall zuordnen kann. Bei Wiederholung des Testlaufs und erneutem Importieren der Testergebnisse kann Xray diese den bereits angelegten Testfällen zuordnen. Ein kleines Manko des JUnit-Plugins für Cypress ist die fehlende Berichterstattung auf Step-Ebene und die fehlende Unterstützung für die Integration von Screenshots im Bericht. Sollten Screenshots in Xray dokumentiert werden, müssten diese durch eine eigens programmierte Lösung hochgeladen werden.

Nutzer:innen, die bereits mit Selenium vertraut sind dürfte der Umstieg auf Cypress nicht schwerfallen. Die Gliederung der Testfälle in Szenarien, Tests und Testschritte wird so auch in bekannten Java-Frameworks wie etwa JUnit oder TestNG implementiert. Die Cypress-Bibliothek und deren Benennung der Methoden zum Abfragen und Manipulieren der Website ähnelt der von Selenium stark. So gibt es zunächst Methoden zum Selektieren von Elementen der Website sowie Methoden zum Ändern bzw. Manipulieren von Elementen.

Vorteile gegenüber Selenium

Cypress besitzt gegenüber Selenium den Vorteil, dass eine Testumgebung automatisiert aufgesetzt wird. So muss bei einem Seleniumprojekt zunächst der passende Treiber für einen Browser installiert werden, was in einer Testumgebung eine potentielle Fehlerquelle sein kann, besonders wenn die Testumgebung häufig migriert oder in einem CI/CD-Prozess kontinuierlich erstellt und wieder heruntergefahren wird. Hier bietet die Community zwar Unterstützung durch Module, die das Treibermanagement übernehmen können, jedoch ist die Verwaltung der Browsertreiber durch Cypress eleganter gestaltet.

Ein weiterer Vorteil von Cypress gegenüber Selenium ist die deutlich schnellere Ausführungsgeschwindigkeit. Cypress kommuniziert mit Browsern nicht über das Webdriver-Protokoll und somit über eine Netzwerkverbindung, sondern es integriert sich direkt in den Prozess des Browsers. Testfälle werden automatisiert neu gestartet, sobald Änderungen am entsprechenden Code des Testfalls durchgeführt werden, wodurch sich die Tester:innen voll und ganz auf das Schreiben von Testfällen konzentrieren können.

Noch einen weiteren Vorteil bietet Cypress gegenüber Selenium durch automatisierte Waits. In Selenium-Projekten müssen Waits oft manuell definiert werden, d.h. es muss auf das Erscheinen eines bestimmten Elements gewartet werden. In Cypress-Testfällen wird diese Funktion automatisch implementiert, es müssen keine Waits manuell definiert werden. Sofern ein Element der Website nicht gefunden wird, geht Cypress automatisch davon aus, dass auf dieses Element gewartet werden muss.

Nachteile gegenüber Selenium

Ein gravierender Nachteil von Cypress gegenüber Selenium ist die fehlende Unterstützung des Safari-Browsers, Opera und des Internet Explorers. Während die fehlende Unterstützung für den Internet Explorer noch verkraftbar ist, da der Internet Explorer nicht mehr weiterentwickelt wird und langsam vom Markt verschwindet, ist die fehlende Unterstützung von Safari und Opera ein Problem, da dies gängige Browser sind, die in der heutigen Browserlandschaft häufig anzutreffen sind.

Ein weiteres Feature, welches Selenium gegenüber Cypress bietet, ist die Unterstützung von End-to-End-Tests gegen mobile Geräte mit dem Betriebssystem Android und iOS. Mit Selenium können Sie gemeinsam genutzte Testbibliotheken für den Test mobiler Geräte und den Test von Webanwendungen schreiben, für Cypress ist dies nicht möglich.

Testautomatisierung mit Cypress: Fazit

Cypress ist eine gelungene vollautomatisierte Testumgebung, die den Tester:innen die Einrichtung und den Betrieb einer Testumgebung sehr erleichtert. Die Installation und der Betrieb von Cypress können mit minimalen Aufwand erledigt werden, wodurch sich die Anwender:innen voll und ganz auf das Erstellen und Verwalten von Testfällen konzentrieren können.

Der Aufwand bei der Implementierung der Testautomatisierung zahlt sich langfristig um ein Mehrfaches wieder aus und sie können die frei gewordenen Kapazitäten in anderen Bereichen zum Einsatz bringen.

Gerne beantworten wir Ihnen Fragen und beraten Sie genauer zur Testautomatisierung in Ihrem Projekt. Kontaktieren Sie uns hierfür einfach oder vereinbaren Sie direkt einen kostenlosen Testautomatisierungs-Workshop mit unseren Qytera-Testexperten. Wir wünschen Ihnen viel Erfolg bei Ihrer Testautomatisierung!

16. September 202216. September 2022Finden Sie weitere interessante Artikel zum Thema:  Artikel weiterempfehlen:

Die besten API Testing Tools im Überblick - REST APIs und SOAP Schnittstellen

In den letzten Jahren entwickelten sich in der Softwareentwicklung viele neue Ansätze, um die höhere Integration der eingesetzten Softwarelösungen und die immer höhere Verarbeitungsgeschwindigkeit, die der Endkunde mehr und mehr erwartet, zu erfüllen. Dadurch mussten einheitliche Schnittstellen geschaffen werden und hierfür idealerweise standardisierte Protokolle Verwendung finden.

Durch die immer größer werdende Vernetzung und damit der Einzug des HTTP-Protokolls, wurden auf dieser Basis unterschiedliche Schnittstellen entwickelt, die beiden populärsten sind die SOAP API und REST API.

In diesem Beitrag möchte ich einige populäre API Testing Tools vorstellen, die wir erfolgreich in Projekten einsetzen konnten und auch immer wieder bei Kunden vorfanden.

1. SoapUI von Smartbear

SoapUI hat sich im Laufe der letzten Jahren sozusagen zu dem Standard-Testtool etabliert, um SOAP-, REST Webservices zu testen. SoapUI bietet eine komfortable Möglichkeit, die REST-Requests aus einer bestehenden WADL zu generieren oder nur eine URI einzugeben. SoapUI generiert und extrahiert daraus automatisch den Endpunkt, die Ressourcen und die Query-Parameter.

Das Testtool bietet auch die Möglichkeit, gerade bei komplexeren Testschritten und sehr neuen Technologien, Groovy-Scripte einzubinden. Mit "Groovy TestStep" ist es möglich, sein eigenes Groovy-Testscript als Teil eines Testfalls zu implementieren. Darüber hinaus stehen sämtliche APIs von JRE und SoapUI zur Verfügung.

Die Funktionen von SoapUI sind:
  • Funktionstests von Webservices
  • Testautomatisierung von Webservices
  • Service Simulation (Mocking)
  • Lasttest und Performancetest
  • Analyse und Reporting von REST und SOAP APIs
  • Recording von Requests und Daten

SoapUI unterstützt Webservice Technologien wie SOAP/WDSL, REST, HTTP(S), JDBC, JMS. Es bietet Integration in Entwicklungsumgebungen wie IntelliJ IDEA, NetBeans, Eclipse und Buildtools wie Jenkins, Apache ANT, Bamboo, JUnit und Apache Maven Project.

Weitergehende Informationen finden Sie auch in unserem weiteren Blogbeitrag zu Testautomatisierung mit SoapUI.

2. Postman

Fast ebenso mächtig wie SoapUI ist das Tool Postman. Dieses Werkzeug wird vom Hersteller als Standalone Client oder als Browser AddOn zur Verfügung gestellt. Es bietet hervorragende Möglichkeiten, REST-API-Aufrufe zu erstellen und ganze Szenarios zu gestalten, die für die Entwicklung, wie auch für die REST API Tests, Verwendung finden.

Postman bietet ein recht einfaches Werkzeug für den Umgang mit APIs, da es sich vollständig über eine GUI bedienen lässt. Es lassen sich leicht API Aufrufe erstellen, parametrisieren und ausführen. Die Ergebnisauswertung wird unterstützt, indem die Requests und Responses in unterschiedlicher Form dargestellt werden können und somit lesbarer werden.

Bild: REST API Aufruf in Postman. (Klicken zum Vergrößern) [Quelle: Postman]

× Die Funktionen von Postman sind:
  • Unterstützung bei der Dokumentation der APIs
  • Debugging und manuelles API Testing
  • API-Monitoring
  • Automatisierte Funktionstests von Webservices für REST, SOAP und GraphQL
  • Entwerfen und Mocken sowie Bereitstellung von APIs
  • Teamwork-Funktionalitäten
  • Ausführliche und interaktive Übungen zum Lernen der Funktionalitäten

Anbieterseite: getpostman.com

Webinar: Testautomatisierung von REST-APIs und Microservices - Postman, JUnit, Mockito 3. Fiddler Everywhere von Progress Telerik

Auch mit dem Web Debugging Proxy Werkzeug Fiddler Everywhere lassen sich Web API Tests erstellen und automatisiert testen. Für den Einstieg ins API Testing bietet Fiddler eine einfache und leichtgewichtige Möglichkeit Requests zu erstellen und diese auszuführen. Die große Stärke liegt aber im Zusammenspiel von den (aufgezeichneten) Sessions mit der Auto Responder Funktionalität, die es regelbasiert ermöglicht vorgefertigte Responses abzusenden.

Bild: REST API Aufruf in Fiddler Everywhere. (Klicken zum Vergrößern) [Quelle: Fiddler Everywhere]

× Die Funktionen von Fiddler Everywhere sind:
  • HTTP/HTTPS Webproxy zur Aufzeichnung des Datenverkehrs
  • Web Debugging
  • Netzwerkverkehr mocken und automatische Antworten generieren
  • Team Kollaboration über geteilte Sessions

Weitere Informationen finden Sie in unserem Blogbeitrag zu Fiddler Everywhere.

4. Katalon Studio

Eine starke Integration in die IDE von Katalon, das über BDD und TDD einen anderen Ansatz geht als die zuvor vorgestellten Tools, zeigt einen etwas anderen Implementierungsansatz von API Testing. Assistentgestützt werden hier die API Requests erstellt und im Testprojekt hinzugefügt. Es lassen sich im Assistenten oder auch später die Verifikationen programmatisch ergänzen, so dass hier eine gewisse Erfahrung in Programmierung notwendig wird.
Dennoch ist gerade die Katalon Studio Integration sehr gelungen und mit dem BDD und TDD Ansatz ein Mehrwert für das Projekt zu sehen.

Bild: REST API Integration im Katalon Studio. (Klicken zum Vergrößern) [Quelle: Katalon]

×

Für die ersten Umsetzungen bietet der Hersteller das Katalon Studio kostenfrei an und nur wer weitere Funktionen benötigt, wie Teamkollaboration, muss zu einer kostenpflichtigen Version wechseln. Weiterführende Informationen zur Umsetzung finden Sie in der Hersteller-Dokumentation.

5. ReadyAPI von Smartbear

Vom Hersteller der sehr bekannten API Implementierung Swagger (früher OpenAPI) und dem oben genannten SoapUI gibt es eine Reihe von Tools zur Unterstützung der API Entwicklung und des REST API Testens. In der Lösung ReadyAPI sind die wichtigsten Tools für das API Testing gebündelt worden. Hier sind die funktionalen und nicht funktionalen API Tests über nahezu alle Teststufen integriert worden. So können Sie hier Unittest der APIs vornehmen, aber auch Last- und Performance Tests.

Alternative Testtools/Werkzeuge für das Testen von API wie REST und SOAP

Neben den zuvor genannten spezialisierten Werkzeugen für SOAP oder REST API Testing können auch folgende Tools für die Testautomatisierung von Webservices in Betracht gezogen werden.

1. JMeter - Performance Monitoring Tool

Die in Java geschriebene Open-Source-Software von Apache ist die wohl populärste unter den kostenlosen Performance-Testtools. JMeter unterstützt verschiedene Protokolle wie HTTP, HTTPS, SOAP, REST, FTP, JDBC, LDAP, JMS, SMTP, POP3 und Datenbanken via JDBC. Für Tests von Webservices steht nur ein geringer Funktionsumfang zu Verfügung. Aber gerade das REST API Testing oder SOAP Testing ist für Last & Performance Testing Tools sehr naheliegend, da bei diesen Tools auch ohne GUI getestet wird.

2. Swagger Inspector von Smartbear

Mit dem etwas einfacher gehaltenen Tool Swagger Inspector lassen sich Rest APIs einfach debuggen und so gerade für einen manuellen Test gut einsetzen. Dieses Werkzeug läuft komplett im Browserfenster ab und benötigt deshalb keine Installation. Somit kann bei kurzen und nicht nachhaltig zur Verfügung gestellten Rest API Tests dieses Tool zum Einsatz kommen. Weiterführende Informationen finden Sie beim Hersteller.

3. Postman Interceptor (Browser Plugin)

Postman lässt sich auch als ein Chrome Plugin einsetzen und setzt daher die Installation des Google Chrome Browsers voraus. Anschließend kann es aus dem Google-Web-Store als Extension installiert werden. Wir verwenden Postman eher um API bzw. RESTful Services auszuprobieren. Damit lässt sich sehr schnell ein Request (GET, POST, Basic Auth, Oauth) absetzen.

4. REST-assured

Auch für Ihre REST API Tests in JAVA gibt es Erweiterungen wie REST-assured, die Sie in Ihrem Projekt unterstützen, einfache Tests gegen REST Schnittstellen zu entwickeln. Hierbei erhalten Sie eine einfache Beschreibungssprache um Ihre Validierungen gegen die Server Responses im JSON-Format durchzuführen. Weitergehende Informationen finden Sie auf der Anbieterseite oder in diesem Tutorial.

5. Karate

Eine sehr interessante Entwicklung stellt Karate dar, die erst seit 2017 auf dem Markt ist. Dieses Framework verbindet die unterschiedlichsten Testarten, von API Testautomation, Mocks, Last & Performance Testing bis hin zur UI Automation in einer einheitlichen Bibliothek. Somit soll für einen Softwaretester eine einheitliche Sprache für all seine automatisierten Tests etabliert werden. Als Besonderheit ist die konsequente Verwendung von BDD, angelehnt an Cucumber/Gherkin, zur Testfallbeschreibung zu sehen. Es lässt sich leicht über Maven/Gradle in sein Testprojekt in der IDE integrieren.

Bild: Karate Beispiel eines REST API Tests. (Klicken zum Vergrößern) [Quelle: Karate]

×

01. Juli 202216. Juli 2022Finden Sie weitere interessante Artikel zum Thema:  Artikel weiterempfehlen: