Skip to content
TDD für API-Entwicklung
Api Testing·

TDD für API-Entwicklung

Onni Alexander Amir
by Onni Alexander Amir
TDD für API-Entwicklung

Willkommen in der aufregenden Welt der testgetriebenen Entwicklung (TDD)! Mit TDD können Sie Fehler frühzeitig erkennen, saubereren Code schreiben und zukünftige Aktualisierungen problemlos durchführen. In diesem Blogbeitrag werden wir die Verwendung von TDD bei der Entwicklung neuer APIs mit Node.js, dem Express-Framework und Loadmill als Testframework untersuchen.

Der TDD-Prozess: Eine kurze Auffrischung

Bevor wir in die Details von TDD für die API-Entwicklung eintauchen, lassen Sie uns zunächst die grundlegenden Schritte des TDD-Prozesses überprüfen:

  • Einen Test schreiben: Zuerst schreiben Sie einen Test, der das gewünschte Verhalten Ihres Codes beschreibt. Dieser Test sollte zunächst fehlschlagen, da Sie den Code noch nicht geschrieben haben.

  • Den Test ausführen: Als nächstes führen Sie den Test aus, um zu bestätigen, dass er fehlschlägt.

  • Den Code schreiben: Anschließend schreiben Sie den Code, der benötigt wird, um den Test bestehen zu lassen.

  • Den Test erneut ausführen: Schließlich führen Sie den Test erneut aus, um sicherzustellen, dass er nun bestanden wird.

API-Entwicklung mit TDD

Jetzt, wo wir den grundlegenden TDD-Prozess verstehen, werfen wir einen Blick darauf, wie wir ihn bei der Entwicklung neuer APIs anwenden können. Einer der wichtigsten Vorteile von TDD besteht darin, dass es Ihnen hilft, Ihre APIs effektiver zu gestalten. Indem Sie zuerst Tests schreiben, können Sie darüber nachdenken, wie sich Ihre API verhalten sollte und welche Eingaben und Ausgaben sie akzeptieren und produzieren sollte. Dies kann Ihnen dabei helfen, eine intuitivere und einfach zu bedienende API zu erstellen.

Loadmill: Ihr Testing-Partner

Um mit TDD für die API-Entwicklung zu beginnen, verwenden wir Loadmill als unser Testframework. Loadmill ist eine leistungsstarke und benutzerfreundliche Plattform zum Testen von APIs. Es bietet eine breite Palette von Funktionen, wie Unterstützung für HTTP/HTTPS-Anfragen, flexible Test-Assertions und Integration mit gängigen CI/CD-Plattformen. Am besten ist, dass es für persönliche Projekte kostenlos verwendet werden kann. Melden Sie sich für ein kostenloses Konto auf ihrer Website an - loadmill.com.

Tipps zum Schreiben effektiver Tests

Sobald Sie Loadmill eingerichtet haben, können Sie damit beginnen, Tests für Ihre API zu schreiben. Hier sind einige Tipps zum Schreiben effektiver Tests:

  • Konzentrieren Sie sich darauf, das Verhalten Ihrer API zu testen, anstatt die Implementierungsdetails. Testen Sie beispielsweise, ob Ihre API den korrekten HTTP-Statuscode und den Antwortkörper zurückgibt, anstatt zu testen, ob sie eine bestimmte Datenbankbibliothek oder ein Webframework verwendet.

  • Machen Sie Ihre Tests so eigenständig wie möglich. Vermeiden Sie Aufrufe an externe Dienste oder Änderungen des globalen Zustands, da dies das Debuggen und Warten Ihrer Tests erschweren kann.

  • Schreiben Sie Tests sowohl für positive als auch negative Szenarien. Dadurch können Sie mehr Fehler erkennen und sicherstellen, dass Ihre API robust ist.

Lasst uns einige TDD-Körbe werfen!

In diesem Beispiel verwenden wir TDD, um einen API-Slam-Dunk zu erstellen, indem wir neue Spieler erstellen und sie einem bestehenden Basketballteam hinzufügen. Wir sorgen dafür, dass alles reibungslos funktioniert und keine Fehler auf dem Spielfeld bleiben.

Hier verwende ich das Express.js-Framework, um einen einfachen Webserver zu erstellen.

TDD code_pic_5

