Серия, в которой рассказывается, как перебирать тесты с динамическими данными в Postman.

Почтальон может тестировать API, сначала отправив запрос, а затем выполнив утверждения для возвращенных данных. В основных случаях запросы обрабатываются последовательно и атомарно. Однако у меня была необходимость перебирать данные, возвращаемые API, и выполнять последовательные запросы и тесты, используя эти данные. Надеюсь, простой пример этого ниже:

  1. GET /api/widgets, который возвращает динамический список идентификаторов виджетов в формате JSON.
  2. Перебирать идентификатор каждого виджета, каждый раз вызывая 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 г.