Logo
Overview

Postman для системного аналитика: коллекции, окружения и тесты

November 2, 2026
7 min read

Я видел аналитиков, которые проверяют API методом «тыка». Открывают браузер, вбивают URL в адресную строку, получают JSON — и гадают, правильно ли это. Коллега, так нельзя. Давайте я покажу, как Postman превращает хаотичную проверку в воспроизводимый процесс, на который можно положиться.

Postman — это не просто «графический curl». Для аналитика он закрывает три задачи: прототипирование запросов, валидацию ответов и документирование API. Причём закрывает так, что разработчик получает не «ну я проверил, вроде работает», а конкретный набор тестов с зелёными галочками. А тестировщик — коллекцию, которую можно прогнать за минуту.

Что вообще происходит в Postman: карта процесса

Если вы открыли Postman первый раз, взгляд цепляется за кнопку Send. И кажется, что всё просто: вбил URL — нажал — получил ответ. Но за красивой кнопкой стоит конвейер, который стоит понимать.

100%
flowchart TB
  A["Требования к API"] --> B["Коллекция Postman"]
  B --> C["Структура папок"]
  B --> D["Переменные"]
  D --> E["Глобальные<br/>переменные"]
  D --> F["Переменные<br/>коллекции"]
  D --> G["Переменные<br/>окружения"]
  C --> H["GET /users"]
  C --> I["POST /orders"]
  H --> J["Pre-request<br/>скрипт"]
  I --> J
  J --> K["Отправка<br/>запроса"]
  K --> L["Тестовый<br/>скрипт"]
  L --> M["Валидация<br/>ответа"]
  M --> N["Runner<br/>коллекции"]
  N --> O["Документация<br/>API"]
  style A fill:#4a90d9,stroke:#2c5f8a,color:#fff
  style B fill:#7b68ee,stroke:#5a4db2,color:#fff
  style C fill:#7b68ee,stroke:#5a4db2,color:#fff
  style D fill:#f0a500,stroke:#c88400,color:#fff
  style E fill:#f0a500,stroke:#c88400,color:#fff
  style F fill:#f0a500,stroke:#c88400,color:#fff
  style G fill:#f0a500,stroke:#c88400,color:#fff
  style H fill:#50c878,stroke:#3a9a5c,color:#fff
  style I fill:#50c878,stroke:#3a9a5c,color:#fff
  style J fill:#4a90d9,stroke:#2c5f8a,color:#fff
  style K fill:#4a90d9,stroke:#2c5f8a,color:#fff
  style L fill:#50c878,stroke:#3a9a5c,color:#fff
  style M fill:#50c878,stroke:#3a9a5c,color:#fff
  style N fill:#7b68ee,stroke:#5a4db2,color:#fff
  style O fill:#e0e0e0,stroke:#999,color:#333

На схеме выше — жизненный цикл запроса от требований до документации. Требования превращаются в коллекцию. Коллекция ветвится на папки (GET, POST и прочие) и переменные трёх уровней. Каждый запрос прогоняется через pre-request-скрипт, уходит на сервер, результат проверяется тестовым скриптом. Потом Runner массово прогоняет всю коллекцию — и на выходе документация. Не rocket science, но детали важны.

Коллекции: не свалка, а структура

Первая ошибка новичка — одна коллекция «My Workspace» на 150 запросов без папок. Через неделю найти нужный эндпоинт невозможно. Через месяц — проще создать новый запрос, чем искать старый.

Я придерживаюсь правила: одна коллекция = один API или один микросервис. Внутри — папки по сущностям:

Коллекция: User Service API
├── Users
│ ├── GET /users
│ ├── GET /users/{{userId}}
│ ├── POST /users
│ ├── PATCH /users/{{userId}}
│ └── DELETE /users/{{userId}}
├── Auth
│ ├── POST /auth/login
│ └── POST /auth/refresh
└── Health
└── GET /health

