zur Übersicht

Karate

Lesedauer ca. 6 Minuten
13.06.2023

Karate? Ist das nicht diese japanische Kampfkunst? Ja! Karate ist aber auch ein überaus beliebtes Testframework in der IT-Community. In unseren Projekten haben wir es immer wieder mit großen monolithischen Softwaregebilden zu tun, die wir in eine moderne Cloud-Umgebung mit Microservices überführen. Unser Fachteam Qualitätssicherung hat verschiedene Testframeworks in unterschiedlichen Anwendungsfällen auf Herz und Nieren geprüft und war zugegebenermaßen auch selbst ein wenig davon überrascht, wozu dieses Karate fähig ist.

Vor allem in komplexen Softwareprojekten monolithischer Struktur mit stark skalierenden Nutzungszahlen kann es irgendwann notwendig werden, diesen Monolithen zu zerteilen und die einzelnen Fachdomänen herauszulösen. Genau hierbei unterstützt uns Karate, um eine reibungslose Loslösung der einzelnen Bereiche in funktionsfähige Microservices zu gewährleisten. Doch was genau ist dieses Karate nun eigentlich?

Was ist Karate?

Wie bereits erwähnt handelt es sich dabei um ein Testframework. Karate wurde speziell für die API- und Web-Service-Automatisierung entwickelt und bietet eine einfache und dennoch leistungsstarke Lösung, automatisierte Tests für Webanwendungen zu bauen. Vor allem die Möglichkeit, Tests in einer klar verständlichen, natürlichen Sprache zu schreiben, wodurch auch Nicht-Entwickelnde in den Testprozess einbezogen werden können, macht Karate für viele zum Mittel der Wahl.

2017 von Peter Thomas ins Leben gerufen, hat die Open-Source-Variante schnell einen Hype um sich erzeugt, der bis heute anhält. In einem Framework vereint die Anwendung: API-Testautomatisierung, API Mocking, UI-Testautomatisierung (Mix zwischen UI- und API-Tests möglich) sowie Performance Testing. Die Tests werden dabei im sprachneutralen Gherkin geschrieben, was auch dazu führt, dass sie einfach verständlich und klar strukturiert sind. Das hat auch für Entwickelnde Vorteile, da sich die kognitive Last deutlich reduziert und die Ressourcen anderswo eingesetzt werden können.

Behaviour Driven Development

Die Gherkin Syntax hat ihren Ursprung im Behaviour Driven Development (BDD). Dabei handelt es sich um eine Methode in der agilen Softwareentwicklung, die das Verhalten eines Systems aus Sicht der Nutzenden beschreibt und testet. Kern der Methode ist die frühe Einbeziehung aller am Projekt Beteiligten wie bspw. Entwickelnde, Testende, Fachpersonen und Stakeholder, um eine gemeinsame Sprache sowie ein gemeinsames Verständnis zu etablieren. BDD stärkt die Zusammenarbeit zwischen Qualitätsmanagement und Business-Analyse.

Im BDD werden gemeinsam Fallbeispiele definiert, die als Szenarien bezeichnet werden. Diese Szenarien beschreiben das gewünschte Verhalten der Software. Um dieses Verhalten zu testen, werden Mock-Objekte gebaut, die das tatsächliche Verhalten der Software simulieren. Tests werden dann gegen diese Mock-Objekte entwickelt und schrittweise durch die eigentliche Softwarelogik ersetzt, bis die Software finalisiert ist. Dieser Grundgedanke bildet das Fundament des BDD-Ansatzes.

Karate integriert u. a. diese BDD-Prinzipien und bietet somit eine leicht lesbare, auf Gherkin basierende Syntax, um Testszenarien in natürlicher Sprache zu beschreiben. Dadurch können Entwickelnde sowie bspw. Business Analysts oder auch das Projektmanagement an der Testbeschreibung mitwirken und präzise das Verhalten des Systems definieren. Doch wie sehen diese Karate-Tests nun eigentlich genau aus und was ist es, dass sie so attraktiv macht?

API & UI Testing

Karate bietet leistungsstarke Funktionen für API-Tests sowie dem Testen von UI-Komponenten.

Für API-Tests ermöglicht Karate das Senden von HTTP-Anfragen sowie das Überprüfen von Antworten. Es unterstützt auch das Testen auf unterschiedlichen Ebenen (XML, JSON etc.), einschließlich der Interaktion mit Datenbanken und externen Diensten, um umfassende API-Tests durchzuführen und das Verhalten der Schnittstellen in verschiedenen Szenarien zu überprüfen.

Unsere Xperten haben ein kurzes Beispiel für einen API-Test erarbeitet, in dem zwei Szenarien getestet werden. Im ersten Szenario wird die GET-Anfrage für die User-Details mit der ID 123 gesendet, und es wird überprüft, ob der Statuscode 200 zurückgegeben wird bzw. die erwartete User-Antwort übereinstimmt. Im zweiten Szenario wird die POST-Anfrage zum Erstellen eines Users gesendet, und es wird überprüft, ob der Statuscode 201 zurückgegeben wird und die erstellte User-Antwort eine numerische ID enthält.


karat_api_text_example

API-Test



karate_open_api_example

Augerufene API


