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.
Полную документацию можно найти здесь.