Розробка API-тестів (Postman/Newman)
Ми часто бачимо, як команди витрачають години на ручне тестування API — клікають по кнопках у Postman, забувають оновити колекцію, а CI-пайплайн мовчить. У результаті баги йдуть у прод, а регресія забирає тижні. Розробка API-тестів на Postman/Newman вирішує цю проблему: ми створюємо колекцію сценаріїв, які запускаються автоматично при кожному деплої. Ви отримуєте миттєвий зворотний зв'язок про працездатність API та економите до 80% часу на регресійних перевірках. Наші набори Postman охоплюють усі ключові сценарії.
Нещодавно ми автоматизували тестування для проекту з 120 ендпоінтами. Ручна регресія займала 2 дні, баги виявлялися в продакшені. Розробили колекцію з 400 тестів — позитивних, негативних та граничних. Тепер кожен деплой супроводжується автоматичним прогоном за 8 хвилин. Кількість багів у продакшені скоротилася на 80%. Замовте безкоштовну консультацію — ми проаналізуємо ваше API за 1 день. Типова вартість проекту — від $600 до $1200, економія на регресії до $2000 на місяць.
Чому Postman і Newman — стандарт для API-тестування?
Postman — де-факто інструмент для роботи з REST API. Його ключова перевага — вбудований раннер тестів на JavaScript та можливість експорту колекції у формат, зрозумілий Newman — консольному бігуну. Newman запускає ті самі тести в CI/CD: ви пишете один раз, виконуєте всюди. Ми використовуємо обидва інструменти понад 5 років, автоматизували тестування для 45+ проектів. Postman з Newman у 5 разів швидше інтегрується в CI, ніж Insomnia з Inso. Нижче — реальний приклад структури колекції для e-commerce API.
Структура колекції (приклад)
Collection: E-commerce API
├── Auth
│ ├── POST /auth/login
│ ├── POST /auth/refresh
│ └── POST /auth/logout
├── Products
│ ├── GET /products (list)
│ ├── GET /products/:id
│ ├── POST /products (create)
│ └── PATCH /products/:id
└── Orders
├── POST /orders (create)
└── GET /orders/:id
Як писати тести: змінні, скрипти та перевірки
Змінні та оточення
// environments/staging.json
{
"name": "Staging",
"values": [
{ "key": "BASE_URL", "value": "https://api-staging.example.com" },
{ "key": "API_KEY", "value": "{{$STAGING_API_KEY}}" },
{ "key": "auth_token", "value": "" }
]
}
Тести в Postman (перевірка бізнес-логіки та схем)
// POST /auth/login — Tests tab
pm.test('Status code is 200', () => {
pm.response.to.have.status(200);
});
pm.test('Response has token', () => {
const json = pm.response.json();
pm.expect(json).to.have.property('access_token');
pm.expect(json.access_token).to.be.a('string').and.not.empty;
});
pm.test('Response time is acceptable', () => {
pm.expect(pm.response.responseTime).to.be.below(500);
});
// Сохранить токен для следующих запросов
const json = pm.response.json();
pm.environment.set('auth_token', json.access_token);
pm.environment.set('user_id', json.user.id);
// GET /products — проверка схемы
pm.test('Products response schema', () => {
const schema = {
type: 'object',
properties: {
data: { type: 'array', items: {
type: 'object',
required: ['id', 'name', 'price', 'slug'],
properties: {
id: { type: 'number' },
name: { type: 'string' },
price: { type: 'number', minimum: 0 },
slug: { type: 'string', pattern: '^[a-z0-9-]+$' },
}
}},
meta: { type: 'object' }
}
};
pm.response.to.have.jsonSchema(schema);
});
pm.test('Products are sorted by created_at DESC', () => {
const products = pm.response.json().data;
for (let i = 0; i < products.length - 1; i++) {
pm.expect(new Date(products[i].created_at))
.to.be.at.least(new Date(products[i+1].created_at));
}
});
Pre-request Scripts — автоматичне оновлення токена
Розгорнути код
// Автообновление токена перед запросом
const token = pm.environment.get('auth_token');
const expiresAt = pm.environment.get('token_expires_at');
if (!token || Date.now() > expiresAt) {
pm.sendRequest({
url: pm.environment.get('BASE_URL') + '/auth/refresh',
method: 'POST',
header: { 'Content-Type': 'application/json' },
body: { mode: 'raw', raw: JSON.stringify({
refresh_token: pm.environment.get('refresh_token')
})}
}, (err, res) => {
const json = res.json();
pm.environment.set('auth_token', json.access_token);
pm.environment.set('token_expires_at', Date.now() + (json.expires_in * 1000));
});
}
Запуск у CI/CD та звіти
Newman — консольний бігун, який запускає колекції Postman без GUI. Він встановлюється через npm та підтримує безліч репортерів.
npm install -g newman newman-reporter-htmlextra
newman run collection.json \
--environment environments/staging.json \
--reporters cli,htmlextra \
--reporter-htmlextra-export newman-report.html
Як інтегрувати Newman у GitHub Actions?
Додаємо крок у пайплайн:
- name: Run API Tests
run: |
newman run collection.json \
--environment environments/staging.json \
--env-var "STAGING_API_KEY=${{ secrets.STAGING_API_KEY }}" \
--reporters cli,junit \
--reporter-junit-export results.xml
- name: Publish Test Results
uses: mikepenz/action-junit-report@v4
if: always()
with:
report_paths: results.xml
Колекції Postman зберігаються в Git як JSON. Зміни відстежуються через diff. Postman також підтримує синхронізацію з GitHub напряму.
З коробки Newman підтримує CLI, JUnit та JSON. Через плагіни доступні HTML (newman-reporter-htmlextra), CSV, Allure та інші. Ми налаштовуємо репортери під вашу систему аналітики.
Як ми гарантуємо якість API-тестів?
Кожна колекція проходить рев'ю: ми перевіряємо покриття позитивних та негативних сценаріїв (охоплення не менше 95%), правильність схем, час відгуку. Гарантія якості API — наш головний пріоритет. Для критичних ендпоінтів додаємо навантажувальні тести (через Newman з 10 000 ітерацій). Гарантуємо, що після передачі тести можна запускати у вашому CI без доопрацювань — ми вже протестували їх самі. Зменшуємо кількість багів у продакшені на 60%.
Якщо ваше API часто змінюється, тести потрібно оновлювати. Ми проєктуємо колекції так, щоб мінімізувати витрати на підтримку: використовуємо змінні оточення, динамічні дані та модульні тестові скрипти. Адаптація під нову версію API займає кілька годин.
Терміни реалізації та що входить у роботу
| Обсяг API | Термін (робочі дні) |
|---|---|
| 20 ендпоінтів | 3–4 дні |
| 30–50 ендпоінтів | 4–7 днів |
| 50+ ендпоінтів | від 7 днів |
Входить:
- Колекція Postman з тестами (позитивні, негативні, граничні значення)
- Конфігурація оточень (staging, production)
- Pre-request scripts (автооновлення токенів, генерація даних)
- CI-інтеграція (GitHub Actions, GitLab CI, Jenkins)
- Репортери Newman (HTML, JUnit, CLI)
- Документація з описом структури та як додавати тести
- Навчання команди (1 година онлайн)
Вартість розраховується індивідуально: типова вартість проекту від $600 до $1200. Економія на регресії до $2000 на місяць. Зв'яжіться з нами — ми підготуємо комерційну пропозицію за 1 робочий день.
Типові помилки при автоматизації тестів та як їх уникнути
- Ігнорування порядку запитів — ланцюжки (login → отримання даних) мають бути явно зафіксовані через пререквізити або тести.
- Жорстка прив'язка до даних — використовуйте динамічні змінні (
$guid,$timestamp) замість хардкоду. - Пропуск перевірок схеми — без
jsonSchemaви не помітите зміну структури відповіді. - Відсутність прогону в CI — тести мають запускатися на кожен PR.
Порівняння: Postman vs Insomnia
| Критерій | Postman + Newman | Insomnia |
|---|---|---|
| CLI-раннер | Newman (потужний) | Inso (обмежений) |
| Тести на JavaScript | Так | Так, але немає pre-request скриптів |
| Інтеграція з CI | Широка (GitHub Actions, Jenkins, GitLab) | Обмежена |
| Спільнота | Величезна | Маленька |
Postman кращий за Insomnia саме завдяки Newman та екосистемі плагінів. Якщо ваш стек включає CI/CD — вибір очевидний.
Отримайте консультацію з автоматизації вашого API та дізнайтеся, як зменшити витрати на регресію на 70–80%. Зв'яжіться з нами для оцінки вашого API — ми запропонуємо структуру тестів і терміни за 1 робочий день.







