2016-08-03 389 views
1

假設有人開發了rest API,它以json格式返回數據,但他沒有將響應Content-Type設置爲application/json,而是text/htmljava REST Content-Type:text/html帶有html標籤的確定響應體

現在我有測試寫放心:

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

,但它不工作。我註銷響應的身體和,這就是我得到:

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

和錯誤:

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

身體標記之間,這正是我期望的JSON,但哪裏html標籤從何而來?當我在Postman或Paw中甚至在Web瀏覽器中測試api方法時,我無法看到它們(因爲它使用url參數很簡單)。

我懷疑我得到錯誤「JSON路徑密鑰不匹配」。因爲這些標籤。

回答

0

根據端點的實現方式,返回的數據格式可能取決於客戶端發送的Accept標頭的值。因此,在使用Postman進行測試時以及在RESTAssured測試中,確切地檢查您發送了哪些標頭 - 它們可能會有所不同,並且如果您的請求中未明確指定Accept: application/json,則端點可能會返回HTML。

+0

在郵差中,我沒有指定Accept頭。當我嘗試RESTAssured測試 - 給定()。接受(ContentType.JSON)它返回text/html無論如何 –

+0

我只是試圖執行類似的測試與api返回Content-Type:application/json並通過。 json中的目標變量被發現並被正確提取以進行斷言。 –

0

html標記來自Content-Type,它是text/html,所以json數據被識別爲文本並被包裹在html的主體中。如果你檢查瀏覽器中的文本,你可能會看到html標籤。

+0

我檢查了瀏覽器中的響應,並且沒有html標記。 –