Jetzt beginnen wir mit Loadmill zu TDDen. Unser erster Schritt besteht darin, eine neue Testsuite speziell für das Testen unserer neuen Spielerentität zu erstellen. Als Nächstes schreiben wir unseren ersten Test für die API zur Spielererstellung (Schritt 1 des TDD-Prozesses).

TDD pic_1

In diesem Test nutzen wir Loadmill, um eine POST-Anfrage an den Endpunkt "/players" mit einem Anfragekörper zu senden, der den Namen, die Trikotnummer und die Position des Spielers enthält. Wir extrahieren dann die Spieler-ID aus dem Antwortkörper und stellen sicher, dass sie vorhanden ist, was darauf hindeutet, dass ein neuer Spieler erstellt wurde. Wenn wir diesen Test ausführen, erhalten wir, wie erwartet, einen '404 Not Found'-Fehler, da wir diesen Endpunkt noch nicht implementiert haben (Schritt 2).

TDD pic_2

Als nächstes implementieren wir die API, um diesen Test bestehen zu lassen (Schritt 3).

TDD code_pic_6

Wenn die API eine POST-Anfrage erhält, erstellt sie einen Spieler und gibt die neue Spieler-ID im Antwortkörper zurück. Wenn wir den Test jetzt ausführen, sollte er bestehen (Schritt 4).

TDD pic_3

Super!

Aber halt, wir sind noch nicht fertig! Während dies ein "Happy Path"-Szenario ist, dürfen wir die nicht so glücklichen Szenarien nicht vergessen. Wie wir alle wissen, ist das Testen sowohl des Guten als auch des Schlechten entscheidend für eine solide API. Nehmen wir an, dass wir für die Trikotnummer nur nicht-negative Ganzzahlen akzeptieren möchten und einen Test hinzufügen, um sicherzustellen, dass diese Anforderung erfüllt ist.

TDD pic_4

Hier erwarte ich, dass der Test fehlschlägt, wenn wir versuchen, einen Spieler mit einer negativen Trikotnummer zu erstellen (indem wir das erwartete Ergebnis auf ERROR setzen). Jetzt lassen Sie uns die Tests ausführen und auf ein Scheitern hoffen, haha.

TDD pic_5

Tatsächlich sind unsere Tests aufgrund einer erfolgreichen Antwort beim Versuch, Spieler mit einer ungültigen Trikotnummer zu erstellen, fehlgeschlagen. Zeit, zum Schritt 3 zurückzukehren und etwas Code zur Handhabung dieser Validierung zu schreiben.

TDD code_pic_7

Und den Test ausführen.

TDD pic_6

Da haben Sie es!

Nehmen wir an, wir haben eine Team-Entität in unserer Anwendung und möchten eine API hinzufügen, die einen Spieler zu einem bestimmten Team hinzufügt. Wie Sie vielleicht schon erraten haben, beginnen wir mit dem Hinzufügen eines fehlschlagenden Tests.

TDD pic_7

Und dann implementieren wir.

TDD code_pic_8

Und schließlich führen wir den Test aus.

TDD pic_8

Fantastisch! Wir haben gerade einen Ablauf für das Erstellen neuer Spieler und das Hinzufügen von ihnen zu einem Team erstellt. Und das Beste daran ist, dass wir diesen Schwung aufrechterhalten können, indem wir weitere Tests und APIs für das Aktualisieren von Spielern, das Entfernen von ihnen aus dem Team und mehr hinzufügen.

Zusammenfassend ist TDD eine leistungsstarke Technik für die Entwicklung neuer APIs. Indem Sie zuerst Tests schreiben, können Sie Ihre API effektiver gestalten, Fehler frühzeitig erkennen und eine besser wartbare Codebasis erstellen. Wenn Sie den Schritten des TDD-Prozesses folgen und ein gutes Testframework wie Loadmill verwenden, können Sie TDD nutzen, um hochwertige APIs zu erstellen, die einfach zu verwenden und zu warten sind. Und das Sahnehäubchen: Wenn Sie eine neue Funktion fertig entwickelt haben, sind die Tests bereits geschrieben (nicht zu implizieren, dass das Schreiben von Tests keinen Spaß macht, natürlich).

* Ein großes Dankeschön an ChatGPT für die Hilfe beim Schreiben dieses Blogs! (und vor allem die schlechten Wortspiele, das geht alles auf ChatGPT)