Post запит з параметрами в фреймворку RestAssured

При тестуванні post запита з параметрами виникла проблема…

Тестові дані…:
TestUrl = http://test-server.pl.com/pay/survey/save?param1=test1&param2=test1&param3=test1 *

  • Url видуманий для прикладу

String URL_BASE = “http://test-server.pl.com”;
String URL_SURVEY = “/pay/survey/save”;
String BODY_SURVEY = “{"ans":[{"id":1,"a":1},{"id":3,"a":1},{"id":4,"a":1}],"pid":"aa00-a"}”;

Створюю запит з body :

RestAssured.baseURI = URL_BASE;

Response result = given()
.parameters(param1, test1)
.parameters(param2, test1)
.parameters(param3, test1)
.body(BODY_SURVEY)
.when()
.post(URL_SURVEY);

Тест валиться з помилкою:
java.lang.IllegalStateException: You can either send form parameters OR body content in POST, not both!
Параметри пробував ставити до body, після when().

Якщо я в .post() вставлю повністю всю Url .post(TestUrl ) з параметрами, тест успішний:

Response result = given()
.body(Variable.BODY_SURVEY)
.when()
.post(URL_SURVEY);

Підскажіть як правильно написати даний post запит так, щоб можна було вказувати параметри окремо.

кажись в RestAssured имеется метод param(String, String)
Попробуйте использовать его вместо parameters().

Попробуйте так

либо так

и добавте
given().log().ifValidationFails()

чтобы получить лог, если вы что то не так будете передавать в параметрах

1 лайк

Логично, как вы одновременно пошлете и то и то, особенно если считать что параметры тоже являются частью боди.Поэтому или шлите чисто боди и сами склеивайте нужные параметры в нем или параметры. Сейчас у вас в боди полный бардак, в теле пост запроса пытается послать что-то типа:

POST /script HTTP 1.1
Host blabla.com

a=1&b=2
{a:1}

Дякую за посилання!
З таким видом вказування параметрів все працює:
post("/reserve/{hotelId}/{roomNumber}", "My Hotel", 23);