Postman: быстрый старт для разработки и тестирования

.

Эта статья предназначена для ускорения и упрощения процесса освоения базовой функциональности инструмента Postman.

Компания позиционирует свой продукт как платформу для разработки API.

Но почему все любят платформу Postman?

— Это мощный инструмент для тестирования и разработки API, который в то же время имеет простой и интуитивно понятный интерфейс. Если вы впервые открываете эту программу и знаете разницу между POST и GET, то вы легко сможете отправить свой первый запрос. Однако есть несколько нетривиальных приемов, которые значительно облегчают жизнь.

Запросы Postman

Так что давайте’начнем (get postman app).

Мы ищем нужную кнопку (1) в верхней центральной части и создаем рабочее пространство (или выбираем из уже имеющихся, как делаю я). Понятие рабочее пространство включает в себя группировку ваших проектов — это может быть папка или рабочий стол, если вам так хочется.

После этого мы создаем рабочее пространство.

Затем мы нажимаем плюс (2) и создаем вкладку запроса.

<фигура>

Все предельно просто, используя GET-запрос:  задаем url, добавляем параметры (можно «включать» и «выключать» параметры), нажимаем send и видим ответ в нижней половине экрана (на сервере я просто возвращаю html-страницу и представляю все входящие параметры в формате json). Переключаясь между вкладками в области ответа, мы можем найти любую информацию и даже переключаться между представлениями и форматами вывода.

<фигура>

Справа от кнопки "Отправить" находится кнопка Сохранить. При попытке сохранения, почтальон попросит вас указать/создать коллекцию. Коллекция - это группа запросов в рабочей области (отсортированная, например, по проекту). Я создал коллекцию test_collection. Мы сохраним ваш запрос в ней.

Окружение Postman

Давайте’ продолжим.

В Postman существует понятие окружения — это набор переменных, которым можно присвоить значение и использовать в процессе работы. Окружений может быть несколько (для продаж, для этапов, для разных версий — для чего угодно). Среда привязана к операционной среде: у каждой операционной среды есть своя среда postman.

Нажимаем на шестеренку в правом верхнем углу и создаем окружение.

<фигура>

Я создал среду local_test_env с 2 переменными: host и username. Для значений переменных есть 2 колонки. Единственное отличие заключается в том, что если вы поделитесь своим проектом с командой, то значение из первого столбца будет общим, а запросы, которые вы делаете на своем ПК, будут использовать второй столбец. Синхронизация учетной записи postman также происходит из первого столбца.

Я обычно дублирую их — лучше взять за привычку заполнять все подряд, и заменять данные в случае необходимости.

Выбираем наше окружение как активное (есть выпадающий список слева от шестеренки).

Давайте’отправим POST с использованием переменных. Мы должны добавить вкладку и выбрать тип POST-запроса. Мы хотим использовать переменную host из нашего окружения. Переменные записываются в двойных фигурных скобках. Если мы поставим скобки и начнем писать имя переменной, то postman предложит нам выбрать переменную из текущего окружения. Давайте’выберем. Поскольку это POST-запрос, мы переходим на вкладку body (под адресной строкой) и добавляем параметр username, значением которого будет переменная a variable. Я добавил еще несколько параметров для наглядности, сервер вернет их сумму.

<фигура>

Сервер вернул нам json-строку.

В Postman мы можем взаимодействовать с полученным результатом, программно отправлять запросы и писать тесты.

Несколько слов о тестах

Мы открываем консоль с помощью комбинации cmd + alt + c (ctrl + alt + c для Windows). Я сделал один запрос и вижу его логи. Кроме того, вы можете вывести что-то в консоль следующей командой:

console.log("что-то")

Тесты пишутся на вкладке Tests. Я приведу несколько примеров простых тестов, а затем мы посмотрим, как с ними работать.

    pm.test("Код состояния 200", function () {
        pm.response.to.have.status(200);
    });

Это обычная анонимная функция. В данном случае мы говорим, что ответ должен иметь статус 200.

