четверг, 23 мая 2024 г.

Как в pm.sendRequest() выполнить запросы в нужном порядке

Это выдержка из статьи «Как подготовить данные для запроса в Postman через pre-request». 


В Postman есть функция pm.sendRequest(), которая позволяет выполнять запросы до выполнения вашего основного запроса. Но есть проблемка, когда мы хотим вызвать несколько запросов подряд...

Кажется, что это будет легко. Просто напишем 2 pre-request и вызовем их подряд:

pm.sendRequest(req1, done); pm.sendRequest(req2, done); 

Но если второй запрос зависит от первого, он упадет. Почему? Потому что функция pm.sendRequests асинхронна. Это значит, что она сразу отправит оба запроса, а не будет дожидаться, когда отработает req1, чтобы запустить req2. 

Если мы хотим, чтобы запрос req2 отработал строго после выполнения req1, необходимо вызвать его внутри sendRequest по req1 (источник этого способа):


pm.sendRequest(req1, function () {   pm.sendRequest(req2, done); });

 

Попробуем на бесплатной системе Users. Вызываем метод getUser. У него в ответе много разных полей — вот было бы здорово, если бы они все были заполнены на тестовом юзере. А как это сделать?

Вообще в Users есть метод createuser, который решает эту проблему за один запрос. Но предположим, что такого метода нет. И единственный вариант — сначала пользователя создать через doregister, а потом заполнить все поля через fullupdateuser.

Вот так будет выглядеть pre-request скрипт, в котором запросы идут синхронно, по порядку:


const req_1_create = { url: 'http://users.bugred.ru/tasks/rest/doregister', method: 'POST', body: { mode: 'raw', raw: JSON.stringify({ email: "test_habr_1@mail.com", name: "Хабр 1", password: 1 }) } }; const req_2_update = { url: 'http://users.bugred.ru/tasks/rest/fullupdateuser', method: 'POST', body: { mode: 'raw', raw: JSON.stringify({ email: "test_habr_1@mail.com", name: "Васенька", birthday: "01.01.1900", gender: "m", date_start: "11.11.2000", hobby: "Валяться на диване", name1: "Тестовый, ясен пень", surname1: "Иванов", fathername1: "Петров", cat: "Маруся", dog: "Ушастый", parrot: "Васька", cavy: "Кто ты?", hamster: "Хомяк", squirrel: "Белая горячка к нам пришла", phone: "333 33 33", adres: "адрес 1", inn: "123456789012" }) } }; pm.sendRequest(req_1_create, function () { pm.sendRequest(req_2_update, function (err, res) { console.log(err ? err : res.json().message); }) });


Отправляем запрос — да! В ответе у нас уже имя «Васенька», то есть исправленные данные:


См также:

Что такое pm.sendRequest в Postman — базово о том, что это за функция такая

Как подготовить данные для запроса в Postman через pre-request — удобная статья на хабре, состоящая из этих двух мини-статей

Комментариев нет:

Отправить комментарий