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ď č. 1V 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.