Благодаря тому, что мы получаем json-строку в ответе сервера, мы можем разобрать ее в переменную. Давайте сделаем это со следующей строкой:

    var jsonData = pm.response.json();

Тогда мы используем новую переменную:

    pm.test("контрольное число равно 9", function () {
        pm.expect(jsonData.total).to.eql(9);
    });

В данном примере мы ожидаем, что total в jsonData будет эквивалентен 9.

А теперь давайте попробуем сравнить полученное значение поля «name» из jsonData с переменной username, которая есть в нашем окружении.

Вы можете получить переменную из окружения следующим образом:

    pm.environment.get('username')

А теперь тест на эквивалентность:

    pm.test("check name equal variable username", function () {
        pm.expect(jsonData.name).to.eql(pm.environment.get('username'));
    });

В окружении можно не только читать, но и писать.

Мы пытаемся получить переменную "total" из окружения (ее там еще нет).

    var sum = pm.environment.get('total');

Поскольку мы ничего не получили из окружения, то и в «сумме» ничего не будет. Мы создадим «total» в окружении и запишем туда значение, полученное из jsonData.total.

.

    if (!sum) {
        pm.environment.set('total', jsonData.total);
    }

А теперь давайте посмотрим, что получилось:

<фигура>

Все тесты, кроме первого, прошли. Сервер возвращает нам код 201, в то время как мы ожидаем 200. Наша переменная находится в окружении, так что все работает.

А теперь, когда вы немного разобрались с postman, давайте попробуем отправить запрос, или скорее несколько.

Задача: отправить определенное количество запросов, каждый раз меняя параметр.

    • Сначала мы создаем новую коллекцию циклических запросов,
    • Затем мы создаем POST-запрос,
    • После этого тела мы добавляем параметр «digit», который будет меняться в запросе (мы берем значение из окружения).
    • В закладке script предзапроса мы добавляем следующий код:

    var digits = pm.environment.get('digits');
     
    if (!digits) {
        digits = ["2", "4", "5", "22", "13", "6"];
    }
     
    console.log("digits: " + digits);
     
    var CurrentDigit = digits.shift();
     
    pm.environment.set('digit', currentDigit);
    pm.environment.set('digits', digits);

(Мы проверяем, есть ли в окружении переменная «digits», и создаем ее, если такой переменной нет. Мы выводим массив «цифр» в консоль перед запросом. Далее мы берем первый элемент из «цифр», удаляя значение из самого массива. И устанавливаем это значение в окружение для «digit» и «digits». В digits уже на один первый элемент меньше.)

На вкладке digit» в digits» вы можете установить значение.

На вкладке «Тесты» мы напишем следующее:

    var digits = pm.environment.get('digits');
    var digit = pm.environment.get('digit');
     
    console.log("сервер получил цифру = " + pm.response.json().digit);
     
    if (digits && digits.length > 0) {
        postman.setNextRequest("запрос цикла");
    } else {
        postman.setNextRequest(null);
        console.log("stop");
        pm.environment.unset("digits");
        pm.environment.unset("digit");
    }

(Мы берем «digit» и «digits» из окружения и выводим некоторую информацию в консоль. Если «цифра» не пуста, мы задаем следующий запрос setNextRequest и передаем текущий запрос в качестве параметра. В противном случае мы говорим, что больше ничего делать не нужно, очищаем переменные окружения и выводим строку «stop» в консоль.)

После всего этого мы указываем на то, что в консоли не будет ничего сделано.

После всего этого мы открываем Runner (в левом верхнем углу), выбираем нашу новую коллекцию и наш запрос цикла, выбираем окружение и нажимаем Run loop.

<фигура>

В бегуне мы видим, что выполнено 6 запросов.

<фигура>

Затем открываем консоль и смотрим логи:

Вывод

Мы протестировали некоторые из возможностей Postman’ на практике, убедившись, что это действительно очень удобная и многофункциональная платформа разработки, упрощающая процессы разработки и тестирования API.

Полную документацию можно найти здесь.