На просторах интернета часто встречается информация о платформе Postman. Большинство статей включают информацию о переменных, различных скриптах и автоматизации при тестировании. Но на самом деле Postman – это не только инструмент для тестирования, а платформа, которая помогает с помощью обширного набора инструментов ускорить жизненный цикл разработки API — проектирование, тестирование, документирование, имитацию и совместное использование проектов.
В этой статье я решил сделать краткий обзор функциональности Visualize, Mock Servers и Flow.
Создание Mock Service
Начнем с создания Mock-сервера, который позволяет имитировать взаимодействие сервисов. Функционал Postman позволяет легко редактировать и масштабировать мок-сервера, а одной из особенностей настройки сервера является возможность генерировать случайные значения в теле ответа.
Для создания Mock-сервера на левой панели выбираем Mock Servers → Create Mock Servers (возможно создание нажатием на +).
Настроим свой сервер в таблице (в дальнейшем все параметры можно изменить):
Request Method | Request URL
| Response Code | Response Body |
POST | orders/habr | 201 | Удобнее задать на следующих этапах |
GET | orders/1234567 | 200 | |
PUT | orders/1234567 | 200 | |
PATCH | orders/1234567 | 200 |
Заполним поле Mock server name и укажем окружение переменных (Environment). Доступны опции:
Сохранить сервер в качестве переменной (будет создано новое окружение переменных);
Сделать сервер приватным. В данном случае, в запросах необходимо использовать x-api-key сгенерированный в Postman;
Имитировать фиксированную сетевую задержку.
Результаты создания сервера:
Система генерирует уникальный url созданного сервера;
Система создает коллекцию с указанным названием сервера, в нашем случае это будет HabrMock;
Система формирует запросы вида {{url}}+Request URL и размещает их в коллекции HabrMock.
Настроим сервер для POST orders/habr.
Исправим название сервиса Default, на код ответа, который будет обрабатывать сервер (201).
Зададим параметры ответа сервера:
Существуют 3 способа сформировать данные в ответе сервера:
Способ | Пример |
Статичный параметр |
|
Ответ с динамической переменной |
|
Комбинация параметров |
|
Динамическая переменная предоставляет случайные данные. Чтобы использовать динамические переменные в сценариях предварительного запроса или тестирования (вкладки 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 можно обойтись без кода:
Добавим первый блок «Send request». Выберем запрос и окружение переменных:
Добавим блок «Create Durables» и соединяем Response – Data:
«Create Durables» предназначен для определения переменных. В конфигурации блока необходимо заполнить таблицу:
Key | Value |
numberOrders (Указываем ключ, данное значение будет использовано в следующем запросе) | /data/body/number (Какое значение будет найдено и использовано, в данном примере number. После первого вызова, выстраивается вложенность данных, которую удобно выбирать из списка) |
Добавим блок «Send request», в котором будем использовать значение numberOrders:
В блоке 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 выполним следующее:
Сформируем строку 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>
Выполним циклический опрос 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>`;
Задействуем метод визуализации:
pm.visualizer.set(template, {response: pm.response.json()});
Сохраним и выполним запрос. Перейдём на вкладку Visualize:
Визуализация ответа выполнена. Нажатием правой кнопки мыши на таблицу можно открыть консоль разработчика для редактирования HTML.
Визуализация предоставляет возможность работы с данными ответа в удобном виде. Так, например, можно использовать код HTML (скопированный через консоль разработчика) в Confluence. Для этого необходимо на странице Confluence разместить макрос HTML и вставить в рамку скопированный код HTML. Данный макрос выполнит HTML код при открытии страницы. Confluence распознает таблицу и даже позволит воспользоваться сортировкой, фильтрами и экспортом в различные форматы.
Вместо выводов
Я описал лишь малую часть интересной функциональности Postman. Мне бы хотелось, чтобы данная статья показала вам, что Postman может быть не только обычным инструментом для тестирования API, но и многофункциональной платформой, способной решать различные задачи в ходе работы с интеграционным слоем.