jambit ToiletPaper #103

Schlagkräftige HTTP End-to-End Tests mit Karate

Problem: Aufwändiges E2E-Testing von HTTP-Endpunkten

E2E-Testing von HTTP-Endpunkten kann aufwendig werden, insbesondere wenn man mit elaborierten JSON- oder XML-Requests hantieren muss. Klar gibt es einige Frameworks wie Postman, Rest-Assured oder Spring MockMvc, aber die bringen zusätzliche Probleme wie Nachvollziehbarkeit von Änderungen, Aufsetzen der Umgebung, Verwalten der Testdaten, Ausführung der Tests und dem zugehörigen Reporting mit sich.

Lösung: Karate Framework mit direkter Unterstützung von JSON und XML

Karate ist ein Framework, um E2E-Tests geschmeidig umzusetzen mit direkter Unterstützung von JSON und XML für Requests und Validierung der Antworten sowie Interoperabilität mit Java und JavaScript. Testfälle werden semi-natürlich-sprachlich in Gherkin definiert – bei guten POs fallen diese direkt aus den Stories als Akzeptanzkriterien heraus! Testergebnisse werden in Reports zusammengefasst, welche den HTTP-Dialog und die Assertions enthalten. Mit ein wenig Zusatzaufwand kann man Tests wiederverwenden und Antworten vorhergehender Tests verwenden. Zusätzlich bringt Karate einen Mock-Server mit und kann sogar Lasttests durchführen.

Beispiel für End-to-End Tests mit Karate

Im folgenden Beispiel wird eine XML-Antwort überprüft, bei der die Reihenfolge keine Rolle spielt (vergleicht dazu mal die tatsächliche Antwort von mocky.io mit der Erwartung im Test).

Feature: jambit API

Scenario: Mission und Motto gemeinsam überprüfen

Given url "http://www.mocky.io/v2/5bd9ab282f00005c0006d262"
    And header Accept = "application/xml"
    When method get
    Then status 200
    And match response contains
    """
<jambit>
<mission>100% Begeisterung</mission>
<motto>Where innovation works</motto>
</jambit>
    """

Hier eine Testsuite, bei der zunächst die URL für die weiteren Testfälle gesetzt wird. Der parametrisierte Test überprüft stichprobenartig drei Erwartungen.

Feature: Users API

Background:
    * url "https://jsonplaceholder.typicode.com/"

Scenario Outline: Given user ID, validate company name
    Given path "users", <id>
    When method get
    Then status 200
    And match response.company.name == "<companyName>"

    Examples:
      | id | companyName        |
      | 1  | Romaguera-Crona    |
      | 3  | Romaguera-Jacobson |
      | 7  | Johns Group        |
Schlagkräftige HTTP End-to-End Tests mit Karate - jambit Toilet Paper

Cookie-Einstellungen

Diese Website verwendet Cookies, um Inhalte und Anzeigen zu personalisieren, Funktionen für soziale Medien anbieten zu können und Zugriffe auf die Website zu analysieren. Zudem werden Informationen zu Ihrer Verwendung der Website an Partner für soziale Medien, Werbung und Analysen weitergegeben. Die Partner führen diese Informationen möglicherweise mit weiteren Daten zusammen, die Sie ihnen bereitgestellt haben oder die sie im Rahmen Ihrer Nutzung der Dienste gesammelt haben.

Weitere Informationen finden Sie in unserer Datenschutzerklärung. Dort können Sie nachträglich auch Ihre Cookie-Einstellungen ändern.

contact icon

Kontakt aufnehmen