Was tun, wenn Sie sich beim API-Testen verlaufen?

Veröffentlicht

(12. Mai 2020)

Wenn Sie Wenn Sie noch keine Tests schreiben, sollten Sie beginnen. Tests verbessern die Qualität Ihres Codes, reduzieren Fehler und zwingen Sie wahrscheinlich dazu, mehr über Design und Qualität nachzudenken. Tatsächlich ist es am schwierigsten, zu beginnen und herauszufinden, welche Art von Tests zu schreiben ist.

Sie beginnen also zu googeln und finden viele Testtypen: Einheit, Integration, Akzeptanz, Funktion, System, Rauch, e2e… Einige Ressourcen sagen, dass Sie eine 100\% ige Abdeckung benötigen, andere sagen, dass eine vollständige Abdeckung nicht bedeutet, dass Ihr Code vollständig getestet wurde. Selbst wenn Sie entscheiden, welche Art von Tests Sie verwenden möchten, kann es schwierig sein, zu entscheiden, wie eine bestimmte Logik in Ihrer App getestet werden soll.

Geben Sie nicht auf! Wir haben einige Tipps, die wir auf diesem Weg gelernt haben, und hoffen, dass dies Ihr Leben einfacher macht.

Versuchen Sie nicht, alles nur mit Funktionstests zu testen.

Dies ist der Fehler Nummer eins Entwickler tun beim Testen. Lassen Sie uns dies zunächst klarstellen.

Funktionstests in REST-API würden bedeuten, dass eine Anfrage an einen Endpunkt gesendet und dessen Antwort bestätigt wird. Wenn Ihre Route mehrere verschiedene Fälle aufweist, in denen Domänenlogik ausgeführt werden kann, müssen Sie für jeden Fall einen separaten Test schreiben, um sicherzustellen, dass alle funktionieren.

Dies kann sogar bei einer sehr kleinen App funktionieren, jedoch als Sobald Ihre App wächst, wird dies sehr schwer zu warten sein und sie werden sehr langsam sein. Irgendwann verlieren Sie mehr Zeit für das Reparieren und Verwalten von Tests als für die eigentliche Arbeit an Ihrer App. Darum sollten Tests nicht gehen. Wir haben das auf die harte Tour gelernt.

Die Testpyramide

Die Testpyramide ist ein Diagramm, das uns sagt, wie viel Test Sie auf jede Ebene schreiben sollten.

Untere Ebenen sind schneller und deshalb müssen wir so viel wie möglich mit Unit- und Integrationstests abdecken. Je höher das Niveau, desto weniger Tests sollten Sie durchführen. Sie hören unterschiedliche Namen für einzelne Ebenen, aber die Logik dahinter ist dieselbe.

Die Testpyramide

Unit-Tests

Beginnen wir also von vorne – Unit-Tests. Hier ist eine Definition:

Unit-Test ist eine Ebene des Softwaretests, bei der einzelne Einheiten / Komponenten einer Software getestet werden. Der Zweck besteht darin, zu überprüfen, ob jede einzelne Einheit der Software die erwartete Leistung erbringt. Eine Einheit ist der kleinste testbare Teil einer Software.

Dies bedeutet, dass Sie jede Methode isoliert testen und alle anderen Methoden verspotten sollten.

Dies ist nicht der Fall Unit-Tests, Sie sind es!

Unit-Tests sind nicht nur gut, um sicherzustellen, dass Ihr Code funktioniert, sondern auch, um Refactoring durchzuführen. Sie sollten leicht zu schreiben sein. Wenn Sie Schwierigkeiten haben, einen bestimmten Code zu testen, bedeutet dies, dass Ihr Code schlecht geschrieben ist und überarbeitet werden sollte. FESTE Prinzipien helfen Ihnen hier. SOLID ist eine Reihe von Gestaltungsprinzipien zum Schreiben von sauberem, elegantem und lesbarem Code. Wenn Sie soliden Code schreiben, sind Unit-Tests ein Kinderspiel.

Bei Unit-Tests stellen Sie also sicher, dass jede isolierte Methode in Ihrem Code ordnungsgemäß funktioniert. Das würde bedeuten, dass der gesamte Code wie erwartet funktioniert, oder? Nicht wirklich. Sie müssen auch sicherstellen, dass einzelne Komponenten einwandfrei zusammenarbeiten. Und hier kommen Integrationstests.

Integrationstests

Integrationstests sind die Phase des Softwaretests, in der einzelne Softwaremodule als Gruppe kombiniert und getestet werden.

Ein gutes Beispiel, wenn der Komponententest nicht ausreicht, ist die Datenbankabfrage Bauherren. In Komponententests können Sie sicherstellen, dass Sie die gewünschten Bedingungen in der Abfrage aufgerufen haben. Wenn Ihre Abfrage jedoch komplizierter ist, können Sie nicht sicher sein, dass die von Ihnen verwendeten Bedingungen das erwartete Ergebnis zurückgeben, bis Sie die Datenbank tatsächlich aufrufen. Hier sollte also der Integrationstest erfolgen, der die Abfrage in einer Testdatenbank ausführt und die erwarteten Ergebnisse bestätigt.

Fälle, in denen Integrationstests erforderlich sind:

  • Überprüfen der korrekten Integration mit 3rd Partybibliotheken oder APIs
  • Überprüfen, ob zwei oder mehr Module mit Komponententests wie erwartet zusammenarbeiten

Funktionstests

Funktionstests sind definiert als das Testen der vollständigen Funktionalität einiger Anwendungen.

Sie sind im API viel einfacher zu schreiben als Anwendungen mit einer Benutzeroberfläche. Funktionstests für API sollten darin bestehen, tatsächliche Anforderungen an API-Endpunkte zu senden und das Antwortformat zu validieren. Sie sollten jede Route auf erfolgreiche und fehlerhafte Reaktion testen.

