В Postman есть возможность загружать данные из файла — указал в запросе «возьми имя из файла», сделал файл на 100 имен, и вуаля! Запускаешь 1 запрос, а он выполняется 100 раз с разными данными.

Так удобно готовить тестовые данные. Заранее прикинул классы эквивалентности, и создал всё одним махом. Нужно исправить? Вот он, файлик, в формате csv или json — легко читается, легко исправляется. 

А вот что с этим файликом делать дальше? Как сказать постману, что мы хотим подставить эти данные в запрос или в автотест? Где какой синтаксис использовать? Об этом и поговорим в статье на примере системы Users

Я выложила файлы и запросы, используемые в статье, на гитхаб — можно скачать и использовать «на пробу», так как Users открытая бесплатная система, все запросы будут работать.

Содержание

  1. Как создать файл для Postman

  2. Как использовать данные из файла в запросе

  3. Как использовать данные из файла в тестах

  4. Итого

Как создать файл для Postman

Допустим, что мы хотим создать несколько пользователей с уникальным именем и email, передав их данные через файл. Работать будем с методом doregister.

Эти данные мы хотим брать из файла
Эти данные мы хотим брать из файла

Postman поддерживает два формата — CSV и JSON, создадим файлы для обоих.

CSV-файл

CSV читается так:

  • Столбцы — названия переменных, которые мы передаем в запрос.

  • Строки — значения переменных. Каждая строка — отдельный запрос.

Мы хотим передавать имя и email. Сделаем такой файл:

email_from_file, name_from_file
file_csv_1@mail.ru, file_csv_1
file_csv_2@mail.ru, file_csv_2
file_csv_3@mail.ru, file_csv_3
file_csv_4@mail.ru, file_csv_4

Можно скопировать этот текст и вставить в пустой файл формата CSV. Или скачать его с гитхаба. (См также: Как скачать файл с гитхаба).

Я специально сделала названия колонок с припиской «_from_file», чтобы они отличались от названия самой переменной в теле запроса — иначе это может запутать, откуда брать информацию.

В файле могут быть «лишние» колонки, от этого ничего не сломается, если какие-то данные из него мы НЕ берем. Причем нужные нам колонки могут идти в любом порядке, а не так, как в запросе — так как достаются они по названию, а не порядковому номеру.

Единственное условие — название колонки должно быть на английском языке. Или написано латиницей и без пробелов. Переменную на русском языке постман откажется сохранить. А если название колонки будет в виде цифр (например, «11»), то вы не сможете загрузить этот файл в раннере постмана, тоже будет ошибка.

Ну а пробелы в названии я вообще не рекомендую ставить, даже если оно будет работать сейчас — не факт, что будет работать завтра. Аналогично с русскими буквами или цифрами. Может, в какой-то момент Postman будет их поддерживать, но надолго ли? 

Лучше сразу писать на английском и не переживать, что завтра работающий запрос развалится.

JSON-файл

JSON читается так:

  • Внутри — массив объектов

  • Количество объектов — количество запросов

  • Ключи внутри объекта — название переменной в запросе

  • Значение ключа — значение переменной, которое подставится в запрос

Мы хотим передавать имя и email. Сделаем такой файл:

[{
  
  "email_from_file": "file_test_1@mail.ru",
  "name_from_file": "file_test_1"
  
}, {

  "email_from_file": "file_test_2@mail.ru",
  "name_from_file": "file_test_2"

}, {

  "email_from_file": "file_test_11@mail.ru",
  "name_from_file": "file_test_11"

}]

Пример файла можно также скачать с гитхаба.


Как использовать данные из файла в запросе

Через переменную:

  • Указывается через двойные фигурные скобки — {{my_data}}

  • Название переменной — берется из файла, нигде отдельно не создается.

Давайте запустим doregister, подставив в запрос данные из нашего файла (например, csv). Запрос также можно скачать с гитхаба и импортировать в постман.

Вместо простого значения (например, «Ольга») мы указываем переменную через двойные фигурные скобки. Название переменной — это название колонки в файле: email_from_file и name_from_file.

Запись параметра через переменную
Запись параметра через переменную

Названия переменных не должны совпадать с названием параметра в запросе! Они должны совпадать только с названием нужной колонки в файле.

Если запрос идет в формате JSON (вкладка raw, а не form-data в постмане), то название переменной мы берем в кавычки, так как это строка. И да, оно нормально разименуется. Запрос будет таким:

{
    "email": "{{email_from_file}}",
    "name": "{{name_from_file}}",
    "password": "1"
}

Всё, переменные готовы, теперь можно вызывать запрос! Для этого запускаем коллекцию в раннере → многоточие → Run.

Запуск раннера коллекции
Запуск раннера коллекции

В раннере сразу выбираем файл, не трогая другие параметры (run manually стоит, а количество итераций проставится по файлу) → Select file.

Выбрать файл
Выбрать файл

Select from computer → выбираем файл. Postman показывает превью файла, чтобы мы проверили, что загрузили то, что надо. В превью сразу видно, сколько будет итераций — сколько раз выполнится запрос. В нашем случае — 4 раза:

