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

В этой статье я решил сделать краткий обзор функциональности Visualize, Mock Servers и Flow.

Создание Mock Service

Начнем с создания Mock-сервера, который позволяет имитировать взаимодействие сервисов. Функционал Postman позволяет легко редактировать и масштабировать мок-сервера, а одной из особенностей настройки сервера является возможность генерировать случайные значения в теле ответа.

Для создания Mock-сервера на левой панели выбираем Mock Servers → Create Mock Servers (возможно создание нажатием на +).

  1. Настроим свой сервер в таблице (в дальнейшем все параметры можно изменить):

Request Method

Request URL

 

Response Code

Response Body

POST

orders/habr

201

Удобнее задать на следующих этапах

GET

orders/1234567

200

PUT

orders/1234567

200

PATCH

orders/1234567

200

  1. Заполним поле Mock server name и укажем окружение переменных (Environment). Доступны опции:

  • Сохранить сервер в качестве переменной (будет создано новое окружение переменных);

  • Сделать сервер приватным. В данном случае, в запросах необходимо использовать x-api-key сгенерированный в Postman;

  • Имитировать фиксированную сетевую задержку.

Результаты создания сервера:

  • Система генерирует уникальный url созданного сервера;

  • Система создает коллекцию с указанным названием сервера, в нашем случае это будет HabrMock;

  • Система формирует запросы вида {{url}}+Request URL и размещает их в коллекции HabrMock.

Результаты создания сервера в интерфейсе postman
Результаты создания сервера в интерфейсе postman

Настроим сервер для POST orders/habr.

  1. Исправим название сервиса Default, на код ответа, который будет обрабатывать сервер (201).

  2. Зададим параметры ответа сервера:

Существуют 3 способа сформировать данные в ответе сервера:

Способ

Пример

Статичный параметр

"name": "Nick"

Ответ с динамической переменной

"name": "{{$randomFirstName}}"

Комбинация параметров

"name": "Nick {{$randomLastName}}"

"name": "{{$randomFirstName}} {{$randomLastName}}"

Динамическая переменная предоставляет случайные данные. Чтобы использовать динамические переменные в сценариях предварительного запроса или тестирования (вкладки pre-request-Script и Tests), вам необходимо использовать функцию pm.variables.replaceIn(), например, pm.variables.replaceIn('{{$randomFirstName}}'). Со списком динамических переменных можно ознакомится по ссылке.

На примере это будет выглядеть так:

Запрос POST {{url}}/orders/habr:

Mock Servers body:

Ответ (201):

На данном этапе мы сформировали Mock Server для запроса POST, который имитирует создание order, в теле ответа мы возвращаем всю необходимую информацию. Данный сервер можно использовать для тестирования или беспрерывной разработки.

Cценарий Flow

Flow (потоки) – новый функционал Postman. Недавно закончилось его бета-тестирование и добавлена стабильная и рабочая версия. Основной идеей Flow является разработка тестовых сценариев без использования кода во вкладке «tests» и «Pre-reques script». 

Например, для объявления переменной, которую мы хотим извлечь из тела ответа, во вкладке «tests» необходимо прописать код:

var jsonData = JSON.parse(responseBody);
pm.environment.set("number", jsonData.id);

При использовании Flow можно обойтись без кода:

  1. Добавим первый блок «Send request». Выберем запрос и окружение переменных:

  1. Добавим блок «Create Durables» и соединяем Response – Data:

  1. «Create Durables» предназначен для определения переменных. В конфигурации блока необходимо заполнить таблицу:

Key

Value

numberOrders

(Указываем ключ, данное значение будет использовано в следующем запросе)

/data/body/number

(Какое значение будет найдено и использовано, в данном примере number. После первого вызова, выстраивается вложенность данных, которую удобно выбирать из списка)

  1. Добавим блок «Send request», в котором будем использовать значение numberOrders:

  1. В блоке GET /orders/{{number}} задается использование данных в переменной. В конфигурации (либо Add Variables) необходимо заполнить таблицу:

Varable

Current Value

number

(переменная, в которую подставляем значение)

/@durable/numberOrders

(значение, которое будет подставлено в переменную number)

