API тестування — один з найважливіших скілів сучасного QA інженера. Більшість веб і мобільних застосунків комунікують через API. Навчившись тестувати API — ви відкриєте можливості, які недоступні в UI тестуванні.

Що таке REST API: максимально просто

API (Application Programming Interface) — спосіб спілкування між програмами.

REST API — архітектурний стиль для API. Уявіть ресторан: є меню (документація), офіціант (API), кухня (сервер). Ви робите замовлення (запит) — отримуєте страву (відповідь).

В REST кожен ресурс має URL, а дії над ним виконуються через HTTP методи.

HTTP методи: що і навіщо

1Ресурс: /api/users
2
3GET    /api/users          → отримати список всіх users
4GET    /api/users/123      → отримати user з ID 123
5POST   /api/users          → створити нового user
6PUT    /api/users/123      → повністю оновити user 123
7PATCH  /api/users/123      → частково оновити user 123
8DELETE /api/users/123      → видалити user 123

Структура HTTP запиту і відповіді

Запит

1POST /api/users HTTP/1.1
2Host: api.example.com
3Content-Type: application/json
4Authorization: Bearer eyJhbGciOiJIUzI1...
5
6{
7  "name": "Олена Коваль",
8  "email": "olena@example.com",
9  "role": "editor"
10}

Метод — що робимо (GET, POST, etc.) URL — з яким ресурсом Headers — метадані запиту (тип контенту, авторизація) Body — дані які надсилаємо (для POST, PUT, PATCH)

Відповідь

1HTTP/1.1 201 Created
2Content-Type: application/json
3
4{
5  "id": 456,
6  "name": "Олена Коваль",
7  "email": "olena@example.com",
8  "role": "editor",
9  "created_at": "2026-06-10T14:23:45Z"
10}

Status code — результат операції Headers — метадані відповіді Body — дані у відповіді

Ключові статус-коди

КодНазваКоли очікувати
200OKУспішний GET, PATCH, DELETE
201CreatedУспішний POST (новий ресурс)
204No ContentУспішний DELETE без тіла
400Bad RequestНевалідні дані в запиті
401UnauthorizedНемає або невалідний токен
403ForbiddenНемає прав доступу
404Not FoundРесурс не існує
409ConflictДублікат (email вже зайнятий)
422Unprocessable EntityВалідаційна помилка
500Internal Server ErrorПомилка сервера

Що тестувати в API: чеклист

1. Функціональне тестування

1✅ Позитивні сценарії (happy path):
2- Запит з валідними даними → очікуваний статус-код
3- Response body відповідає специфікації (поля, типи даних)
4- Дані коректно зберігаються/оновлюються/видаляються
5
6✅ Негативні сценарії:
7- Запит без авторизації → 401
8- Запит з недостатніми правами → 403
9- Запит до неіснуючого ресурсу → 404
10- Запит з порожнім обов'язковим полем → 400/422
11- Запит з невалідним форматом даних → 400/422

2. Тестування авторизації

1- Запит без токена
2- Запит зі старим (expired) токеном
3- Запит з невалідним токеном
4- Запит з токеном іншого user

3. Тестування валідації даних

1- Рядки: порожній, пробіли, max довжина+1, SQL injection символи
2- Числа: від'ємні, нуль, дробові якщо ціле очікується
3- Email: без @, без домену, з пробілами
4- Дати: минуле, майбутнє, неіснуюча дата (30 лютого)
5- ID: неіснуючий, рядок замість числа

4. Тестування response body

1- Всі очікувані поля присутні
2- Типи даних правильні (string/number/boolean/array)
3- Немає зайвих чутливих полів (паролі, внутрішні ID)
4- Формат дат відповідає специфікації (ISO 8601)
5- Пагінація працює коректно

Практика в Postman: покроковий приклад

Крок 1: Створення колекції

Відкрийте Postman → New Collection → "QA Roadmap API Tests"

Крок 2: Налаштування змінних середовища

1Environment: Staging
2Variables:
3  base_url: https://api.staging.example.com
4  token: (поки порожнє, заповнимо після логіну)

Крок 3: Запит логіну з автоматичним збереженням токена

