Удаленка для jenkins+selenide+selenoid+allure+docker спецов на 2-3 часа в день. 100% remote! Присоединиться к проекту

Postman: как из тела ответа передать параметр в тело нового запроса

post
api
postman
json
Теги: #<Tag:0x00007fedc01184f0> #<Tag:0x00007fedc01182e8> #<Tag:0x00007fedc0118158> #<Tag:0x00007fedc0127ec8>

(Aleksei) #1

Допустим у я отправил POST запрос на JSON и получил ответ “params”: “value”
и теперь мне нужно передать “value” автоматом на следующий новый пост запрос, как это сделать?


(Артем Борсук) #2
  1. Создаешь переменную в Postman (paramsVal)

  2. В запросе на вкладке Tests пишешь js код:

    var jsonData = JSON.parse(responseBody);
    postman.setEnvironmentVariable (“paramsVal”, jsonData.params);

После выполнения запроса он запишет значение в переменную.

также можно сделать несколько вариантов для разных ответов
if (responseCode.code === 201){
var jsonData = JSON.parse(responseBody);
postman.setEnvironmentVariable (“value1”, jsonData.value);
}

else if (responseCode.code === 409) {
var jsonData = JSON.parse(responseBody);
postman.setEnvironmentVariable (“value1”, jsonDataResponse.errors.meta.metaData.value);
}

может еще пригодиться:
если структура Json имеет вложености тогда строка будет примерно такая

postman.setEnvironmentVariable (“value1”, jsonDataResponse.вложеность1.вложеность2.value);


(Aleksei) #3

немного не дописал, я использовал данный метод для создания такой переменной

и теперь в новом окне , нового пост запроса я хочу автоматом в боди передавать значение данной переменной в value, я это делаю так ---- в хедере пишу в кей params а в value {{params}} ( я так токен передаю) и по идее это тоже должно работать но не работает и не пойму почему


(Артем Борсук) #4

и никаких ошибок на вкладке тест нет? а постман подтягивает саму переменную(коричневім по моему выделяет)?


(Aleksei) #5

да выделяет, но с вариантом для токена значение передается в хедер(куда надо) а вот как передать такуюже переменную в тело.
да вот если что то что я создал

var jsonData = JSON.parse(responseBody);
postman.setEnvironmentVariable(“paymentId”, jsonData.paymentId);

и я проверил что нужное значение тянет, и теперь мне надо его передать в тело нового запроса


(Артем Борсук) #6

так также ‘‘keyPaymentId’’: “{{PaymentId}}”


(Aleksei) #7

Но если я пропишу его в хедере то в боди его не передаст, а только на хедер, а если я пропишу место значения value {{paymentId}} то будет ексепшен


(Артем Борсук) #8

и какой же ексепшн?


(Aleksei) #9

“message”: “getSingleResult() did not retrieve any entities.”,


(Aleksei) #10

Короче еще раз что мне нужно, я получил ответ в формате json “params”:“value”
теперь я создаю в новом окне новый запрос и в тело хочу автоматом передать полученное “value” в тело нового запроса “params”:“value


(Артем Борсук) #11

Проверил все работает, в названиях нет совпадения? переменные разные ипользуются? в постмене можно еще дебаг включить и посмотреть что туда сохраняется


(Aleksei) #12

ну ты в body json запроса передаешь значение из переменной? таким образом? “params”:"{{Value}}
?


(Артем Борсук) #13

именно так


(Aleksei) #14

короче поменял название переменной и стало работать, а до етого не знаю че не работало, но спасибо


(Dmitri Komarist) #15

Скорее всего у тебя конфликт имен переменных, это когда переменная окружения и глобальная переменная имеют одно и тоже имя. В таких случаях значение переменной в окне просмотра показывается перечеркнутым и не используется в запросах. Очень противное поведение постмана поскольку избавится от такой переменной очень сложно (даже непосредственное удаление переменной из базы ни к чему не приводит, если снова создать переменую с таким именем она всеравно будет зачеркнута)
http://joxi.ru/8Anpw61cbBdVmO