Мы реализовали простейший сценарий, при выполнении первого запроса создается заявка, и в ответе мы получаем ее номер (number). Далее мы извлекаем из ответа номер заявки и переиспользуем его в следующем запросе.

Таким образом, блоки Flow предоставляют множество функций, которые сложно реализовать с помощью кода.

Визуализация ответов

Postman предоставляет программируемый способ визуального представления ответов на запросы. Код визуализации, добавленный в «tests» для запроса, будет отображаться на вкладке «Visualize».

Для визуализации ответа, в Postman используется метод pm.visualizer.set(). Метод принимает три параметра:

  • layout (обязательно) — это строка HTML-шаблона Handlebars;

  • data (необязательно) — это данные, которые вы можете привязать к шаблону. Доступ к свойствам этого объекта можно получить в шаблоне;

  • options (необязательно) — это options объект для Handlebars.compile(). Вы можете использовать это, чтобы контролировать, как Handlebars компилирует шаблон.

Визуализируем ответ в виде таблицы. Допустим, у нас есть GET запрос, в ответе мы получаем JSON с множеством параметров:

{
    "results": [  
        {
            "mrfId": 3134334697,
            "userId": 5105879622,
            "workTypeName": "VPN"
        },
       {
            "mrfId": 6133244697,
            "userId": 9105879622,
            "workTypeName": "Инфраструктура"
        },
.........

Во вкладке tests выполним следующее:

  1. Сформируем строку HTML-шаблона.

var template = ` 
    <style type="text/css">
        .tftable {font-size:14px;color:#333333;width:100%;
        border-width: 1px;border-color: #87ceeb;border-collapse: collapse;}
        .tftable th {font-size:18px;background-color:#87ceeb;border-width: 1px;
        padding: 8px;border-style: solid;border-color: #87ceeb;text-align:left;}
        .tftable tr {background-color:#ffffff;}
        .tftable td {font-size:14px;border-width: 1px;padding: 8px;
        border-style: solid;border-color: #87ceeb;}
        .tftable tr:hover {background-color:#e0ffff;}
    </style>
    <table class="tftable" border="1">
        <tr>
            <th>Пользователь</th>
            <th>МРФ</th>
            <th>Тип работы</th>
        </tr>
  1. Выполним циклический опрос JSON на наличие параметров:

{{#each response.results}}
            <tr id=row_{{@key}} onClick="handleClick(this.id)">
                <td id={{@key}}>{{userId}}</td>
                <td>{{mrfId}}</td>
                <td>{{workTypeName}}</td>
            </tr>
        {{/each}}
    </table>`;
  1. Задействуем метод визуализации:

    pm.visualizer.set(template, {response: pm.response.json()});
  2. Сохраним и выполним запрос. Перейдём на вкладку Visualize:

Визуализация ответа выполнена. Нажатием правой кнопки мыши на таблицу можно открыть консоль разработчика для редактирования HTML.

Визуализация предоставляет возможность работы с данными ответа в удобном виде. Так, например, можно использовать код HTML (скопированный через консоль разработчика) в Confluence. Для этого необходимо на странице Confluence разместить макрос HTML и вставить в рамку скопированный код HTML. Данный макрос выполнит HTML код при открытии страницы. Confluence распознает таблицу и даже позволит воспользоваться сортировкой, фильтрами и экспортом в различные форматы.

Вместо выводов

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

Комментарии (3)


  1. QuAzI
    23.05.2022 15:59
    +1

    Интересно было бы почитать про Postman в качестве прокси и как его заставить работать с локальным энвайрментом (IIS в него ходить или его ходить в локальный IIS/DockerContainer). Хочется иметь удобный инструмент для быстренько сдампить трафичек и подменить ответ к какому-то отдельно взятому запросу, но с лёту что-то не вышло


    1. fedorro
      23.05.2022 20:44
      +1

      Для этого существуют специальные прокси для отладки, типа https://www.charlesproxy.com


  1. fedorro
    23.05.2022 20:48
    +1

    выбираем Mock Servers → Create Mock Servers

    Смутно помню, но по моему нужно ещё создать аккаунт, переключится на Workspaces, а сервер будет запущен не в самом постмане, а на внешнем сервере ... Когда я пытался попробовать - я уплевался и даже аккаунт удалил, чтобы наверняка ????