PostMan: для запроса огромных данных я хочу иметь ввод в виде внешнего файла JSON и действительно переставлять все тело за итерацию.

Сведения о приложении:

Почтальон для Win7 / x64

Отчет о проблеме:

  1. Для запроса огромных данных я хочу иметь ввод в виде внешнего файла JSON и действительно переставлять все тело за итерацию.
  2. Ожидаемое поведение: тело запроса должно быть заменено моей переменной при запуске из коллекций
  3. Скриншоты: прилагаются

Действия по воспроизведению

  1. Мой Json-файл в Collection runner в качестве входных данных:

        [{
         "rename": {"AssetId": 5496,"NewName": "API-CK9-2st"},
         "addfolderto": {"FolderId": 5456,"FolderName": "API-CK1"}
        }]    
    
  2. И в моем сценарии предварительного запроса:

    var envRename = pm.iterationData.get("rename");
    pm.environment.set("rename", envRename );
    
  3. А в My Body я пытаюсь напрямую использовать env. переменная для замены тела, например:

     {{rename}}
    
  4. Затем после запуска скрипта тело моего запроса заменяется следующим образом:

        Request Body:"[object Object]"
    

    вместо моего ввода json.

Ссылка на снимок экрана:

Журнал консоли почтальона с моими комментариями

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


person ChandraKanth    schedule 30.04.2018    source источник
comment
Мне это кажется неправильным в сценарии предварительного запроса {{envRename}}, двойные фигурные скобки здесь не нужны. Также я не верю, что вы используете объект в качестве значения в файле данных - хотя я могу ошибаться.   -  person Danny Dainton    schedule 30.04.2018
comment
Также вы выбираете из JSON, я думаю, что способ получения даты в переменной rename неверен.   -  person demouser123    schedule 30.04.2018
comment
Переменная из файла будет использоваться в любом случае, поэтому вам не нужно ее получать и сохранять как новую переменную среды в сценарии предварительного запроса.   -  person Danny Dainton    schedule 30.04.2018
comment
@DannyDainton: да, я обновил пост, это была опечатка {{envRename}} там не нужна. И это нормально - использовать переменную среды в сценарии предварительного запроса только для целей модульности, и я не думаю, что мы можем использовать напрямую pm.iterationData.get("rename"); в теле ... POSTMAN выдает ошибку   -  person ChandraKanth    schedule 01.05.2018
comment
Не думаю, что вы понимаете, что я имел в виду под этим комментарием. По сути, то, что вы добавили в сценарий предварительного запроса, бессмысленно. Если вы удалили его и сохранили {{rename}} в теле запроса, он все равно заберет переменную файла данных при его выполнении.   -  person Danny Dainton    schedule 01.05.2018


Ответы (2)


Вы можете использовать JSON.stringify () для переменной iterationData, а затем используйте синтаксис {{...}} в теле запроса.

Вот пример этого локально с использованием другого API, но с использованием того же подхода, он должен работать для того, что вам нужно.

Если вы не заключите переменную iterationData в оболочку с функцией JSON.stringify(), вы увидите, что [object Object] отправлено как данные тела запроса POST:

введите здесь описание изображения


Вот мое решение:

Добавляем функцию JSON.stringify() на вкладку Pre-Request Script и оборачиваем ею pm.interationData.get('my_object') следующим образом:

введите здесь описание изображения

Затем добавьте синтаксическую переменную {{new_object}} в тело запроса. Теперь это значение преобразовано в строку JSON:

введите здесь описание изображения

В Collection Runner выберите файл данных, который вы хотите использовать. Я использую файл JSON с key 'my_object' и value как объект JSON, а не одно значение. Предварительный просмотр этого файла можно увидеть здесь:

введите здесь описание изображения

Когда Коллекция или Запрос запускается из Collection Runner, он принимает это значение объекта и использует его в теле запроса. Поскольку я использовал функцию JSON.stringify() в Pre-Request Script, она не будет реализована как [object Object], который мы видели в начале.

введите здесь описание изображения

person Danny Dainton    schedule 30.04.2018
comment
: Я даже использовал JSON.stringify, мне не повезло ... и в моем первоначальном посте была опечатка использования {{envRename}} вместо использования переменной var. Итак, когда вы попробовали, похоже, вы также заметили, что он работает как объект, верно? если какое-либо решение, пожалуйста, дайте мне знать. Надеюсь, вы видели скриншот в оригинальном посте - person ChandraKanth; 01.05.2018
comment
У меня это сработало - я воссоздаю свое решение локально и обновлю свой ответ. - person Danny Dainton; 01.05.2018
comment
Да, конечно, жду твоего повтора - person ChandraKanth; 05.05.2018
comment
Обновил мой ответ - person Danny Dainton; 05.05.2018
comment
Нет, это все еще продолжалось как [object, object] - person ChandraKanth; 11.05.2018
comment
Я действительно не понимаю, как это возможно, вы следовали обновленному ответу, который я добавил - он ясно показывает, что этого не происходит. Должно быть что-то еще, что вы делаете в своей настройке, из-за чего этого не происходит. - person Danny Dainton; 11.05.2018

Необходимо изменить имя переменной. Поэтому, если iterationData содержит переменную rename, ее следует переименовать в foo. затем в теле вызова почтальона используйте {{foo}}. Область видимости переменной iterationData имеет приоритет над всеми остальными областями.

person Jeff Groom    schedule 26.08.2018