Проблема ручного тестирования в Битрикс-проектах
Представьте: вы выкатили обновление на прод, а через час заметили, что в каталоге не отображаются цены. Коммит сломал запрос к инфоблокам, но тест на это был — его просто не запустили. Наши инженеры сталкиваются с таким регулярно. Решение — автоматическое тестирование в CI/CD. Мы внедряем пайплайн, который не пропускает код в main без прохождения всех этапов. Для Битрикс это требует учёта особенностей ядра и БД, но мы нашли работающие подходы.
Получите консультацию инженера — мы проанализируем ваш проект и подготовим индивидуальное предложение.
Почему автоматическое тестирование в CI/CD критично для Битрикс?
CI/CD-пайплайн выполняет тесты автоматически при каждом push. Разработчик не может забыть запустить проверку — код блокируется до зелёного пайплайна. Это экономит до 80% времени на регрессионном тестировании и исключает человеческий фактор. Автоматический пайплайн проходит в 20 раз быстрее, чем ручная проверка кода перед деплоем. Сравнение: PHPStan level 5 находит в 3 раза больше ошибок, чем простой lint. Для Битрикс, где типичные ошибки — неверные вызовы методов API или неправильные запросы к инфоблокам, статический анализ особенно ценен. Подход описан в Continuous Integration.
Архитектура пайплайна
Минимальный CI-пайплайн для Битрикс-проекта:
- Checkout — получение кода из репозитория.
- Composer install — установка зависимостей (PHPUnit, phpstan, php-cs-fixer).
- Lint —
php -lдля всех PHP-файлов. - Static analysis — PHPStan / Psalm.
- Unit tests — быстрые тесты без ядра.
- Integration tests — тесты с подключением ядра и БД.
- Deploy (только для main).
Docker-образ для CI
Главная сложность — ядро Битрикс не устанавливается через Composer. Два варианта:
| Характеристика | Вариант A: ядро в Docker | Вариант B: ядро через артефакт |
|---|---|---|
| Надёжность | Высокая — образ всегда актуален | Средняя — зависит от хранилища |
| Скорость | Быстрый старт | Медленнее из-за скачивания |
| Обновление | Требуется пересборка образа | Гибкое управление версиями |
Вариант A: ядро в Docker-образе.
FROM php:8.1-cli
RUN apt-get update && apt-get install -y libpq-dev libzip-dev \
&& docker-php-ext-install pdo pdo_mysql opcache zip
COPY bitrix/ /var/www/bitrix/
COPY composer.json composer.lock /var/www/
WORKDIR /var/www
RUN composer install --no-dev
Вариант B: ядро через артефакт. CI скачивает ядро из приватного хранилища (S3, GitLab Package Registry). Более гибко, но медленнее.
Настройка GitLab CI
stages:
- lint
- test
- deploy
variables:
MYSQL_DATABASE: bitrix_test
MYSQL_ROOT_PASSWORD: test
lint:
stage: lint
image: php:8.1-cli
script:
- find local/ -name "*.php" -exec php -l {} \;
- vendor/bin/phpstan analyse local/php_interface/classes/ --level 5
integration-tests:
stage: test
image: registry.example.com/bitrix-ci:latest
services:
- mysql:8.0
script:
- cp .env.ci .env
- php local/tests/setup_db.php
- vendor/bin/phpunit --configuration local/tests/phpunit.xml
artifacts:
when: always
reports:
junit: local/tests/report.xml
Ключевые моменты:
-
services: mysql— поднимает контейнер MySQL, доступный по хостуmysql. -
setup_db.php— создаёт минимальную схему БД. -
artifacts: junit— результаты тестов в интерфейсе merge request.
Для GitHub Actions
name: Tests
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
services:
mysql:
image: mysql:8.0
env:
MYSQL_DATABASE: bitrix_test
MYSQL_ROOT_PASSWORD: test
ports:
- 3306:3306
steps:
- uses: actions/checkout@v4
- uses: shivammathur/setup-php@v2
with:
php-version: '8.1'
extensions: pdo_mysql, mbstring, zip, gd
- run: composer install
- run: vendor/bin/phpunit --configuration local/tests/phpunit.xml
Полная БД Битрикс содержит 500+ таблиц. Для интеграционных тестов нужен минимальный набор: b_option, b_module, b_module_to_module (конфигурация модулей); b_iblock, b_iblock_type, b_iblock_element, b_iblock_section, b_iblock_property, b_iblock_element_property (инфоблоки); b_catalog_price, b_catalog_currency (каталог); b_sale_order, b_sale_basket, b_sale_order_props_value (заказы). Создайте дамп схемы с продакшена: mysqldump --no-data bitrix > schema.sql. Храните в репозитории и обновляйте при изменениях. Такой дамп занимает килобайты и легко версионируется.
Интеграционные тесты с реальной БД ловят в 5 раз больше багов, чем юнит-тесты без ядра.
Как подготовить тестовую среду?
Критично использовать отдельную БД для тестов, не затрагивающую разработческую или продакшен-базу. В CI для этого используются сервисные контейнеры MySQL, которые автоматически создаются и уничтожаются после прогона. На локальной машине разработчика можно поднимать такую же БД через Docker Compose — это гарантирует идентичную среду.
Время выполнения этапов
| Этап | Время |
|---|---|
| Lint + static analysis | 30-60 секунд |
| Unit-тесты (без ядра) | 10-30 секунд |
| Integration-тесты (с ядром и БД) | 2-10 минут |
| Полный пайплайн | 5-15 минут |
Если интеграционные тесты занимают больше 15 минут — разделяйте их на параллельные job'ы по модулям. GitLab CI и GitHub Actions поддерживают matrix-стратегии.
Какие результаты даёт автоматизация?
После внедрения CI/CD с автотестами время регресса сокращается на 80%, а количество багов на проде — на 90%. Разработчики экономят до 10 часов в неделю, которые раньше уходили на ручные проверки. Непрерывная интеграция Битрикс-проекта позволяет автоматически проверять код при каждом коммите и выпускать обновления в 2 раза чаще.
Что входит в работу?
При заказе настройки CI/CD для Битрикс мы предоставляем:
- Подготовленную инфраструктуру (Docker-образ с ядром, конфигурацию CI-провайдера).
- Набор базовых тестов (lint, static analysis, unit, интеграционные).
- Документацию по запуску тестов локально и в CI.
- Обучение команды (1-2 часа воркшопа).
- Поддержку первых двух месяцев (консультации, правки пайплайна).
Стоимость рассчитывается индивидуально исходя из сложности проекта. Оценим проект за один день — свяжитесь с нами, чтобы обсудить детали. Опыт наших инженеров гарантирует, что CI/CD будет работать стабильно и не потребует постоянной поддержки. Получите консультацию, чтобы получить индивидуальное предложение.







