Отправка значений через Postman полученных от сайта-генератора (фио, инн, снилс и т.д.)
При тестировании API через Postman, возникла небходимость отправить в Body запроса валидные данные Контрагента полученные от сайта-генератора случайных данных.
Для генерации данных физического или юридического лица я использую 2 сайта:
1. https://www.fakexy.com/fake-address-generator-ru - генерирует такие данные как ФИО, адрес, пол и т.д.
2. https://radar4site.ru/pages/innkpp.html - генерирует данные документов, такие как ИНН, СНИЛС и т.д.
Все эти реквизиты мне необходимо отправить через 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:
Теперь мы находимся внутри функции эхо-запроса и может писать локаторы для поиска нужного нам значения ФИО.
После элемента "Full Name" сайт выдает нужные мне значения ФИО:
Поэтому я найду содержание элемента 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:
После того как нашли все локаторы и присвоили им переменные, не забываем прописать закрытие функции эхо-запроса:
});
Таким же образом я достаю остальные реквизиты рандома с этого сайта.
02
По второму сайту https://radar4site.ru/pages/innkpp.html, который отдаст мне ИНН, СНИЛС исследую нужный элемент:
Создаю на вкладке 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-го сайта-рандомайзера:
По классу и 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:
Скриншот этих переменных ИНН и СНИЛС отправляемых в Body:
На этом у меня всё!
Сегодня мы научились сохранять данные с помощью cheerio со страниц HTML и использовать их для переменных Postman при тестировании API.