Розробка 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 робочий день.







