Я пытаюсь создать автоматизацию тестирования для POST API, используя Rest-Assured и Java. Этот POST API имеет тело как Application/JSON, например:
{
"customer":{
"email": "[email protected]"
},
"password":"Teste@12"
}
Чтобы сделать этот запрос, я использую следующий код, но он возвращает код состояния «400», но я отправляю ту же информацию на Postman, и он возвращает «200»:
@And("envio as informacoes da chamada: (.*), (.*), (.*), (.*) e (.*)")
public void enviarDados (String srtEmail, String srtSenha, String srtAmbiente, String srtAPI, String srtToken) {
HashMap<String,String> postContent = new HashMap<String,String>();
postContent.put("email", srtEmail);
postContent.put("password", srtSenha);
//System.out.println("{\"customer\":" +postContent+ "}");
given().contentType(ContentType.JSON).header("Authorization", "Bearer"+srtToken).header("Content-Type", "application/json").
//with().body(postContent).
with().body("{\"customer\":" +postContent+ "}").
when().post(srtAmbiente+srtAPI).
then().statusCode(200);
}
Ответ «400»:
{
"status": 400,
"message": "Malformed request",
"additional_error": ""
}
Структура правильная? Как вы думаете, чего-то не хватает? Спасибо!
Не могли бы вы добавить тело ответа для кода 400? Вы можете распечатать ответ, добавив .prettyPeek() после .post(srtAmbiente+srtAPI)
Также вам не нужно добавлять заголовок Content-Type, так как вы уже указали его здесь .contentType(ContentType.JSON)
Вы отправляете неверное тело с помощью POST.
//This line will not serialize HashMap to JSON, but call toString()
.body("{\"customer\":" +postContent+ "}")
В результате ваша полезная нагрузка будет выглядеть так:
{"customer":{password=password, [email protected]}}
который не является допустимым JSON. Попробуй это:
Map<String, String> emailContent = new HashMap<>();
emailContent.put("email", "[email protected]");
Map<String, Object> postContent = new HashMap<>();
postContent.put("customer", emailContent);
postContent.put("password", "password");
given().contentType(ContentType.JSON)
.header("Authorization", "Bearer "+srtToken)
.with().body(postContent)
.when().post(srtAmbiente+srtAPI)
.then().statusCode(200);
Вы также можете использовать JSONObject вместо карты — pastebin.com/V1cx727C
Есть ли сообщение об ошибке с кодом 400?