1// POST {{base_url}}/auth/login
2// Body:
3{
4  "email": "test@example.com",
5  "password": "testpass123"
6}
7
8// Tests (Postman script):
9const response = pm.response.json();
10
11pm.test("Status 200", () => pm.response.to.have.status(200));
12pm.test("Has access token", () => pm.expect(response.access_token).to.be.a('string'));
13
14// Зберігаємо токен для наступних запитів
15pm.environment.set("token", response.access_token);

Крок 4: Запит зі збереженим токеном

1// GET {{base_url}}/api/users/me
2// Headers: Authorization: Bearer {{token}}
3
4// Tests:
5const user = pm.response.json();
6
7pm.test("Status 200", () => pm.response.to.have.status(200));
8pm.test("Has ID", () => pm.expect(user.id).to.be.a('number'));
9pm.test("Has email", () => pm.expect(user.email).to.be.a('string'));
10pm.test("No password field", () => pm.expect(user.password).to.be.undefined);
11pm.test("Response time < 500ms", () => pm.expect(pm.response.responseTime).to.be.below(500));

Крок 5: Тест негативного сценарію

1// GET {{base_url}}/api/users/99999 (неіснуючий ID)
2// Headers: Authorization: Bearer {{token}}
3
4// Tests:
5pm.test("Status 404", () => pm.response.to.have.status(404));
6pm.test("Error message present", () => {
7  const response = pm.response.json();
8  pm.expect(response.message).to.be.a('string');
9});

Читання API документації (Swagger)

Більшість сучасних API мають Swagger (OpenAPI) документацію. Зазвичай доступна за /swagger або /api/docs.

Що знайдете в Swagger:

  • Всі доступні ендпоінти
  • Методи і параметри
  • Схеми request/response body
  • Які поля обов'язкові
  • Типи даних

Порада: Swagger — ваша специфікація для тест-кейсів. Кожен ендпоінт = мінімум happy path + кілька негативних сценаріїв.

Тестування пагінації

Пагінація часто приховує баги:

1# Базовий запит
2GET /api/users?page=1&per_page=10
3
4# Що перевіряти:
5# 1. Кількість об'єктів у відповіді = per_page (або менше на останній сторінці)
6# 2. page=1 і page=2 повертають різні дані
7# 3. Загальна кількість сторінок коректна: ceil(total / per_page)
8# 4. Остання сторінка: об'єктів <= per_page
9# 5. page=999 (після останньої): порожній масив або 404, не 500

Тестування сортування і фільтрації

1GET /api/users?sort=created_at&order=desc
2
3# Перевірки:
4# created_at першого елемента >= created_at другого
5# sort=invalid_field → 400, а не 500
1GET /api/products?category=electronics&min_price=100&max_price=500
2
3# Перевірки:
4# Всі повернуті продукти мають category=electronics
5# Ціна кожного: 100 <= price <= 500
6# min_price > max_price → 400 з описом помилки

Приклад повного тест-плану для одного ендпоінту

1Ендпоінт: POST /api/orders
2
3Позитивні:
4TC01: Створення замовлення з валідними даними → 201, повертає ID
5TC02: Замовлення зберігається в БД (GET /orders/{id} повертає ті ж дані)
6
7Авторизація:
8TC03: Без токена → 401
9TC04: З expired токеном → 401
10TC05: З токеном user без ролі → 403 (якщо є роль)
11
12Валідація:
13TC06: Порожній масив products → 422 + повідомлення
14TC07: product_id = неіснуючий ID → 422 + повідомлення
15TC08: quantity = -1 → 422 + повідомлення
16TC09: quantity = 0 → 422 + повідомлення
17TC10: Дуже велика кількість товарів → обробляється без 500
18
19Edge cases:
20TC11: Дублікат замовлення (повторний запит) → 409 або ідемпотентна відповідь
21TC12: Одночасні замовлення від одного user → коректна обробка

Підсумок

API тестування — не складно якщо є структура. Основа: розуміти HTTP, вміти читати документацію і систематично перевіряти happy path + негативні сценарії + edge cases.

Починайте з реального API: знайдіть публічне API (GitHub API, JSONPlaceholder, PetStore) і попрактикуйтесь. 2-3 години практики в Postman дадуть більше ніж тиждень читання теорії.