Двойные фигурные скобки \{\{userId\}\} — это переменные, о них ниже. Пока суть в том, что структура папок повторяет структуру эндпоинтов из спецификации. Разработчик открывает коллекцию — и сразу видит: ага, Users, Auth, Health. Не надо гадать, где что лежит.

Коллекцию можно экспортировать в JSON и положить в репозиторий рядом с кодом. Разработчики скажут спасибо (ну, или хотя бы не напишут в личку «а какой там формат ответа у POST /users?»).

Переменные: зачем три уровня и какой когда использовать

Переменные — это то, что отличает «я потыкал API» от «я настроил воспроизводимое тестирование». Postman поддерживает три уровня, и у каждого своя роль.

Глобальные переменные (globals) — живут вне коллекций. Кладу туда то, что нужно везде: API-ключ для стороннего сервиса, токен доступа после логина в pre-request-скрипте.

Переменные коллекции — привязаны к конкретной коллекции. Здесь baseUrl, общие заголовки, версия API. Экспортируются вместе с коллекцией, так что разработчик получит их «из коробки».

Переменные окружения (environment) — переключаются одной кнопкой. Dev, Staging, Prod — три набора значений для одних и тех же ключей. Меняете окружение — и все \{\{baseUrl\}\} в коллекции автоматически подтягивают нужный хост.

Честно говоря, на первом проекте я запихнул всё в глобальные переменные. Работало — не трогал. А потом коллега случайно перезаписал глобальный baseUrl, и полчаса мы гадали, почему запросы уходят в продакшен, хотя должны в дев. Урок: глобальные — только для того, что реально глобально. Всё остальное — в коллекцию или окружение.

Типичный набор для e-commerce API:

УровеньПеременнаяЗначение (dev)Значение (prod)
КоллекцияapiVersionv1v1
ОкружениеbaseUrlhttp://localhost:3000https://api.shop.ru
ОкружениеauthToken— (получаем через логин)—
ГлобальныеapmTokendev-key-123prod-key-456

Pre-request скрипты: подготовка до отправки

Pre-request скрипт — это JavaScript, который выполняется перед каждым запросом в коллекции или папке. Самое частое применение: автоматический логин и получение токена.

Вместо того чтобы руками копировать access_token из ответа POST /auth/login в каждый заголовок, я пишу скрипт на уровне коллекции:

// Pre-request коллекции: получаем токен, если его нет
if (!pm.environment.get("authToken")) {
pm.sendRequest({
url: pm.environment.get("baseUrl") + "/auth/login",
method: "POST",
header: { "Content-Type": "application/json" },
body: {
mode: "raw",
raw: JSON.stringify({
login: pm.environment.get("testLogin"),
password: pm.environment.get("testPassword")
})
}
}, (err, res) => {
if (!err) {
const token = res.json().access_token;
pm.environment.set("authToken", token);
}
});
}

Скрипт проверяет, есть ли токен в окружении. Если нет — логинится, сохраняет токен, и все последующие запросы в коллекции используют его через заголовок Authorization: Bearer \{\{authToken\}\}. Никакого ручного копипаста.

Другие применения pre-request:

  • Генерация случайных тестовых данных (email, телефон) через pm.variables.replaceIn
  • Подпись запроса (HMAC, если API требует)
  • Установка динамических заголовков (timestamp, requestId)

Тестовые скрипты: проверяем, а не просто смотрим

Тестовый скрипт выполняется после ответа. Это не про QA-тесты на 100500 сценариев, а про минимальную валидацию, которую аналитик может написать за минуту:

// Тесты для GET /users/{{userId}}
pm.test("Статус 200", () => {
pm.response.to.have.status(200);
});
pm.test("Ответ — JSON", () => {
pm.response.to.be.json;
});
pm.test("Есть поле email", () => {
const user = pm.response.json();
pm.expect(user).to.have.property("email");
});
pm.test("userId в ответе совпадает с запросом", () => {
const user = pm.response.json();
pm.expect(user.id).to.eql(pm.environment.get("userId"));
});
pm.test("Время ответа < 500 мс", () => {
pm.expect(pm.response.responseTime).to.be.below(500);
});

