Ответ
Postman предоставляет систему переменных с разными областями видимости (scopes), что позволяет гибко управлять данными в запросах, тестах и окружениях. Доступ к переменной осуществляется через синтаксис {{variable_name}}.
Виды переменных (по области видимости)
-
Глобальные переменные (Global Variables)
- Область видимости: Доступны во всех запросах, коллекциях и окружениях в рамках одной рабочей области (Workspace).
- Использование: Для значений, общих для всего проекта (например, версия API, глобальный токен).
- Управление: Меню глазами (👁) → "Globals".
-
Переменные окружения (Environment Variables)
- Область видимости: Доступны только когда активно выбранное окружение (Environment).
- Использование: Для конфигурации, специфичной для среды развёртывания (dev, staging, prod). Например, разные базовые URL, ключи API.
- Управление: Меню глазами (👁) → Выбор окружения → "Edit".
-
Переменные коллекции (Collection Variables)
- Область видимости: Доступны для всех запросов внутри конкретной коллекции.
- Использование: Для данных, общих для всей коллекции (например, ID созданного ресурса, который используется в последующих запросах).
- Управление: Открыть коллекцию → вкладка "Variables".
-
Локальные переменные (Local Variables)
- Область видимости: Существуют только во время выполнения одного запроса (или набора запросов в Collection Runner). Удаляются после завершения.
- Использование: Для временных вычислений в скриптах (Pre-request или Tests). Нельзя задать через UI, только через скрипты.
-
Переменные данных (Data Variables)
- Особый тип: Используются исключительно при запуске коллекции через Collection Runner с внешним файлом данных (CSV, JSON).
- Использование: Для параметризованного тестирования, когда нужно прогонять одни и те же запросы с разными наборами данных.
Приоритет разрешения переменных
При обращении к {{var}} Postman ищет переменную в следующем порядке (от высшего приоритета к низшему):
- Локальные переменные (Local)
- Переменные данных (Data)
- Переменные окружения (Environment)
- Переменные коллекции (Collection)
- Глобальные переменные (Global)
Работа с переменными в скриптах
// Установка переменных (в порядке приоритета)
pm.variables.set("local_var", "value"); // Локальная
pm.environment.set("api_token", "eyJhbGci..."); // Окружения
pm.collectionVariables.set("resource_id", "123"); // Коллекции
pm.globals.set("app_version", "1.0"); // Глобальная
// Получение значения переменной
let baseUrl = pm.variables.get("base_url"); // Ищет по всем областям согласно приоритету
let envToken = pm.environment.get("api_token"); // Явно из окружения
// Удаление переменной
pm.environment.unset("temp_token");
Использование в запросе: GET {{base_url}}/api/users/{{user_id}}
Ответ 18+ 🔞
А, слушай, про эти ваши переменные в Postman! Ну, это ж, блядь, просто песня, а не фича. Сидишь такой, пишешь запросы, а они тебе — «ой, у нас тут пять видов видимости, выбирай, не хочу». Как в том анекдоте про «все дыры давалка», только для данных.
Короче, смотри. Есть у них там эта система, где к любой хуйне можно обращаться через {{имя_переменной}}. Выглядит, как будто ты в шаблон какой-то пишешь, но на деле — мощь ебаная.
Так, какие у них там зоны ответственности, блядь:
-
Глобальные (Global). Это как дед на деревне — всем видный, всем известный. Положил туда, скажем, версию API — и она доступна от хуя до хуя во всей твоей рабочей области. Хранятся в меню с глазом (👁) → «Globals». Для того, что не должно меняться никогда, типа «ядра — чистый изумруд» твоего приложения.
-
Окружения (Environment). Вот это уже хитрая жопа. Включил, например, окружение «dev» — и у тебя один базовый URL. Переключился на «prod» — и он волшебным образом, блядь, поменялся на боевой, а все ключи подтянулись другие. Управляется там же, через глаз, но нужно выбрать конкретное окружение и его редактировать. Без него — нихуя не работает, переменные-то невидимые.
-
Коллекции (Collection). Ну, это как семейные реликвии. Есть у тебя коллекция «Тесты пользователей». Задал в её настройках переменную
user_id— и все запросы внутри этой папки про неё знают. Удобно, когда один запрос что-то создал, а следующий — пошёл это удалять. Открываешь коллекцию → вкладка «Variables». -
Локальные (Local). А это — чистая сиюминутная поебень. Возникла в скрипте, посчиталась и — хуй, испарилась после выполнения запроса. Через интерфейс их не задашь, только кодом. Для промежуточных вычислений, чтобы мозг не засирать.
-
Данных (Data). О, это особый случай, ёпта! Включается, только когда ты запускаешь всю коллекцию на измор через Collection Runner и подсовываешь ему CSV или JSON файлик. Он тогда каждую строчку из файла подставляет в твои запросы. Пиздец как удобно для массового тестирования, когда нужно «впендюрить» сто разных логинов.
А теперь, внимание, самый сок — приоритеты!
Когда ты пишешь {{var}}, Postman начинает её искать, как собака сука кость, в строгом порядке:
- Сначала в Локальных (Local).
- Не нашёл? Тогда в Данных (Data) из файла.
- Опять мимо? Шерстит Окружение (Environment).
- Ищешь дальше? Заглядывает в Коллекцию (Collection).
- Ну и в самом конце, если везде пиздец, смотрит в Глобальные (Global).
То есть, локальная перебьёт любую другую, даже глобальную. Максимализм, блядь, в чистом виде!
Ну и как с этим всем в коде баловаться? Во, смотри:
// Задать переменные — кому куда
pm.variables.set("local_var", "value"); // Локальная — живёт недолго
pm.environment.set("api_token", "eyJhbGci..."); // В окружение
pm.collectionVariables.set("resource_id", "123"); // В коллекцию
pm.globals.set("app_version", "1.0"); // На весь мир, блядь
// Достать значение
let baseUrl = pm.variables.get("base_url"); // Ищет по всем правилам сверху вниз
let envToken = pm.environment.get("api_token"); // Только из окружения, прицельно
// Удалить, если надоела
pm.environment.unset("temp_token"); // И нет её!
А в самом запросе используешь просто: GET {{base_url}}/api/users/{{user_id}}. Подставится само, волшебным образом. Главное — не запутаться, где какая переменная живёт, а то получится, как у того Герасима: «Муму!», а тебе в ответ — «Нет такой, блядь, уже утопили».