четверг, 31 июля 2025 г.

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


Ссылка на ХАБР


В 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 — статья написана в помощь студентам моего курса по автоматизации в Postman-е


Комментариев нет:

Отправить комментарий