В Postman есть возможность загружать данные из файла — указал в запросе «возьми имя из файла», сделал файл на 100 имен, и вуаля! Запускаешь 1 запрос, а он выполняется 100 раз с разными данными.
Так удобно готовить тестовые данные. Заранее прикинул классы эквивалентности, и создал всё одним махом. Нужно исправить? Вот он, файлик, в формате csv или json — легко читается, легко исправляется.
А вот что с этим файликом делать дальше? Как сказать постману, что мы хотим подставить эти данные в запрос или в автотест? Где какой синтаксис использовать? Об этом и поговорим в статье на примере системы Users.
Я выложила файлы и запросы, используемые в статье, на гитхаб — можно скачать и использовать «на пробу», так как Users открытая бесплатная система, все запросы будут работать.
Содержание
Как создать файл для 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 раза:

Проверили? Запускаем — внизу есть 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-канале