К списку уроков
Блок 5 · Инструменты тестировщика

Урок 16. Postman

Тестирование API на практике

Темы урока

Установка, GET/POST/PUT/DELETE, параметры/заголовки/тело, авторизация (API Key/Bearer/Basic), коллекции/окружения, базовые assertions

Видео урока

Пройти тест по уроку

Конспект урока

Конспект — Урок 16: Postman

Зачем тестировщику Postman

Postman — GUI-клиент для отправки HTTP-запросов. DevTools показывает трафик браузера, но создавать запросы с нуля там нельзя. Postman даёт полный контроль: выбрать метод, заголовки, тело — и отправить к любому серверу независимо от интерфейса.

Суть: UI может выглядеть правильно, а сервер при этом возвращать некорректные данные. Postman позволяет проверить бэкенд напрямую.

Аналоги и когда их выбирать:

Инструмент Когда
Postman Командная работа, sharing коллекций, история запросов
Insomnia / Bruno Хочется легковесного инструмента без аккаунта
curl / HTTPie CI-скрипты, быстрая проверка в терминале
Swagger UI Разовая проверка одного эндпоинта прямо в документации

Интерфейс: workspace, collections, environments

Workspace — рабочее пространство (личное или командное). В нём хранятся коллекции и окружения.

Collections — папки для запросов. Можно группировать по фиче или по сервису: все запросы к /cart в одной папке, к /products — в другой. Без коллекций вкладки быстро превращаются в хаос.

Environments — наборы переменных. Переменная {{base_url}} в dev-окружении равна https://dev.api.example.com, в stage — другая. Один клик — и все запросы коллекции смотрят на нужный стенд.

Переменные в запросах записываются в двойных фигурных скобках: {{base_url}}, {{token}}. Ни токены, ни URL не нужно хардкодить прямо в запросах.


HTTP-методы: GET / POST / PUT / PATCH / DELETE

Метод Назначение Пример
GET Получить данные GET /products — список товаров
POST Создать ресурс POST /cart — добавить в корзину
PUT Обновить целиком PUT /users/5 — перезаписать профиль
PATCH Обновить частично PATCH /users/5 — обновить только имя
DELETE Удалить DELETE /cart — очистить корзину

Идемпотентность: GET, PUT, DELETE — повторный вызов даёт тот же результат. POST — нет: повторный POST создаёт новый ресурс.


Из чего собирается запрос

Query parameters (Params)

Передаются в URL после ?:

GET /cart?promo_code=QA60&page=1

В Postman — вкладка Params; значения автоматически попадают в URL.

Заголовки (Headers)

Метаданные запроса: тип содержимого, токен, идентификатор сессии. Типичные:

  • Content-Type: application/json
  • Authorization: Bearer <token>
  • X-Course-Session: <id>

Тело запроса (Body)

Только для POST / PUT / PATCH. Форматы:

  • raw → JSON — самый частый вариант для REST;
  • form-data — загрузка файлов;
  • x-www-form-urlencoded — старые HTML-формы.
{
  "product_id": "pizza-margarita",
  "quantity": 2
}

Авторизация

В Postman — вкладка Authorization, лучше ставить на уровне коллекции: все запросы внутри наследуют настройку автоматически.

Тип Как работает Где встречается
API Key Ключ в заголовке или query-параметре Публичные API (OpenWeather, Google Maps)
Bearer Token Authorization: Bearer <token> JWT, OAuth 2.0
Basic Auth Base64(login:password) в заголовке Старые системы, HTTP Basic

Assertions — вкладка Tests

Assertions — JavaScript-код, который запускается после получения ответа. Пишется во вкладке Tests каждого запроса.

// Проверить статус-код
pm.test("Status is 200", function () {
  pm.response.to.have.status(200);
});

// Проверить поле в теле ответа
pm.test("Has title", function () {
  const json = pm.response.json();
  pm.expect(json.title).to.be.a("string");
});

// Сохранить id из ответа в переменную окружения
pm.environment.set("order_id", pm.response.json().id);
Метод Что проверяет
pm.response.to.have.status(N) Статус-код ответа
pm.response.json() Тело ответа как JS-объект
pm.expect(val).to.equal(x) Точное совпадение
pm.expect(val).to.be.a("type") Тип данных
pm.expect(arr).to.have.lengthOf(N) Длина массива

Ключевые выводы урока

  1. Postman — инструмент QA, а не только разработчика: проверяй API независимо от UI.
  2. Организуй запросы в коллекции сразу; хаотичные вкладки не масштабируются.
  3. Используй переменные окружения — не хардкодь токены и URL в каждом запросе.
  4. «Статус 200» ≠ «всё правильно»: всегда смотри тело ответа.
  5. Assertions во вкладке Tests — первый шаг от ручной проверки к автоматической.

Домашнее задание

Протестируй API «Пиццаеда» (https://aiqa.su/api/course/v1/shop) — четыре запроса:

  1. GET /products — получить каталог, найти id любой пиццы.
  2. POST /cart с телом {"product_id": "<id>", "quantity": 2} — добавить в корзину.
  3. GET /cart?promo_code=QA60 — проверить корзину с промокодом.
  4. DELETE /cart — очистить корзину.

Для каждого запроса описать в чате марафона: статус-код + что вернул сервер в теле ответа.