Пять строчек — и у меня уже не «вроде ок», а конкретный отчёт: 5 passed, 0 failed. На ревью требований с разработчиком это работает лучше любых слов. Я не говорю «я проверил». Я показываю зелёный прогон коллекции.

Встроенная библиотека pm.* (Postman Sandbox) даёт всё необходимое: pm.test(), pm.expect() (ChaiJS), pm.response. Для сложных проверок — JSON Schema валидация:

const schema = {
type: "object",
required: ["id", "email", "role"],
properties: {
id: { type: "number" },
email: { type: "string", format: "email" },
role: { type: "string", enum: ["admin", "user", "manager"] }
}
};
pm.test("Ответ соответствует JSON Schema", () => {
pm.response.to.have.jsonSchema(schema);
});

Схема — это по сути спецификация в коде. Если разработчик меняет поле role с admin на superadmin и забывает предупредить, тест падает. Аналитик узнаёт об изменении контракта до того, как оно уедет в прод.

Runner: прогоняем всё разом

Runner — это встроенный «пускач» коллекций. Открываете коллекцию, жмёте Run, выбираете окружение — и все запросы выполняются последовательно. На выходе — отчёт: сколько прошло, сколько упало, время каждого запроса.

Зачем это аналитику:

  • Регресс перед демо. За пять минут до показа стейкхолдеру прогоняю коллекцию — и знаю: API жив, контракты не разъехались. Не краснею на демо.
  • Приёмочное тестирование. Разработчик сдал задачу — я не изучаю код, а запускаю коллекцию. Если тесты зелёные — принимаю. Если красные — возвращаю с конкретным отчётом.
  • Передача тестировщику. Вместо «проверь API» даю готовую коллекцию с тестами. Тестировщик не тратит время на написание проверок — только запускает.

Документация из коллекции: один источник правды

Postman умеет генерировать документацию из коллекции. Заливаете коллекцию в Postman Cloud (бесплатно для небольших команд) — и получаете страницу с описанием всех эндпоинтов. URL можно кинуть разработчику, тестировщику, заказчику.

Документация подтягивает:

  • Описание запроса (из поля Description каждого эндпоинта)
  • Параметры и заголовки
  • Примеры запросов и ответов (сохранённые в коллекции)
  • Результаты тестовых прогонов

Одно из моих любимых применений: в поле Description пишу краткое описание на русском — и документация готова без вёрстки, без Confluence, без Swagger. Конечно, для полноценной документации лучше Swagger и OpenAPI, но для быстрого старта и прототипирования — самодокументирующаяся коллекция закрывает 80% потребностей.

Зачем аналитику Postman, если есть Swagger и curl

Вопрос, который мне задают регулярно. Swagger — это контракт. Postman — это инструмент проверки контракта. Они не заменяют, а дополняют друг друга.

Curl, в свою очередь, крут для отладки, но когда у вас 30 эндпоинтов с тремя окружениями и тестами — curl превращается в bash-простыню на 500 строк. Postman даёт визуальный интерфейс, переменные и автотесты, не требуя от аналитика быть программистом.

Postman входит в минимальный стек инструментов аналитика, о котором я писал раньше. Игнорировать его — всё равно что проверять документы без спеллчекера. Можно, но зачем.

Чек-лист для аналитика

  • Создайте отдельную коллекцию под каждый API, с которым работаете
  • Разложите запросы по папкам (сущность → метод)
  • Вынесите baseUrl в переменные окружения, переключайте Dev/Staging/Prod одной кнопкой
  • Напишите pre-request для автоматического получения токена — избавьтесь от ручного копипаста
  • К каждому эндпоинту добавьте 3–5 тестовых проверок: статус, формат, ключевые поля
  • Перед сдачей задачи прогоняйте коллекцию через Runner — показывайте зелёный отчёт, а не слова
  • Заполните поле Description у запросов — документация сгенерируется автоматически