2016-08-03 16 views
1

Nehmen wir an, jemand entwickelte Ruhe-API, die Daten im JSON-Format zurückgibt, aber er hat keine Antwort Content-Type auf application/json gesetzt, sondern text/html.java REST Assured response body mit Content-Type: text/html mit injizierten html-Tags

Jetzt habe ich Test in REST geschrieben Assured:

given() 
    .param("username", username) 
    .param("password", password) 
.when() 
    .get("/authenticate") 
.then() 
    .statusCode(200) 
    .body("user.id" , hasItem(20)); 

, aber es funktioniert nicht. Ich loggte Antworttext und und das ist, was ich bekommen:

<html> 
    <body>{"key":"752E7A74E8F3999BE9EFE3EA0E0DF320","user":{"id":20,"firstName":"K1","lastName":"K1","role":"ROLE_CUSTOMER","phoneNumber":"888888888"},"expirationDate":"2016-08-10T13:52:50+02:00"}</body> 
</html> 

und der Fehler:

FAILED: test_login_as_valid_customer("888888888", "3432") 
java.lang.AssertionError: 1 expectation failed. 
JSON path key doesn't match. 
Expected: 20 
    Actual: 

zwischen Body-Tags gibt es meine erwartete json aber wo haben HTML-Tags kommen? Ich kann sie nicht als Reaktion sehen, wenn ich eine API-Methode in Postman oder Paw oder sogar im Webbrowser teste (da es einfach GET mit URL-Parametern ist).

Ich vermute, ich bekomme Fehler "JSON Pfadschlüssel stimmt nicht überein." wegen dieser Tags.

Antwort

0

Je nachdem, wie Ihre Endpunkte implementiert werden, hängt das Format der zurückgegebenen Daten möglicherweise vom Wert Accept header des Clients ab. Prüfen Sie also genau, welche Header Sie senden, wenn Sie mit Postman und in Ihrem RESTAssured-Test testen - sie können sich durchaus unterscheiden, und Ihr Endpunkt gibt möglicherweise HTML zurück, wenn Sie in Ihrer Anfrage nicht explizit Accept: application/json angeben.

+0

In Postman Ich gebe Accept-Header nicht an. Als ich es in RESTAssured test - give(). Accept (ContentType.JSON) versuchte, gab es trotzdem text/html zurück –

+0

Ich habe gerade versucht, einen ähnlichen Test mit API auszuführen, der Content-Type: application/json zurückgibt und es passierte. Die Zielvariable in json wurde gefunden und zur Bestätigung korrekt extrahiert. –

0

Die HTML-Tags stammen aus dem Content-Type, der text/html ist. Daher werden die JSON-Daten als Text erkannt und in den HTML-Textkörper eingefügt. Wenn Sie den Text im Browser überprüfen, werden Sie wahrscheinlich die HTML-Tags sehen.

+0

Ich habe die Antwort im Browser überprüft und es gab keine HTML-Tags. –