[英]How to get mongodb objectId from HTTP response
我正在測試一個將對象保存在數據庫中的端點。 Post方法按預期工作,對象轉到數據庫。 我試圖找出如何從我得到的HTTP響應中獲取mongo objectID,以便我可以使用Put和Delete方法進行進一步測試,因為我需要URI的objectId。
@Test
public void saveRule() throws URISyntaxException, IOException {
RuleDTO ruleDTO = new RuleDTO();
ruleDTO.setTitle("My rule");
ruleDTO.setIndex(666);
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(ruleDTO);
String target = "http://localhost:8090" + "/v2/rules"; // fix
URI uri = new URI(target);
HttpPost httpPost = new HttpPost(uri.toASCIIString());
StringEntity entity = new StringEntity(json);
httpPost.setHeader("Accept", "application/json");
httpPost.setHeader("Content-type", "application/json");
httpPost.setEntity(entity);
HttpResponse response = httpClient.execute(httpPost);
int HTTPcode = response.getStatusLine().getStatusCode();
HttpEntity getEntity = response.getEntity();
String getJson = EntityUtils.toString(getEntity);
ObjectMapper objectMapper = new ObjectMapper();
Rule rule = objectMapper.readValue(getJson, Rule.class);
boolean isMyRule = false;
if (rule.getTitle().equals("My rule")) {
isMyRule = true;
}
boolean correctStatus = HTTPcode >= 200 && HTTPcode <= 300 ? true : false;
assertTrue(correctStatus);
assertTrue(isMyRule);
}
鑒於您說測試是針對端點,這個答案假設它是端到端測試而不是單元測試。 以下是您可以嘗試的一些事項:
POST
請求以添加記錄時,都會返回已添加的記錄的密鑰。 如果您可以選擇更改服務,也許您應該考慮將此功能添加到您的服務中(如果它還沒有)。 然后,在測試中,只需要從對您發出的POST
請求的響應中讀取密鑰,然后使用它來發出PUT
和DELETE
請求。 GET
請求。 然后,迭代獲取的記錄,直到獲得剛剛插入的記錄的密鑰(在您的情況下為ObjectId),並使用它來發出PUT
和DELETE
請求。 很明顯,這會使測試運行得更慢,尤其是當記錄數量很高時。 如果有GET
端點根據字段進行過濾,比如 - 例如使用查詢參數(例如: /v2/rules?title="My rule"&index="666"
),那么這應該大大加快測試執行速度,應該用於GET
請求。 PUT
和DELETE
請求。 這可能是最不正統的方式,如果您在實際數據庫上運行測試,則不建議這樣做。 但是,如果您計划在模擬數據庫上運行它(我認為如果它是您正在編寫的端到端測試,我認為您不會這樣做),那么這仍然是一種方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.