Testen von REST-APIs mit PHPUnit

8

Ich erstelle eine Reihe von RESTful-APIs und muss nun Komponententests für sie schreiben. Ich bin mir nicht sicher, was die Unit-Tests eigentlich testen sollten.

Sollten Unit-Tests prüfen, ob die vom Server empfangene Antwort für verschiedene Eingaben korrekt ist? Wenn ja, ist es eine gute Praxis, eine Reihe von korrekten Antwortformaten vordefiniert zu haben und die Antworten darauf zu überprüfen?

AKTUALISIEREN

Ich rufe diese Dienste über CURL an und kann definitiv den Statuscode überprüfen. Die Antwort kann für verschiedene Eingaben variieren, also sollte ich nach allen möglichen Antworten suchen?

Wie wird Komponententests normalerweise für RESTful-APIs mit PHPUnit im Allgemeinen durchgeführt?

    
Harsha 16.09.2012, 09:18
quelle

2 Antworten

4

Wenn die Datenschicht Ihrer API ausreichend abstrahiert ist, so dass Sie konsistente und vorhersehbare Ausgaben für eine gegebene Eingabe erhalten können, sollten Ihre Testfälle definitiv einige gemeinsame Ausgabeerwartungen für eine endliche Liste von Eingaben enthalten. Sie sollten auch auf Fehlerfälle testen Sie können sich drumspielen.

Wenn Ihre API nicht gegen eine Datenschicht ausgeführt werden kann, die sich in einem vorhersehbaren Zustand befindet (wenn sie beispielsweise mit Live-Daten oder mit Daten verbunden ist, die von Entwicklern verwendet werden), werden Sie am Ende viel ausgeben Zeit, um Ihre Tests zu korrigieren, um den neuen Status der Daten korrekt zu modellieren. Das macht Komponententests weniger wertvoll, da Sie sie möglicherweise nicht so oft ausführen und weil Sie nie sicher sind, ob ein Testfehler aufgrund einer Änderung der Daten oder einer Änderung der Programmlogik vorliegt. Ob das das Risiko überwiegt, keine Unit-Tests zu haben oder nicht, hängt von Ihrer individuellen Situation ab (wie oft brechen die Tests ab, wie kritisch ist der Service & amp; ct).

Was die Verwendung von PHPUnit zum Ausführen von Testfällen angeht, kann ich das nicht speziell beantworten, aber ich stelle mir vor, dass Sie es als @basiljames notieren würden; Führen Sie einen Anruf für einen bestimmten Endpunkt aus und überprüfen Sie, ob die empfangene Antwort Ihren Erwartungen entspricht. Nicht anders als jeder andere Komponententest, abgesehen von der Tatsache, dass sie etwas langsamer laufen können.

    
cori 17.09.2012, 05:09
quelle
2

Sie können JUnit für Ihre Testfälle verwenden. Sie müssen nach HTTP Status Code suchen und danach den Inhalt der Antwort für ein bestimmtes Attribut oder einen bestimmten Wert.

    
basiljames 16.09.2012 12:57
quelle

Tags und Links