Postman подскажет, сколько итераций запустит по вашему файлу
Postman подскажет, сколько итераций запустит по вашему файлу

Проверили? Запускаем — внизу есть 2 кнопки:

  • Use locally — использовать файл локально (и забыть о нем постману навсегда!)

  • Upload to Workspace — залить файл в Workspace постмана

Тут, как ни странно, надо жать не на большую рыжую кнопку — нам нет смысла сохранять этот файл в пространстве, поэтому выбираем «Use locally». Впрочем, оба способа будут работать:

Достаточно запустить файл локально
Достаточно запустить файл локально

Информация в блоке «Run configuration» обновилась — количество итераций теперь 4, а в выборе файла — название нашего файла:

После выбора файла количество итераций заполняется само
После выбора файла количество итераций заполняется само

Всё верно, можно запускать!

Запускаем раннер!
Запускаем раннер!

Всё! Postman прогонит наш запрос 4 раза и покажет результат.

На каждый запрос в результате можно тыкнуть и покажется вся информация — какой запрос ушел, какой ответ вернулся. Открывается по умолчанию ответ (response), но можно посмотреть запрос (request), чтобы убедиться, что в запросе были переданы правильные значения.

А там ровно то, что мы посылали:

Если нажать на любой запрос в раннере — увидите подробную информацию по нему
Если нажать на любой запрос в раннере — увидите подробную информацию по нему

Как использовать данные из файла в тестах

Через переменную, название которой берется из файла. Возможные варианты записи:

pm.iterationData.get("my_data")
pm.variables.get("email")

Но вторая запись (pm.variables.get) — работает для любой переменной. И более узкоспециализированная всегда победит — если есть локальная переменная с таким же названием, система подставит именно её.

Области видимости переменных (кто меньше места занимает, тот и круче):

Области видимости переменных
Области видимости переменных

Поэтому если хотите взять данные из файла, то лучше использовать запись, созданную под них — pm.iterationData.get("my_data").

Раньше ещё работал такой вариант:

data.my_data

Например, для переменной email в файле мы бы написали так:

data.email

Но сейчас постман обычно подсвечивает этот код красным и говорит, что запись устарела, не используйте её. Однако вы можете встретить её в каких-то старых статьях / примерах кода, вот знайте, чем такое заменять!

Давайте напишем автотесты на то, что в ответе нам возвращается именно то, что мы передали на входе. Возьмем за основу тест из сниппетов:

pm.test("Your test name", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.value).to.eql(100);
});

По сути сам тест тут такой:

pm.expect(X).to.eql(Y);

И нам надо понять, что с чем мы сравниваем. Запишем прям в переменные X и Y. X — что сравниваем. Мы берем ответ от сервера — это JSON-объект, находим там имя. Оно на первом уровне вложенности, так что просто пишем через точечную запись:

var X = jsonData.name;

См также: 

Пишем первый автотест в Postman (видео в ВК) — подробнее про тесты в постмане

Как достать данные из дерева JSON-объекта (видео в ВК) — подробнее про переменную X

А сравнивать будем с тем, что пришло из файла, то есть с iterationData.get. А что get? Берем название колонки из файла — name_from_file:

var Y = pm.iterationData.get("name_from_file");

Полностью тест будет выглядеть так:

var jsonData = pm.response.json();

var X = jsonData.name;
var Y = pm.iterationData.get("name_from_file");

pm.test("В ответе есть name, он совпадает с переданным в файле", function () {
    pm.expect(X).to.eql(Y);
});

Конечно, можно обойтись без X и Y. Давайте напишем для email тест без этих прослоек. Но запись «iterationData.get…» достаточно длинная, её можно вынести в переменную!

var jsonData = pm.response.json();
email_from_file_param = pm.iterationData.get("email_from_file");

pm.test("В ответе есть email, он совпадает с переданным в файле)", function () {
    pm.expect(jsonData.email).to.eql(email_from_file_param);
});

Я специально дала переменной имя, которое не совпадает с названием в файле, чтобы опять таки не путаться, где что. А так то можно назвать их одинаково, ничего не мешает. А можно и эту прослойку выкинуть, тогда тест будет выглядеть так:

var jsonData = pm.response.json();

pm.test("В ответе есть email, он совпадает с переданным в файле (без доп переменной)", function () {
    pm.expect(jsonData.email).to.eql(pm.iterationData.get("email_from_file"));
});

Выбирайте вариант, который вам больше по душе!

Итого

Чтобы использовать данные из файлы, укажите название столбца в CSV / параметра JSON в виде переменной:

  • В запросе — {{my_data}}

  • В скриптах (автотестах) — pm.iterationData.get("my_data")

Запись data.my_data устарела! Раньше использовалась в скриптах.

Название переменной лучше писать на английском языке и без пробелов

См также: официальная дока Postman

PS — больше полезных статей ищите в моем блоге по метке «полезное». А полезные видео — на моем youtube-канале   

Комментарии (0)