Тестирование API может превратиться в настоящую головную боль для тестировщика: нужно как-то слать запросы, стандартные инструменты структуризации тестирования для API работают плохо, не все функции API могут быть задокументированы. Postman создан для того, чтобы решить все эти проблемы: у программы Postman есть своя структуризация, Постман позволяет слать любые запросы (в том числе с файлами и ключами авторизации), внутри программы есть инструменты для документирования внешнего API. Поскольку API есть у любого более-менее крупного проекта, вам обязательно нужно знать, как пользоваться Postman, если вы собираетесь стать QA. Ниже – Постман для чайников: гайд о том, как пользоваться базовыми функциями инструмента + набор фишек для придвинутых пользователей.
Для начала разберемся с API. API – это интерфейс взаимодействия приложения с другими приложениями. Например, у вас есть веб-приложение, которое выдает текущую погоду в разных городах. Вы собираете данные из какой-то базы (в этом примере источник значения не имеет), после чего эти данные форматируются и отправляются на какой-то сайт. Сайт взаимодействует с приложением, и делает он это с помощью интерфейса (набора допустимых команд), определенного приложением. Этот интерфейс и есть API.
На практике это выглядит так – есть сервер, который принимает HTTP-запросы на порт. Внутри сервера написана следующая логика:
Вот этот интерфейс, при котором мы определяем допустимые запросы и допустимые ответы – это и есть API.
Тестирование API – это когда мы убеждаемся в том, что API:
Для того, чтобы провести тестирование API, нам нужно: знать, что API может принимать и выдавать; иметь возможность посылать запросы. Кроме того, серьезное тестирование имеет ряд дополнительных требований, нужно иметь возможность: посылать файлы, проводить авторизацию, раскидывать тесты по папкам, запускать сразу несколько тестов из какой-либо категории, настраивать автоматическое тестирование через определенные промежутки времени, вести документацию тестирования. Если делать все это вручную – на написание скриптов уйдет много времени и сил, но есть другой выход.
Postman – это программа, которая предоставляет вам все необходимые инструменты для тестирования API: возможность посылать запросы, писать документацию к API, запускать автотесты, составлять иерархию тестов, проводить версионирование и так далее. У программы есть бесплатная версия, поэтому вы можете начинать изучать Postman без каких-либо вложений.
Одно из центральных отличий Postman от других программ для тестирования – возможность создания Mock-сервера. Когда вы работаете с API, обычно вам нужно не просто послать запрос откуда-то, вам нужно послать запрос с сервера, и в запросе должны быть указаны данные запрашивающего сервера. Если вы пытаетесь создать запрос вручную, вам все эти параметры приходится постоянно прописывать или копировать. Postman избавляет вас от этой проблемы – он создает Mock-сервер, который имитирует настоящий сервер, вам нужно один раз прописать параметры – и все, можете писать любые запросы.
Устанавливается он очень просто, как и любая программа:
Запросы – это основа Postman, потому что именно с помощью запросов мы можем тестировать API. Со временем количество запросов будет увеличиваться, и в их списке будет очень легко потеряться, поэтому запросы нужно сортировать по коллекциям. Если говорить грубо, то коллекции – это папки для хранения запросов. Организация коллекций – это отдельная большая тема, про которую вас вполне могут спрашивать на собеседовании, но если вкратце: коллекции должны иметь логичную структуру, их нужно выделять на основе какого-то признака: версия тестируемого API, отдельный блок функциональности и так далее.
И запросы, и коллекции создаются с помощью кнопки «New» в левой верхней части интерфейса:
Жмете на «Коллекции» – создается новая коллекция:
Из параметров на данный момент вам нужно задать только имя, все остальное можете оставить стандартным:
Теперь нужно создать запрос – наведите мышь на коллекцию слева, нажмите на 3 точки, выберите «Добавить запрос»:
Теперь вам нужно задать параметры запроса. Укажите имя, тип и URL (мы для примера используем тестовый API самого Postman). Для тестирования чаще всего используется GET-запрос, поэтому он выставлен по умолчанию. Параметры запроса можно писать как в центральном окне параметров, так и прямо в URL – в этом случае Postman сам подхватит все параметры и занесет их в таблицу.
Все, жмите на Send справа от строки URL. В нижнем окне вы увидите ответ от API – статус HTTP-ответа (200 означает, что все прошло успешно) и сам ответ в том формате, в котором API его высылает (чаще всего используют JSON). При желании можете посмотреть куки, которые были сформированы в процессе работы.
Теперь разберемся со вторым по популярности инструментов – POST-запросами. Post в переводе с английского – это когда мы что-то куда-то пишем, следовательно в запросе мы будем указывать какую-то информацию, которую API должен куда-то записать. Сначала создадим POST-запрос.
В качестве URL укажем адрес API, проверяющего JSON на корректность. После этого нам нужно выбрать вкладку «Body» запроса и вписать туда наш тестовый JSON.
Жмем на Send – нам приходит ответ 201 от сервера (успешно создана новая запись), в окне ответа API указана информация, которую мы получили от сервера.
Когда тестов станет очень много, появится проблема: есть много одинаковых данных, которые вам нужно раз за разом вводить в каждый новый запрос. Чтобы с этой проблемой справиться, вам нужно использовать глобальные переменные (плохой вариант) или переменные окружения (хороший вариант). Переменная – это заданное вами имя, которому присваивается заданное вами же значение. Например, вы тестируете API сайта sravni.ru. Вам нужно создать 200 запросов, и каждый раз вам нужно писать https://sravni.ru/api/, после чего уже идет тело самого запроса к API. Вместо того, чтобы раз за разом вводить имя сайта, вы можете создать переменную site, которой присвоите значение https://sravni.ru/api/. В этом случае в запросе нужно будет писать не https://sravni.ru/api/get?foo1=bar1&foo2=bar2, а {{site}}/get?foo1=bar1&foo2=bar2 – короче и проще (все переменные в Постман указываются в двойных фигурных кавычках, {{переменная}}).
Такие переменные могут быть либо глобальными, либо переменными окружения. Глобальные переменные – допустимая, но плохая практика, поскольку с увеличением количества коллекций и запросов может случиться так, что переменные начнут перекрывать друг друга. Переменные окружения – это набор переменных, добавленных в конкретное именованное окружение. Вы просто переключаете окружение при необходимости – и ко всем запросам начинают применяться переменные выбранного окружения.
Для того, чтобы создать переменные окружения, сначала нужно создать само окружение. Для этого у Postman есть специальный раздел.
Здесь редактируются и глобальные переменные (вкладка Globals), и переменные окружения. Чтобы создать новое окружение, вам нужно нажать на плюсик над Globals, после чего – указать имя окружения и задать переменные.
Создадим переменную site, которая будет указывать на стандартный тестовый API Postman. Тип оставьте Default, есть еще Secret, но он вам сейчас не нужен (он используется для секретных данных, вроде паролей и ключей зашифрованного соединения). Не забудьте нажать на Save, чтобы сохранить новую переменную.
Теперь переходим в наш GET-запрос, изменяем URL, жмем на «Послать» и… не работает.
Почему не работает? Потому что мы не назначили окружение, в правом верхнем углу так и написано: «No environment». Жмем на эту надпись, выбираем наше окружение.
Запускаем – теперь работает так, как надо.
К слову, переменные можно добавлять и для коллекции – нажмите на коллекцию левой кнопкой мыши и перейдите в Variables.
Автоматизация – это то, что делает Postman практически незаменимым. Автоматизация начинается с тестов. Тест – это когда вы задаете запрос и ответ на него, если ответ совпадает с тем, что вам нужно – загорается зеленая лампочка (все хорошо), если ответ не совпадает – загорается красная (все плохо). Тесты для каждого запроса задаются в отдельной вкладке.
Тесты создаются либо скриптами, либо через готовые сниппеты.
Когда выбираете сниппет, в окно скриптов автоматически добавляется нужный тест. Выберем сниппеты «Response time is less than 200ms», «Status code: code is 200» и «Status code: successful POST request»
Запускаем – получаем 2 пройденных теста и 1 заваленный.
Третий тест завалился, так как мы послали GET-запрос, который возвращает код 200 при успехе, а POST-запрос возвращает коды 201 или 202 при успехе.
Вкратце о том, как их использовать. Файлы посылаются через вкладку Body запроса, выбираем тип тела – Form-data, выбираем тип ключа – файл.
Авторизацию можно настроить на соответствующей вкладке запроса. Выбираете тип авторизации и вводите/указываете ее параметры. Базовая авторизация по логину-паролю – Basic Auth.
На тестах автоматизация не заканчивается – Postman позволяет вам запускать наборы запросов/коллекций вручную или автоматически. Делается это с помощью специального тула, Collection Runner.
Для эксперимента мы добавили в наш второй запрос (POST) 2 теста: код ответа 200 или 201 и скорость ответа – менее 200 мс. Теперь жмем на меню программы в левом верхнем углу, выбираем File -> New Runner Tab.
Вы увидите интерфейс Раннера.
Теперь вам нужно перетащить интересующие вас запросы из левого окна в центральное (можно перетащить всю коллекцию), а в правом окне нужно выбрать тип проверки и настроить его. Выберите Schedule runs, чтобы проверки проводились время от времени (так настраивают регрессионное тестирование). Укажите имя, задайте таймер и окружение с переменными.
Когда настанет указанное время, Runner автоматически запустит тест и покажет вам:
Вкратце о других полезных функциях Postman:
Из плюсов:
Минусы:
Postman – это один из инструментов тестировщика, причем им пользуются как мануальные тестировщики, так и те, кто занимается автоматизацией тестирования. А тестировщиков обычно учат на курсах:
Школа |
Skillbox |
Стоимость |
61 346 руб |
Цена в рассрочку |
2 788 руб/мес |
Длительность курса |
10 месяцев |
Программа трудоустройства |
Есть |
Формат |
Запись лекций, Онлайн занятия с преподавателем |
Школа |
Skillfactory |
Стоимость |
164 873 руб |
Цена в рассрочку |
4 580 руб/мес |
Длительность курса |
18 месяцев |
Программа трудоустройства |
Есть |
Формат |
Запись лекций, Онлайн занятия с преподавателем |
Школа |
Нетология |
Стоимость |
105 000 руб |
Цена в рассрочку |
3 070 руб/мес |
Длительность курса |
8 месяцев |
Программа трудоустройства |
Есть |
Формат |
Запись лекций, Онлайн занятия с преподавателем |
Тезисно: