Серия, в которой рассказывается, как перебирать тесты с динамическими данными в Postman.
Почтальон может тестировать API, сначала отправив запрос, а затем выполнив утверждения для возвращенных данных. В основных случаях запросы обрабатываются последовательно и атомарно. Однако у меня была необходимость перебирать данные, возвращаемые API, и выполнять последовательные запросы и тесты, используя эти данные. Надеюсь, простой пример этого ниже:
GET /api/widgets
, который возвращает динамический список идентификаторов виджетов в формате JSON.- Перебирать идентификатор каждого виджета, каждый раз вызывая
GET /api/widgets/
и выполняя утверждения для возвращаемых данных.
Поскольку идентификаторы виджетов мне неизвестны (и при этом всегда меняются), я не могу статически определить их в отдельных тестах. Вместо этого я хочу перебрать каждый идентификатор виджета и выполнить те же утверждения, по сути рассматривая тест как шаблон или функцию, которая принимает id
в качестве параметра.
Я признаю, прежде чем слишком углубляться в сорняки, что это кажется хакерским и требует понимания нескольких концепций Postman. В этой серии я буду использовать RequestBin для имитации API, поскольку он общедоступен и не требует настройки разработчика для тестирования.
Обзор одиночного теста
Давайте посмотрим на рабочий процесс для одного теста:
1. GET http://httpbin.org/get
возвращается
{ "args": {}, "headers": { "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "Accept-Encoding": "gzip, deflate", "Accept-Language": "en-us", "Cookie": "_ga=GA1.2.1856529796.1487116926; _gat=1", "Dnt": "1", "Host": "httpbin.org", "Referer": "http://httpbin.org/", "Upgrade-Insecure-Requests": "1", "User-Agent": "Mozilla/5.0" }, "origin": "1.2.3.4", "url": "http://httpbin.org/get" }
2. На основании этих данных делаются утверждения:
- Код ответа HTTP должен быть 200
headers
должен иметьHost
значение «httpbin.org».url
должен быть установлен на «http://httpbin.org/get»
В Postman тесты будут выглядеть так:
Здорово. Теперь мы знаем, как выглядит базовый тест. Несколько тестов можно сгруппировать в Коллекции, которые представляют собой просто папки с тестами, которые нужно запускать один за другим.
Управление порядком и потоком тестов
А что, если бы мы захотели изменить порядок тестов? Почтальон представил способ сделать это, используя postman.setNextRequest('request_name')
, где имя_запроса — это полное имя теста, который вы хотите запустить после завершения текущего теста.
Рассмотрим следующие тесты в «Папке тестов» в нашей коллекции «Пример циклов»:
В test1 мы могли бы указать Postman вызывать «test3» вместо того, чтобы обрабатывать тесты по порядку и выполнять «test2»:
Теперь при запуске коллекции мы видим, что «test3» следует после «test1», а «test2» вообще пропускается.
Получение и установка постоянных переменных в тестах
Postman позволяет создавать и манипулировать переменными, которые сохраняются между тестами через средовые и глобальные переменные. Переменные можно получить в тестах с помощью environment.variable_name
и установить, вызвав функцию postman.setEnvironmentVariable('key', 'value')
. Переменные также можно использовать при построении URL-адреса запроса с использованием двойной фигурной записи `` (см. test3 ниже). Например, мы можем установить переменную в test1.
И получить к нему доступ в «test3»
Запуск коллекции отобразит в выводе консоли следующее (Просмотр › Показать консоль почтальона):
Списки и объекты как переменные
Хотя переменные по своей сути не поддерживают типы списков и объектов, мы можем обойти это, сначала закодировав данные с помощью JSON.stringify()
, а затем расшифровав их с помощью JSON.parse()
.
Например, если бы мы хотели сохранить список объектов, я мог бы сделать это, используя:
var listObjs = [{id: 1},{id: 2}];
postman.setEnvironmentVariable('listObjs', JSON.stringify(listObjs));
Теперь этот список хранится как переменная среды, к которой можно получить доступ в тесте с помощью:
var listObjs = JSON.parse(environment.listObjs);
console.log(listObjs[0].id);
Если бы мы хотели добавить еще один объект в список и сохранить изменения, мы могли бы использовать:
// read in the contents and convert into a list var listObjs = JSON.parse(environment.listObjs);
// append a new object to the list listObjs.push({id: 3});
// persist the changes postman.setEnvironmentVariable('listObjs', JSON.stringify(listObjs));
Зная основной поток тестов, как манипулировать этим потоком и как передавать данные между тестами, мы теперь готовы собрать все эти части вместе и динамически зациклить тесты, как если бы они были функциями или шаблонами в части 2 этой серии. Всю коллекцию сюда можно импортировать, перейдя по следующей ссылке: https://www.getpostman.com/collections/e9dcc10b1b7860eeec45.
Первоначально опубликовано на thisendout.com 14 февраля 2017 г.