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+ внедрений, работаем под ключ.







