Какие виды переменных поддерживаются в Postman и для чего они используются?

Ответ

Postman предоставляет систему переменных с разными областями видимости (scopes), что позволяет гибко управлять данными в запросах, тестах и окружениях. Доступ к переменной осуществляется через синтаксис {{variable_name}}.

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

  1. Глобальные переменные (Global Variables)

    • Область видимости: Доступны во всех запросах, коллекциях и окружениях в рамках одной рабочей области (Workspace).
    • Использование: Для значений, общих для всего проекта (например, версия API, глобальный токен).
    • Управление: Меню глазами (👁) → "Globals".
  2. Переменные окружения (Environment Variables)

    • Область видимости: Доступны только когда активно выбранное окружение (Environment).
    • Использование: Для конфигурации, специфичной для среды развёртывания (dev, staging, prod). Например, разные базовые URL, ключи API.
    • Управление: Меню глазами (👁) → Выбор окружения → "Edit".
  3. Переменные коллекции (Collection Variables)

    • Область видимости: Доступны для всех запросов внутри конкретной коллекции.
    • Использование: Для данных, общих для всей коллекции (например, ID созданного ресурса, который используется в последующих запросах).
    • Управление: Открыть коллекцию → вкладка "Variables".
  4. Локальные переменные (Local Variables)

    • Область видимости: Существуют только во время выполнения одного запроса (или набора запросов в Collection Runner). Удаляются после завершения.
    • Использование: Для временных вычислений в скриптах (Pre-request или Tests). Нельзя задать через UI, только через скрипты.
  5. Переменные данных (Data Variables)

    • Особый тип: Используются исключительно при запуске коллекции через Collection Runner с внешним файлом данных (CSV, JSON).
    • Использование: Для параметризованного тестирования, когда нужно прогонять одни и те же запросы с разными наборами данных.

Приоритет разрешения переменных

При обращении к {{var}} Postman ищет переменную в следующем порядке (от высшего приоритета к низшему):

  1. Локальные переменные (Local)
  2. Переменные данных (Data)
  3. Переменные окружения (Environment)
  4. Переменные коллекции (Collection)
  5. Глобальные переменные (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! Ну, это ж, блядь, просто песня, а не фича. Сидишь такой, пишешь запросы, а они тебе — «ой, у нас тут пять видов видимости, выбирай, не хочу». Как в том анекдоте про «все дыры давалка», только для данных.

Короче, смотри. Есть у них там эта система, где к любой хуйне можно обращаться через {{имя_переменной}}. Выглядит, как будто ты в шаблон какой-то пишешь, но на деле — мощь ебаная.

Так, какие у них там зоны ответственности, блядь:

  1. Глобальные (Global). Это как дед на деревне — всем видный, всем известный. Положил туда, скажем, версию API — и она доступна от хуя до хуя во всей твоей рабочей области. Хранятся в меню с глазом (👁) → «Globals». Для того, что не должно меняться никогда, типа «ядра — чистый изумруд» твоего приложения.

  2. Окружения (Environment). Вот это уже хитрая жопа. Включил, например, окружение «dev» — и у тебя один базовый URL. Переключился на «prod» — и он волшебным образом, блядь, поменялся на боевой, а все ключи подтянулись другие. Управляется там же, через глаз, но нужно выбрать конкретное окружение и его редактировать. Без него — нихуя не работает, переменные-то невидимые.

  3. Коллекции (Collection). Ну, это как семейные реликвии. Есть у тебя коллекция «Тесты пользователей». Задал в её настройках переменную user_id — и все запросы внутри этой папки про неё знают. Удобно, когда один запрос что-то создал, а следующий — пошёл это удалять. Открываешь коллекцию → вкладка «Variables».

  4. Локальные (Local). А это — чистая сиюминутная поебень. Возникла в скрипте, посчиталась и — хуй, испарилась после выполнения запроса. Через интерфейс их не задашь, только кодом. Для промежуточных вычислений, чтобы мозг не засирать.

  5. Данных (Data). О, это особый случай, ёпта! Включается, только когда ты запускаешь всю коллекцию на измор через Collection Runner и подсовываешь ему CSV или JSON файлик. Он тогда каждую строчку из файла подставляет в твои запросы. Пиздец как удобно для массового тестирования, когда нужно «впендюрить» сто разных логинов.

А теперь, внимание, самый сок — приоритеты! Когда ты пишешь {{var}}, Postman начинает её искать, как собака сука кость, в строгом порядке:

  1. Сначала в Локальных (Local).
  2. Не нашёл? Тогда в Данных (Data) из файла.
  3. Опять мимо? Шерстит Окружение (Environment).
  4. Ищешь дальше? Заглядывает в Коллекцию (Collection).
  5. Ну и в самом конце, если везде пиздец, смотрит в Глобальные (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}}. Подставится само, волшебным образом. Главное — не запутаться, где какая переменная живёт, а то получится, как у того Герасима: «Муму!», а тебе в ответ — «Нет такой, блядь, уже утопили».