/ / java REST Zabezpečené body odpovede s Content-Type: text / html s injektovanými html tagmi - java, json, rest, rest-assured

java REST Zabezpečené body odpovede s Content-Type: text / html s injektovanými html tagmi - java, json, rest, rest-assured

Povedzme, že niekto vyvinul zvyšok api, ktorý vracia dáta vo formáte json, ale nenastavil odpoveď Content-Type na application/json ale text/html.

Teraz mám test v REST Assured:

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

ale to nefunguje.I odhlásil odpoveď orgán a a to je to, čo dostanem:

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

a chyba:

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

Medzi značkami tela je moje očakávané json aleodkiaľ pochádza html tagy? Nemôžem ich vidieť v reakcii, keď testuj Api metódu v Postman alebo Paw alebo dokonca vo webovom prehliadači (pretože to je jednoduché GET s url params).

Mám podozrenie, že mám chybu "Kľúč cesty JSON sa nezhoduje." Z dôvodu týchto značiek.

odpovede:

0 pre odpoveď č. 1

V závislosti od spôsobu implementácie vašich koncových bodov môže formát vrátených údajov závisieť od hodnoty Accept záhlavie odoslané klientom. Takže skontrolujte presne to, čo hlavičky odosielate, keď testujete s poštou a v teste RESTAssured - môžu sa veľmi líšiť a váš koncový bod môže vrátiť HTML, ak explicitne neuvediete Accept: application/json vo vašej žiadosti.


0 pre odpoveď č. 2

Html tagy pochádzajú z Content-Type beingtext / html, takže json dáta sú rozpoznané ako text a sú zabalené do tela html. Ak skontrolujete text v prehliadači, pravdepodobne uvidíte html tagy.


0 pre odpoveď č. 3

ale odkiaľ pochádzajú tagy html?

Niekto ich pridal manuálne alebo napísal pravidlo na serveri alebo klientovi, aby ich pridal. "Obsahový typ" je súčasťou hlavičky.

HTML a BODY sú značkovacie značky, ktoré sú súčasťou dokumentu. Ak si pamätám správne, v HTML5 to nie sú potrebné.

Máte dve možnosti: 1) požiadajte niekoho, kto ich pridal, aby ich odstránil. (Môže to byť aj vy sám) 2) Použite štýl "no-lambda": "response =", odstráňte značky z odpovede a vykonajte kontroly výsledného json. Predné detaily pozri https://github.com/rest-assured/rest-assured/wiki/usage#getting-response-data Budete musieť pridať krok na odstránenie html tagov cez nejaký reťazec operácie alebo html analyzátora.