Какая переменная выше по приоритету: environment или collection в Postman
Что проверяют
Понимаете ли вы иерархию областей видимости переменных в Postman, а не просто помните ответ «окружение сильнее». Следом обычно спрашивают, что победит при прогоне коллекции с CSV-файлом данных и почему в запрос подставилось не то значение.
Как отвечать
Короткий ответ: при совпадении имён побеждает environment. Правило общее: используется значение из самой узкой области. Области от широкой к узкой:
- global: доступны во всём рабочем пространстве,
pm.globals; - collection: привязаны к коллекции,
pm.collectionVariables. Удобны для того, что не зависит от стенда: версия API, общие пути; - environment: набор для конкретного стенда, dev, stage или prod,
pm.environment. Переключаются одним выбором окружения; - data: значения из CSV или JSON при прогоне в Collection Runner или в
newmanс флагом-d, читаются черезpm.iterationData; - local: временные переменные из скрипта через
pm.variables.set. Живут до конца запроса или прогона и перекрывают всё остальное.
Метод pm.variables.get("baseUrl") возвращает значение с учётом этого приоритета, в отличие от pm.environment.get, который смотрит только в окружение.
Практический смысл: в коллекции держите значения по умолчанию, в окружении то, что меняется между стендами, в data-файле параметры конкретной итерации. Стоит упомянуть, что у переменной есть начальное значение, которое синхронизируется с командой, и текущее, которое хранится локально. В запрос подставляется текущее, поэтому токены и пароли пишут только туда или в Postman Vault. В newman значение можно переопределить из CI флагом --env-var "baseUrl=...".
Где спотыкаются
Объясняют приоритет тем, что окружение «шире» коллекции. Всё наоборот: окружение уже, поэтому и сильнее.
Забывают про data и local. Колонка baseUrl в CSV молча перекроет окружение при прогоне, и тесты уйдут не на тот стенд.
Не проверяют, выбрано ли окружение. При «No environment» подставляется значение коллекции, запрос успешно уходит на адрес по умолчанию, и это легко принять за правильное поведение.