Aber übertreiben Sie es nicht, Sie benötigen keinen Test für jeden möglichen Fehler. Dies sollte bereits durch Unit- und Integrationstests abgedeckt sein.Hier möchten Sie nur sicherstellen, dass Ihre Route das richtige Antwortformat für einen Fehler zurückgibt. Wenn Ihre Routen unterschiedliche Rollen haben, sollten Sie auch die Antwort auf Sicherheitsfehler testen.

Hier sind einige hilfreiche Tools, mit denen Sie Ihre Funktionstests einfacher schreiben können:

  • PHP-Matcher – Bibliothek, mit der Sie Ihre Antwort anhand von Mustern überprüfen können. Sie können festlegen, welches Muster Sie für jedes Feld in Ihrer Antwort erwarten, anstatt echte Werte in Ihrer Datenbank zu bestätigen. Auf diese Weise können Sie nur Antwortformat und Feldtypen testen, ohne sich Sorgen machen zu müssen, ob sich eine Zeichenfolge oder Nummer in Ihrer Testdatenbank geändert hat.
  • Postman-Tests – Sie können Ihre Funktionstests in Postman schreiben, was für das Frontend-Team sehr nützlich ist Probieren Sie Ihre API-Endpunkte aus. Es wird wie eine interaktive API-Dokumentation sein. Sie können Postman-Tests in Newman integrieren – Befehlszeilen-Runner, mit dem Sie Tests in der Befehlszeile ausführen und in Kontinuierliche Integration (CI) .
  • Faker – Bibliothek zum Generieren gefälschter Daten für Ihre Testdatenbank

Noch einen Schritt weiter

Jetzt, da Sie wissen, dass Ihr Code funktioniert, Sie können die Leistung überprüfen.

Lasttest

Lasttest prüft, ob Ihre API reagiert erwartungsgemäß auf verschiedene Server.

Stresstests

Überprüfen Sie, ob die API bei gleichzeitigem Empfang einer großen Anzahl von Anforderungen wie erwartet funktioniert.

Muss ich eine 100\% ige Abdeckung haben?

Eine 100\% ige Abdeckung garantiert nicht, dass Ihr Code korrekt ist vollständig getestet und funktioniert. Dies bedeutet nur, dass Tests jede Zeile Ihres Codes verwendet haben. Es ist jedoch hilfreich, die Codeabdeckung auszuführen, um festzustellen, ob Sie einige Teile Ihres Codes nicht abgedeckt haben.

Wir haben festgestellt, dass wir vom Schreiben nicht profitieren Tests für einfache Methoden als Getter und Setter. Das Schreiben und Verwalten nimmt Zeit in Anspruch, insbesondere bei großen Projekten.

Während Tests die meisten potenziellen Fehler beseitigen, gibt es immer noch einige Randfälle, an die Sie nicht gedacht haben. Wenn ein Fehler auftritt, stellen Sie sicher, dass Sie ihn zuerst mit neuen Tests reproduzieren und dann Ihren Code korrigieren. Auf diese Weise wird sich Ihre Abdeckung verbessern und Sie werden sicher sein, dass Sie diesen Fall abgedeckt haben. Dies kann auch eine gute Möglichkeit sein, Ihre älteren Projekte abzudecken, für die noch keine Tests vorliegen.

Hier sind einige hilfreiche Tools zum Überprüfen der Qualität Ihres Codes und Tests:

  • Infektion – Tool für Mutationstests. Mutationstests bewertet die Qualität vorhandener Tests. Mutationstests ändern ein Programm auf kleine Weise und erwarten, dass Ihre Tests fehlschlagen, was bedeutet, dass Mutanten getötet werden. Bei jedem bestandenen Test bleibt die Mutante am Leben. Testsuiten werden anhand des Prozentsatzes der Mutanten gemessen, die sie töten. Mutationstests bieten ein Testkriterium, das als Mutation Score Indicator (MSI) bezeichnet wird. Das MSI misst die Wirksamkeit eines Testsatzes hinsichtlich seiner Fähigkeit, Fehler zu erkennen. Sie können es auch in CI integrieren und die Mindest-MSI festlegen, die erforderlich ist, damit CI erfolgreich ist.
  • PHPStan – PHPStan konzentriert sich darauf, Fehler in Ihrem Code zu finden, ohne ihn tatsächlich auszuführen. Es fängt ganze Klassen von Fehlern ab, noch bevor Sie Tests für den Code schreiben. Es bringt PHP näher an kompilierte Sprachen heran, da die Richtigkeit jeder Codezeile überprüft werden kann, bevor Sie die eigentliche Zeile ausführen.
  • Kontinuierliche Integration (CI) – ermöglicht es Ihnen, Ihre Tests bei jedem Commit auf git auszuführen. Es verhindert, dass Sie PR-s mit fehlgeschlagenen Tests zusammenführen.

Fazit

Es ist leicht, sich in all den Dingen zu verlieren, die Sie beim Schreiben von Tests finden. Das Hauptziel des Testens sollte sein, sicherzustellen, dass Ihr Code funktioniert und einfach zu warten ist. Wenn Sie mit dem Testen noch nicht vertraut sind, scheint es, als würden sie zu viel Zeit in Anspruch nehmen, aber geben Sie nicht auf, sobald Sie sie in den Griff bekommen, wird dies Ihr Codierungsleben viel einfacher und schneller machen. 🙂

Dieses kreative Stück wurde ursprünglich auf Locastic.com veröffentlicht – https://locastic.com/blog/what-to-do-when- Sie verlieren sich in API-Tests /

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.