REST API Бітрікс виходить з ладу в несподіваних місцях: оновлення ядра змінює формат відповіді, кастомний контролер починає повертати null замість порожнього масиву, інтеграція із зовнішньою системою ламається через зсув у структурі даних. Без автоматизованих тестів це виявляється в продакшені, спричиняючи простій та втрату виторгу. Інвестиція в автоматизацію окупається за 2 місяці завдяки скороченню ручного QA на 80%. Postman і Newman — зв'язка, яка захищає ваші ендпоїнти за лічені хвилини. Ми налаштовуємо тестування API під ключ: від збору вимог до інтеграції в CI/CD, щоб ви спали спокійно.
Чому автоматичні тести API економлять бюджет?
Ручна перевірка 50 ендпоїнтів після кожного релізу займає 4–6 годин і все одно пропускає регресію. Postman/Newman знаходить регресію в 10 разів швидше — за 10–15 хвилин проганяється повний набір. Помилки на кшталт "price": "1500.00" (рядок замість числа) ловляться тестом за секунду, а вручну їх помічають лише після скарги клієнта. Економія на QA — до 40% часу команди. Замовте налаштування тестування — ми розробимо колекцію під вашу специфіку.
Які ендпоїнти тестувати в першу чергу?
Колекція організовується за доменними областями, не за HTTP-методами. Для Бітрікс-магазину типова структура:
Bitrix API Tests ├── Auth │ ├── Login (POST /api/auth/login) │ └── Refresh token ├── Catalog │ ├── Get categories list │ ├── Get products by section │ ├── Get product by slug │ └── Search products ├── Cart │ ├── Add item │ ├── Update quantity │ ├── Apply coupon │ └── Remove item └── Order ├── Create order ├── Get order status └── Get order list (auth required) Змінні оточення
Критично важливо розділити оточення — не ганяти тести на продакшені. Створюються окремі environment-файли з різними значеннями base_url, api_prefix, обліковими даними. Токен авторизації отримується динамічно через Pre-request Script запиту авторизації: виконується pm.sendRequest до /auth/login, з відповіді витягується токен і зберігається в змінну оточення. Це виключає зберігання секретів у репозиторії.
{ "id": "local-env", "name": "Local", "values": [ { "key": "base_url", "value": "https://dev.shop.example.com" }, { "key": "api_prefix", "value": "/local/ajax/api/v1" }, { "key": "user_email", "value": "[email protected]" }, { "key": "user_password", "value": "testpass123" }, { "key": "auth_token", "value": "" } ] } Приклад повної колекції
Структура папок і тестів для каталогу та замовлень:
// Tests for GET /catalog/products pm.test('Status 200', () => { pm.response.to.have.status(200); }); pm.test('Response structure', () => { const body = pm.response.json(); pm.expect(body).to.have.property('status', 'ok'); pm.expect(body).to.have.property('data'); pm.expect(body.data).to.have.property('items').that.is.an('array'); pm.expect(body.data).to.have.property('total').that.is.a('number'); pm.expect(body.data).to.have.property('pages').that.is.a('number'); }); pm.test('Product has required fields', () => { const items = pm.response.json().data.items; if (items.length > 0) { const product = items[0]; pm.expect(product).to.have.keys(['id', 'name', 'slug', 'price', 'currency', 'in_stock']); pm.expect(product.price).to.be.a('number').and.to.be.above(0); pm.expect(product.currency).to.equal('RUB'); } }); pm.test('Response time < 500ms', () => { pm.expect(pm.response.responseTime).to.be.below(500); }); const items = pm.response.json().data.items; if (items.length > 0) { pm.environment.set('test_product_slug', items[0].slug); pm.environment.set('test_product_id', items[0].id); } // Tests for POST /order/create pm.test('Order created', () => { const body = pm.response.json(); pm.response.to.have.status(200); pm.expect(body.status).to.equal('ok'); pm.expect(body.data).to.have.property('order_id').that.is.a('number'); pm.expect(body.data.order_id).to.be.above(0); }); pm.test('Order ID saved', () => { const orderId = pm.response.json().data.order_id; pm.environment.set('last_order_id', orderId); pm.expect(orderId).to.be.a('number'); }); Запуск через Newman в CI/CD
Newman — CLI-версія Postman, запускається в будь-якому CI-контурі без GUI. Експортуємо колекцію та оточення з Postman, кладемо в репозиторій.
# Встановлення npm install -g newman newman-reporter-htmlextra # Запуск з HTML-звітом newman run tests/postman/bitrix-api.collection.json \ --environment tests/postman/staging.environment.json \ --reporters cli,htmlextra \ --reporter-htmlextra-export reports/api-test-report.html \ --bail # GitLab CI api-tests: stage: test image: node:20-alpine script: - npm install -g newman newman-reporter-htmlextra - newman run tests/postman/bitrix-api.collection.json --environment tests/postman/staging.environment.json --reporters cli,htmlextra --reporter-htmlextra-export reports/api-test-report.html --bail artifacts: when: always paths: - reports/api-test-report.html expire_in: 7 days Як тестування API Бітрікс захищає від простоїв?
Кожен тест — це страховка. Коли підрядник оновлює модуль каталогу, тест на структуру відповіді відразу виявить, якщо поле in_stock зникло або стало рядком. Без тестів така помилка йде в прод і ламає складські залишки на вітрині. Ми бачили проекти, де відсутність тестів обходилася в десятки годин даунтайму. Postman/Newman у зв'язці з CI/CD дає зелений світло лише після проходження всіх перевірок.
Типові проблеми API Бітрікс
Декілька конкретних речей, на які варто написати тести превентивно:
-
Числа як рядки. Бітрікс часто повертає
"price": "1500.00"замість"price": 1500. Після оновлення або рефакторингу тип може змінитися. Тест:pm.expect(typeof product.price).to.equal('number'). -
Порожній масив vs null. Стандартні методи Бітрікс при порожній вибірці можуть повернути
false,nullабо[]— залежить від обгортки. Зовнішня система очікує масив. Тест:pm.expect(body.data.items).to.be.an('array'). -
Кодування. При міграції на інший сервер кирилиця в полях іноді ламається. Тест:
pm.expect(product.name).to.match(/[а-яА-Я]/)для продуктів з кириличними назвами.
| Типова помилка | Ймовірність | Наслідки без тесту |
|---|---|---|
| Число як рядок | Висока | Помилка в кошику, збій цін |
| null замість масиву | Середня | Падіння фронтенду |
| Кодування | Низька | Некоректний пошук, SEO-проблеми |
| Метрика тесту | Норма |
|---|---|
| Час відповіді списку товарів | < 500 мс |
| Час відповіді картки товару | < 300 мс |
| Час створення замовлення | < 2000 мс |
| Час відповіді пошуку | < 800 мс |
Що входить в налаштування тестування?
- Аудит API — аналіз існуючих ендпоїнтів, фіксація контрактів.
- Розробка колекції — структурування за доменами, Pre-request Scripts для авторизації.
- Налаштування оточень — dev, staging, prod з ізоляцією даних.
- Написання тестів — перевірка статусів, структури, типів, таймінгів.
- Інтеграція в CI/CD — Jenkins, GitLab CI з запуском Newman і HTML-звітами.
- Документація — опис колекції, інструкція з запуску.
- Навчання команди — як додавати тести на нові ендпоїнти.
Підтримка колекції
Колекція — живий артефакт. При додаванні нового ендпоїнта в Бітрікс відразу додавайте тест у Postman. Перевірка структури відповіді займає 10 хвилин, а ловить регресію до потрапляння в прод. Згідно офіційної документації REST API, всі методи повинні бути стабільні, але практика показує зворотне. Ми супроводжуємо тести в рамках підписки: оновлюємо при змінах API, додаємо нові сценарії.
Зв'яжіться з нами для консультації. Замовте налаштування тестування, щоб убезпечити свій проект. 5 років досвіду, 30+ впроваджень, працюємо під ключ.







