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.
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 –
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. –