An diesem Beispiel lassen sich auch hervorragend die Einflüsse und Vorteile des BBD in Karate aufzeigen. Die Begriffe given, when, then und and stammen aus der Gherkin-Syntax und vermitteln auch ohne mit Karate vertraut zu sein eine ungefähre Vorstellung davon, worum es in diesem Test geht. Given steht hierbei für die Vorbedingung, when für die Aktion, die ausgeführt wird und then für die erwartete Reaktion des Systems. And kann in Verbindung mit anderen Schlüsselworten verwendet werden, um diese zu ergänzen.

Für UI-Tests bietet Karate die Interaktion mit Bedienoberflächen (GUI) durch die Simulation von Webbrowsern. Entwickelnde können Testszenarien bauen, die bspw. das Ausfüllen von Formularen, das Klicken auf Schaltflächen und die Überprüfung der angezeigten Informationen beinhalten. Die Verwendung von Selektoren ermöglicht es, UI-Elemente zu identifizieren und zu validieren.

Auch für einen UI-Test haben sich unsere Xperten ein Beispiel ausgedacht. Hierbei wird eine Website aufgerufen, das Login-Formular ausgefüllt und auf den Anmelde-Button geklickt. Anschließend wird überprüft, ob eine Willkommensnachricht angezeigt wird.


karate_ui_login

Login


Feature: Login

Scenario: Verify Login Functionality
    Given url 'https://example.com'
    When driver '#loginForm input[name=username]' = 'testuser'
    And driver '#loginForm input[name=password]' = 'password123'
    And driver '#loginForm button[type=submit]' click
    Then driver '#welcomeMessage' contains 'Welcome, testuser'

UI-Test

Ein großer Vorteil von Karate besteht darin, dass es API- und UI-Tests nahtlos integriert. Entwickelnde können Testfälle erstellen, die sowohl das Verhalten von APIs als auch das der Bedienoberfläche (GUI) abdecken. Dies ermöglicht eine umfassende Überprüfung bzw. Vorhersage des End-to-End-Verhaltens eines Systems. Die Verwendung von Karate für API- und UI-Tests bietet viele Vorzüge wie eine verbesserte Testabdeckung, eine konsistente Syntax für alle Testarten und eine einfache Wartung der Tests im Laufe der Zeit. Karate ermöglicht auch die Erstellung umfassender Testberichte und eine präzise Analyse der Testergebnisse. Insgesamt ist Karate eine leistungsstarke Lösung für API- und UI-Tests, die Entwickelnden dabei hilft, qualitativ hochwertige Software mit hoher Zuverlässigkeit zu liefern.

Wie wir arbeiten

Als Softwaredienstleister arbeiten wir immer wieder mit Kunden zusammen, deren Softwarelandschaft aus einem über Jahre angewachsenen komplexen Monolithen besteht. Während eine solche Struktur in der Anfangsphase einfacher und kostengünstiger zu realisieren sein scheint, wachsen mit der Größe dieses Gebildes auch die Herausforderungen für einen störfreien Betrieb. Um bei rasant steigenden User-Zahlen und Features ein funktionsfähiges System gewährleisten zu können, ist eine Cloud-Migration mit Microservices oftmals unumgänglich. Wie bereits zu Beginn erwähnt, unterstützt uns Karate hier in der Herauslösung der einzelnen Fachdomänen und deren Überführung in getrennte Microservices.

Erläuterung_deutsch

Bevor wir eine Fachdomäne aus dem Monolithen herauslösen, muss jedoch sichergestellt sein, dass diese auch getrennt von ihm funktioniert. Hierfür schreiben wir Tests in Karate für die jeweilige Fachdomäne, und wenn diese Tests ein positives Ergebnis liefern, schneiden wir die Domäne aus dem Monolithen und überführen sie in einen Microservice. Anschließend lassen wir die Tests auch gegen den Microservice laufen. Liefern die Tests auch hier ein positives Ergebnis, können wir sicher sein, dass alles reibungslos funktioniert. Somit können alle Clients, die davor den Monolithen genutzt haben ohne Probleme in den Microservice überführt werden.

Neben den Vorteilen der Entkoppelung der einzelnen Fachdomänen sowie der enormen Skalierbarkeit können durch eine Cloud-Migration mit Microservices auch viele andere schwerwiegende Nachteile einer monolithischen Softwarestruktur ausgeglichen werden. Dennoch ist im Falle einer Migration immer abzuwägen, ob sich der initiale höhere Kostenaufwand tatsächlich lohnt. Grundsätzlich gilt hier: je größer der Monolith, desto wahrscheinlicher. Entscheidet man sich also für eine Cloud-Migration, ist es umso wichtiger, dass diese reibungslos umgesetzt wird und man am Ende funktionsfähige Microservices hat.

Karate liefert hierfür mit seinen Testmöglichkeiten ein nahezu perfektes Setup – der Einsatz ist jedoch keinesfalls nur auf Cloud-Migrationen begrenzt. Aufgrund seiner Beschaffenheit (Gherkin Syntax, All-in-One-Lösung etc.) sowie seinen vielen Anbindungsmöglichkeiten auf unterschiedlichen Ebenen (bspw. XML, XPATH, JSON) hat sich Karate in vielen Bereichen als Standard etabliert, wenn es um schnelles und zuverlässiges Testing geht.