2016-03-23 23 views
0

Wir haben REST Webservice. Es funktioniert über JSON-Datendarstellung. Ich möchte Funktionstests anbieten. Ich plane, RestAssured framework zu verwenden. Es bietet verständliche Methoden zum Testen der Korrektheit von Ausgabe-JSON.So trennen Sie die Geschäftslogik in RestAssured

Beispiel, get("/method").then().assertThat().body("obj.field", equalTo(5));

Aber ein Problem auftreten: Wenn json Struktur ändert sich, alle Tests sind ungültig. Wenn zum Beispiel field in field2 umbenannt werden soll, müssen alle Tests mit dem Auftreten von field behoben werden. Das Problem ist dem Testen von Webseiten sehr ähnlich, wo wir das Vorhandensein einiger Webelemente usw. überprüfen sollten. Gibt es eine ähnliche Lösung für das Testen von REST API, oder könnten Sie etwas Elegantes empfehlen?

Antwort

0

Genau wie bei einer HTML-Seite besteht eine Möglichkeit, Tests zu schreiben, die weniger Änderungen ausgesetzt sind, darin, eine Strategie zu verwenden, um das Ziel zu finden, das ausgewertet werden soll. Bei einer Webseite würden Sie eine XPath-Abfrage, einen CSS-Selector oder direkt die ID verwenden, um Abhängigkeiten von den Vorfahren zu vermeiden.

Also, wie es mit einem JSON zu tun? Nun könnte man einen regulären Ausdruck verwenden, aber es kann wirklich chaotisch oder Sie einen XPath-ähnliche Abfrage für JSON verwenden:

http://goessner.net/articles/JsonPath/
http://defiantjs.com/

Also in Ihrem Fall das Schreiben zuverlässige Tests ist mehr darüber, was Sie bewerten eher als das Framework, das Sie verwenden, um es zu tun.

1

In dem Beispiel in Ihrer Frage validieren Sie den gesamten Körper eines Antwortobjekts, in welchem ​​Fall es wahrscheinlich ist, dass Sie brüchige Tests erstellen.

aber es sieht aus wie REST-Assured bereits alle Funktionen bietet Ihnen bestimmte Teile eines JSON-Antwort testen müssen:

JSON example

JSON Advanced Examples

Using JSON Path

Sie können sogar map objects und dann tun Sie, was Sie wollen, mit den konstruierten Objekten, zum Beispiel Validierung und Manipulation.

Weitere Beispiele finden Sie unter here.

+0

Wenn Sie der Meinung sind, dass Ihre Frage immer noch nicht ausreichend beantwortet wird, bearbeiten und fügen Sie weitere Details hinzu. –

+0

Vielen Dank für nützliche Links. Es scheint, dass ich Folgendes tun sollte: 1. Java-Klassen erstellen, 2. jsons, die von Webservice erhalten wurden, zu diesen Klassen deserialisieren, 3. Validierungsmethoden für diese Klassen schreiben. 4. Validierungsmethoden verwenden, die oben in meinen Tests erwähnt wurden.Im Falle von JSON-Änderungen sollte ich die Namen der Felder der Java-Klassen ändern und die Validierungsmethoden entsprechend anpassen, aber die Tests bleiben korrekt. Bitte korrigieren Sie mich, wenn ich falsch liege – Anton

+0

Ich denke, es hängt von der Tiefe (und Länge - Zeit) der Prüfung erforderlich. Ich habe in der Vergangenheit ziemlich genau das getan, was Sie beschrieben haben, und ein Framework geschrieben, um die tatsächlichen Objekte mit erwarteten Objekten (oder den relevanten Teilen) zu vergleichen. Es gibt Kosten, die nicht trivial sind - 1. Schreiben des Frameworks 2. Beibehalten des Frameworks und Ihrer Objekte (halten Sie sie auf dem Laufenden mit den Antworten). Wenn dies wie Overkill scheint, könnten Sie einfach die relevanten Teile der Antwort testen, ohne zuerst das Mapping in Objekte durchzuführen, mit JSON Path usw. –

0

Änderungen in der REST-API (besonders öffentlich) sind seltener als in der GUI. Wenn Änderungen in der API eingeführt werden, sollten sie mit einer neuen Version markiert werden und in den meisten Fällen nicht die alte Version unterbrechen. Also halten Sie Ihre Tests so einfach wie möglich, ohne zusätzliche Muster einzuführen, die einige Vorteile haben - Sie können sie einfach wegwerfen und neue schreiben. Hihger-Test-Framework-Komplexität bietet höhere Wartungskosten. Jeder Weg in REST-Assured kann ResponseSpecification erstellen und in Assertions wiederverwenden.

Verwandte Themen