Урок 6 из 8 · 20 мин · обновлено
Переменные и окружения
Как не повторять базовый адрес и токен в каждом запросе: переменные Postman в двойных фигурных скобках, окружения для тестового и рабочего сервера, переменные коллекции и автоматическое сохранение токена.
Зачем переменные
В коллекции уже десяток запросов, и в каждом повторяется https://dummyjson.com. А завтра команда скажет: тестируем на другом сервере. Править каждый запрос вручную долго, и что-нибудь обязательно забудется. То же с токеном: он устаревает через час, и вставлять его заново в каждый запрос неудобно.
Переменная в Postman — имя, вместо которого при отправке подставляется значение. Её пишут в двойных фигурных скобках:
GET {{baseUrl}}/products/1
Если baseUrl = https://dummyjson.com, Postman отправит запрос на https://dummyjson.com/products/1. Наведите курсор на переменную в строке адреса — Postman покажет её текущее значение.
Окружения
Окружение (environment) — набор переменных для одного сервера. В компаниях их обычно несколько:
| Окружение | baseUrl |
|---|---|
| Локальное | http://localhost:8080 |
| Тестовое | https://test.shop.example |
| Рабочее | https://api.shop.example |
Запросы одни и те же, а переключатель окружений в правом верхнем углу Postman решает, куда они уйдут.
Создайте окружение для учебного API:
- Слева раздел Environments → + → назовите «Учебный».
- Добавьте переменную
baseUrlсо значениемhttps://dummyjson.com. - Добавьте переменную
tokenс пустым значением и типом secret — Postman будет скрывать её значение звёздочками. - Сохраните и выберите окружение «Учебный» в переключателе справа вверху.
- В запросах коллекции замените
https://dummyjson.comна{{baseUrl}}.
Если переменная подсвечена красным — Postman её не нашёл: не выбрано окружение или опечатка в имени.
Будьте внимательны с рабочим окружением. Запрос DELETE к тестовому серверу безопасен, к рабочему — удалит настоящие данные. Многие команды вообще не держат в Postman рабочее окружение с правами на изменение.
Переменные коллекции
Кроме окружений, переменные бывают у коллекции — вкладка Variables в настройках коллекции. Они общие для всех её запросов в любом окружении. Туда кладут то, что не зависит от сервера, например номер тестового товара productId = 1:
GET {{baseUrl}}/products/{{productId}}
Если переменная с одним именем есть и в окружении, и в коллекции, Postman возьмёт значение из окружения: у него приоритет выше.
Токен сам попадает в переменную
Чтобы не копировать токен руками после каждого входа, его сохраняют автоматически. В запросе входа POST {{baseUrl}}/auth/login откройте вкладку Scripts → Post-response и вставьте:
const json = pm.response.json();
pm.environment.set("token", json.accessToken);
- скрипт выполняется после получения ответа;
pm.response.json()превращает тело ответа в объект;pm.environment.setзаписывает значение в переменную текущего окружения.
Теперь во вкладке Authorization у коллекции выберите Bearer Token и впишите {{token}}. У запросов внутри коллекции оставьте тип Inherit auth from parent — они возьмут авторизацию от коллекции. Один вход — и все закрытые запросы работают.
Попробуйте сами. Переведите все запросы коллекции «Учебный магазин» на {{baseUrl}}. Затем создайте второе окружение «Сломанный» с baseUrl = https://dummyjson.com/wrong, переключитесь на него и отправьте запрос товара. Что изменилось?
Ответ
В окружении «Сломанный» запрос уйдёт на https://dummyjson.com/wrong/products/1, и сервер ответит ошибкой — такого пути нет. Ни один запрос при этом вы не меняли: изменилось только окружение.
Так и работают на практике. Новый тестовый сервер — значит, новое окружение, а коллекция остаётся прежней. Переключитесь обратно на «Учебный», и всё снова заработает.
Мини-тест: проверьте себя
Закрепите урок: несколько вопросов, разбор ответов — в конце.
-
Как в Postman вставить переменную baseUrl в адрес запроса?
Postman подставляет значения переменных, записанных в двойных фигурных скобках.
-
Зачем нужны окружения?
В окружении «Тест» baseUrl ведёт на тестовый сервер, в «Прод» — на рабочий. Запросы при этом не меняются.
-
Что делает строка pm.environment.set("token", json.accessToken) в скрипте после запроса входа?
После каждого входа свежий токен сам попадёт в переменную, и все запросы с {{token}} будут его использовать.