Отправка значений через Postman полученных от сайта-генератора (фио, инн, снилс и т.д.)

При тестировании API через Postman, возникла небходимость отправить в Body запроса валидные данные Контрагента полученные от сайта-генератора случайных данных.

Для генерации данных физического или юридического лица я использую 2 сайта:

Все эти реквизиты мне необходимо отправить через Postman на сервис, который их примет и обработает. А конкретно создаст Контрагента в 1С.

И так, поехали!

01

Чтобы отправить данные в Body запроса, их сначала нужно инициализировать через переменные. А чтобы получить и положить значения в эти переменные с сайта-рандомайзера - я воспользуюсь JS анализатором HTML этого сайта: библиотекой cheerio.

Эти значения переменных я инициализирую перед отправкой основого запроса Body в Pre-request - это так называемый "эхо" - запрос, который заберет значения с сайта-рандомайзера и сохранит их в переменные, которые я пропишу в основном запросе Body для отправки на конечную точку сервиса (endpoint).

В Postman на вкладке Pre-request я пропишу через константу ссылку на нужный сайт-рандомайзер откуда мне нужны значения выдаваемые этим сайтом. Например, мне нужны ФИО и я буду получать их с сайта https://www.fakexy.com/fake-address-generator-ru:

//генерация данных с сайта генератора №1
//заполнение предварительного пустого эхо-запроса для получения страницы html по указанной ссылке:
const echoPostRequest1 = {
    url: 'https://www.fakexy.com/fake-address-generator-ru',
    method: 'POST',
    body: {
    }
};

Теперь отправляю этот запрос и подключаю cheerio:

//Отправить вышезаполненный эхо запрос:
pm.sendRequest(echoPostRequest1, function (err, res) {
//Присвоить переменной $ ответ html в виде text:
    const $ = require('cheerio').load(res.text());

Скриншот как этот Pre-request выглядит в Postman:

2024-08-22 230516

Теперь мы находимся внутри функции эхо-запроса и может писать локаторы для поиска нужного нам значения ФИО.

После элемента "Full Name" сайт выдает нужные мне значения ФИО:
2024-08-22 231508

Поэтому я найду содержание элемента td "Full Name" и после него выведу нужные мне ФИО с сохранением его в переменные. Вы тут сразу заметите регулярку, т.к. Фамилию, Имя и Отчество мне нужно сохранить отдельно, каждое в свою переменную. Но если вам это не нужно, то можете сохранить "как есть" без регулярки:

//Имя: найти по элементу <td> текст "Full Name" и вывести следующее (next) значение регулярки:
    const firstNameRus = $('td:contains("Full Name")').next().text().match(/(?<=\s).*(?=\s)/);
    console.log("Имя контрагента cmn:FirstNameRus = " + firstNameRus);
    pm.variables.set("firstNameRus", firstNameRus);
//Фамилия: найти по элементу <td> текст "Full Name" и вывести следующее (next) значение регулярки:
    const lastNameRus = $('td:contains("Full Name")').next().text().match(/^\S+/); 
    console.log("Фамилия контрагента cmn:LastNameRus = " + lastNameRus);
    pm.variables.set("lastNameRus", lastNameRus);
//Отчество: найти по элементу <td> текст "Full Name" и вывести следующее (next) значение регулярки:
    const middleNameRus = $('td:contains("Full Name")').next().text().match(/(?!=\s+)(?:\S+)$/);
    console.log("Отчество контрагента cmn:MiddleNameRus = " + middleNameRus);
    pm.variables.set("middleNameRus", middleNameRus);

Реквизиты ФИО я вывожу в консоли Postman через переменные константы и сохраняю их значения в отдельные переменные на уровне запроса для использования их в Body:

2024-08-22 232855

После того как нашли все локаторы и присвоили им переменные, не забываем прописать закрытие функции эхо-запроса:

});

Таким же образом я достаю остальные реквизиты рандома с этого сайта.

02

По второму сайту https://radar4site.ru/pages/innkpp.html, который отдаст мне ИНН, СНИЛС исследую нужный элемент:

2024-08-23 003810

Создаю на вкладке Pre-request еще один "эхо" - запрос:

//генерация данных с сайта генератора №2
//заполнение предварительного пустого эхо-запроса для получения страницы html по указанной ссылке
const echoPostRequest2 = {
    url: 'https://radar4site.ru/pages/innkpp.html',
    method: 'POST',
    body: {
        
    }
};
//Отправить вышезаполненный эхо запрос
pm.sendRequest(echoPostRequest2, function (err, res) {
//Присвоить переменной $ ответ html в виде text
    const $ = require('cheerio').load(res.text());

Т.е. здесь видно, что я продолжаю писать Pre-request скрипт, но уже для 2-го сайта-рандомайзера:

2024-08-22 234929

По классу и id ищу ИНН и СНИЛС, вывожу их значения в консоли и присваиваю им переменные на уровне запроса для отправки в Body (здесь можно заметить, что для СНИЛС я применяю метод JS slice, т.к. этот номер мне нужно расширить спецсимволами тире и пробелом в конце для тестирования):

//Найти по классу inputByCenter и значению placeholder значение value ИНН
    $('.inputByCenter[id="innfl"]').each(function() {
        randomInn = $(this).val();
        console.log("ИНН посредника cmn:DocNumber = " + randomInn);
        pm.environment.set("innDocNumber", randomInn);
    });
//Найти по классу inputByCenter и значению placeholder значение value снилса
    $('.inputByCenter[id="snils"]').each(function() {
        randomSnils = $(this).val();
        randomSnilsa = randomSnils.slice(0,3) + "-" + randomSnils.slice(3,6) + "-" + randomSnils.slice(6,9) + " " + randomSnils.slice(9,11)
        console.log("СНИЛС посредника cmn:DocNumber = " + randomSnilsa);
        pm.variables.set("snilsDocNumber", randomSnilsa);
    });
});

Скриншот Pre-request скрипта в Postman:

2024-08-22 235458

Скриншот этих переменных ИНН и СНИЛС отправляемых в Body:

2024-08-23 000011

На этом у меня всё!

Сегодня мы научились сохранять данные с помощью cheerio со страниц HTML и использовать их для переменных Postman при тестировании API.

mr. Mak

Остались вопросы? Пишите на почту admin@hzit.ru

Администратор сайта hzit.ru
Back to top