Postman - Быстрый Старт для Разработки и Тестирования.

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

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

Почему все любят Postman?

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

И так начнем (скачать).

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

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

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

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

Идем дальше.

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

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

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

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

Давайте отправим POST, используя переменные. Добавляем вкладку, выбираем тип запроса POST. Мы хотим использовать переменную host из нашего окружения. переменные пишутся в двойных фигурных скобках. Скобки, начинаем писать название переменной и Postman сам предлагает нам выбрать переменную из текущего окружения. Выбираем. Так как это POST запрос переходим во вкладку body (под адресной строкой) и добавляем параметр username, значением для которой будет переменная. Я добавил еще пару параметров для наглядности, сумму которых будет возвращать сервер.

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

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

Немного о тестах

Открываем консоль сочетанием cmd + alt + c (ctrl + alt + c для Windows). Я сделал 1 запрос и вижу его логи. Кроме того в консоль можно что-то выводить командой: console.log(“something”)

Тесты пишутся на вкладке Tests.

Приведу пример нескольких простых тестов и потом посмотрим с ними работать.

    pm.test("Status code is 200", function () {
        pm.response.to.have.status(200);
    });

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

Так как в ответе сервера мы получаем json строку, мы можем распарсить это в переменную. Сделаем это следующей строкой:

    var jsonData = pm.response.json();

Дальше используем новую переменную.

    pm.test("check number equal 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');

Так как из окружения мы ничего не получили, в sum тоже ничего не будет. Создаем в окружении total и записываем туда значение, полученное из jsonData.total.

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

Cмотрим что получилось:

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

Теперь, имея некоторое представление о Postman’e, попробуем отправить запрос, а лучше несколько.

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

    • Создаем новую коллекцию запросов loop,
    • Создаем POST запрос,
    • Добавляем в тело запроса параметр digit, которое будет изменять( берем значение из окружения),
    • Во вкладке pre-request 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, если нет — создаем. Выводим в консоль массив digits до запроса. Дальше берем первый элемент от digits, удаляя значение из самого массива. И задаем значение в окружении для digit и digits. В digits уже на первый элемент меньше.)

Во вкладке Tests пишем следующее:

    var digits = pm.environment.get('digits');
    var digit = pm.environment.get('digit');
     
    console.log("server got digit = " + pm.response.json().digit);
     
    if (digits && digits.length > 0) {
        postman.setNextRequest("loop request");
    } else {
        postman.setNextRequest(null);
        console.log("stop");
        pm.environment.unset("digits");
        pm.environment.unset("digit");
    }

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

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

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

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

Выводы

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