Создание и использование собственных библиотек функций в 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. Такой подход делает процессы тестирования и разработки более удобными и масштабируемыми.