Урок 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/jsonAuthorization: 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) |
Длина массива |
Ключевые выводы урока
- Postman — инструмент QA, а не только разработчика: проверяй API независимо от UI.
- Организуй запросы в коллекции сразу; хаотичные вкладки не масштабируются.
- Используй переменные окружения — не хардкодь токены и URL в каждом запросе.
- «Статус 200» ≠ «всё правильно»: всегда смотри тело ответа.
- Assertions во вкладке Tests — первый шаг от ручной проверки к автоматической.
Домашнее задание
Протестируй API «Пиццаеда» (https://aiqa.su/api/course/v1/shop) — четыре запроса:
GET /products— получить каталог, найтиidлюбой пиццы.POST /cartс телом{"product_id": "<id>", "quantity": 2}— добавить в корзину.GET /cart?promo_code=QA60— проверить корзину с промокодом.DELETE /cart— очистить корзину.
Для каждого запроса описать в чате марафона: статус-код + что вернул сервер в теле ответа.