Создание и использование собственных библиотек функций в Postman

Postman поддерживает создание и использование собственных библиотек функций, которые можно применять в тестах и предварительных запросах (pre-request). Это позволяет выносить повторяющийся код в отдельные функции, что упрощает поддержку и повышает читаемость кода. В этой статье рассмотрим процесс создания библиотек функций в Postman и их использования на практике.
Преимущества использования библиотек функций
Собственные функции позволяют сократить повторение кода, структурировать тесты и сделать их более гибкими. Например, если вам нужно проверять несколько API-методов на один и тот же набор параметров, можно вынести эту проверку в отдельную функцию и использовать её во всех запросах.
Шаг 1: Создание функции в окружении
Одним из способов создания функций является добавление их в переменные окружения. В Postman переменные окружения могут хранить как простые значения, так и функции в виде JavaScript-кода.
Чтобы добавить функцию в переменные окружения в Postman, выполните следующие шаги:
- Откройте Postman и выберите коллекцию или запрос, в котором планируете использовать функцию.
- Откройте вкладку Pre-request Script:
- Вставьте в область редактирования код:
pm.environment.set("checkProperty", ` (object, property) => { return object.hasOwnProperty(property); } `);
Он создаст в текущем окружении переменную с именем checkProperty и добавит в неё исходный код нашей функции.
Обратите внимание, что код самой функции должен быть заключен в обратные кавычки (`
), чтобы Postman распознал его как строку. -
Выполните запрос. Это исполнит добавленный нами код.
Теперь функция checkProperty
доступна для использования в любом запросе. Использование этой функции в Postman помогает оптимизировать тесты, делая их более универсальными и читаемыми.
Шаг 2: Вызов функции в запросах и тестах
После добавления функции в переменные окружения, её можно использовать в тестах или в предварительных запросах (pre-request). Рассмотрим, как это сделать:
1. Вставка кода в секцию тестов
Чтобы проверить работу функции, добавьте код теста на вкладку Tests запроса:
- Откройте ваш запрос в Postman.
- Перейдите во вкладку Tests:
- Вставьте следующий код для вызова функции, чтобы проверить, что свойство
status
существует в ответе:
// Получаем строку функции из переменной окружения
let checkPropertyStr = pm.environment.get("checkProperty");
// Создаём функцию из строки
let checkProperty = eval(checkPropertyStr);
// Получаем JSON-ответ от сервера
let response = pm.response.json();
// Выполняем тест на проверку наличия поля 'status' в ответе
pm.test("Проверка наличия поля 'status'", () => {
pm.expect(checkProperty(response, 'status')).to.be.true;
});
Теперь вы можете запустить запрос и посмотреть результаты в нижней панели на вкладке TestResults:
Если функция работает правильно, Postman покажет, что тест успешно пройден, либо если в ответе ЭП нет поля "status", должно быть получено сообщение:
Проверка наличия поля 'status' | AssertionError: expected false to be true
Любой из этих вариантов подтверждает, что функция была успешно добавлена и вызвана.
Несмотря на то что функция была добавлена при помощи данного запроса, она может подобным образом подключаться и использоваться в любых других запросах, находящихся в текущем окружении.
Создание более сложных библиотек
В Postman можно создавать более сложные библиотеки функций, добавляя несколько взаимосвязанных функций. Пример библиотеки для работы с датами:
pm.environment.set("dateUtils", {
formatDate: (date) => {
let d = new Date(date);
return d.toISOString().split('T')[0];
},
addDays: (date, days) => {
let result = new Date(date);
result.setDate(result.getDate() + days);
return result.toISOString();
}
});
Теперь dateUtils
хранит две функции: formatDate
для форматирования дат и addDays
для добавления дней. Эти функции можно использовать в тестах для проверки дат в API.
Для наглядности приведем пример использования функции из нашей библиотеки dateUtils
для проверки, что ответ API содержит дату в нужном формате:
let dateUtils = eval(pm.environment.get("dateUtils"));
let responseDate = pm.response.json().date;
pm.test("Проверка формата даты", () => {
pm.expect(dateUtils.formatDate(responseDate)).to.match(/^\d{4}-\d{2}-\d{2}$/);
});
Использование библиотеки функций в нескольких коллекциях
Чтобы сделать библиотеку функций доступной в разных коллекциях, можно сохранить её в глобальных переменных. Эти переменные позволяют хранить данные, которые будут доступны во всех запросах и коллекциях в пределах одного рабочего пространства (workspace) Postman. Это особенно полезно для крупных проектов, где требуется согласованность между тестами разных API.
Добавление функций в глобальные переменные совершенно аналогичен добавлению в переменные окружения, за исключением того что вместо свойства pm.environment используется pm.globals. Полный код добавления предыдущих функций будет таким:
pm.globals.set("dateUtils", `
{
formatDate: (date) => {
let d = new Date(date);
return d.toISOString().split('T')[0];
},
addDays: (date, days) => {
let result = new Date(date);
result.setDate(result.getDate() + days);
return result.toISOString();
}
}
`);
Выполняется он так же в Pre-request Script Любого запроса.
Совершенно аналогично, заменой свойства environment на globals, изменяется и код использования этих библиотечных функций, выполняемый во вкладке Tests:
let dateUtilsStr = pm.globals.get("dateUtils");
let dateUtils = eval(`(${dateUtilsStr})`);
let currentDate = new Date().toISOString();
let expectedDate = dateUtils.addDays(currentDate, 3);
pm.test("Проверка, что дата на 3 дня больше текущей", () => {
pm.expect(expectedDate).to.equal(dateUtils.addDays(currentDate, 3));
});
Заключение
Создание и использование собственных библиотек функций в Postman позволяет структурировать код, сделать его более гибким и уменьшить повторение. Для создания динамической и удобной документации на основе тестов и примеров можно также воспользоваться созданием динамической документации API. Такой подход делает процессы тестирования и разработки более удобными и масштабируемыми.