Как запросить токен отправки POST API и значения тела с помощью Rest-Assured?

Я пытаюсь создать автоматизацию тестирования для 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?

htshame 10.04.2019 15:31

Не могли бы вы добавить тело ответа для кода 400? Вы можете распечатать ответ, добавив .prettyPeek() после .post(srtAmbiente+srtAPI)

bhusak 10.04.2019 15:41

Также вам не нужно добавлять заголовок Content-Type, так как вы уже указали его здесь .contentType(ContentType.JSON)

bhusak 10.04.2019 15:43
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
647
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы отправляете неверное тело с помощью 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

Wilfred Clement 10.04.2019 17:43

Другие вопросы по теме