Обновления ядра Битрикс выходят каждые две недели. После каждого апдейта — ручное регрессионное тестирование на 4–8 часов. Интеграция с 1С через CommerceML добавляет риски. Мы автоматизируем регресс как минимум в 24 раза быстрее: тесты выполняются за 10–15 минут вместо четырёх часов. За более чем 8 лет работы мы автоматизировали регресс для более чем 30 проектов. Без автоматизации проект теряет до 20% бюджета на тестировании.
Почему Битрикс требует особого подхода к тестированию
Главная проблема — монолитная архитектура. Все компоненты завязаны на глобальное состояние: \Bitrix\Main\Application::getInstance(), \CMain, $DB. Unit-тесты невозможно запустить без инициализации ядра. Нужна специальная инфраструктура. Второй момент — частые обновления. Каждый апдейт может сломать интеграцию с 1С или кастомные решения. Третий — сложность изоляции. Без автоматизации каждый новый релиз — стресс. Мы решаем эти проблемы с помощью проверенного стека инструментов.
Стек инструментов
Для Битрикс-проектов актуальна комбинация:
- PHPUnit — unit-тесты для изолируемой бизнес-логики.
- Codeception — функциональные и интеграционные тесты (имеет модуль для Bitrix).
- Playwright — e2e тесты браузерного поведения.
- PHPStan — статический анализ (не тест, но часть CI).
Закажите разработку системы тестирования уже сегодня — это окупится после двух обновлений.
Как настроить PHPUnit для Битрикс
Главная проблема unit-тестирования Битрикс — код зависит от глобального состояния: \Bitrix\Main\Application::getInstance(), \CMain, $DB. Запустить тест без инициализации ядра нельзя.
Решение — загружать ядро в bootstrap-файле тестов:
// tests/bootstrap.php
$_SERVER['DOCUMENT_ROOT'] = dirname(__DIR__);
define('NO_KEEP_STATISTIC', true);
define('NOT_CHECK_PERMISSIONS', true);
define('BX_WITH_ON_AFTER_EPILOG', false);
require_once $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_before.php';
phpunit.xml:
<phpunit bootstrap="tests/bootstrap.php">
<testsuites>
<testsuite name="Unit">
<directory>tests/unit</directory>
</testsuite>
</testsuites>
</phpunit>
Что тестировать unit-тестами
Бизнес-логика, изолированная в классах без прямой зависимости от ядра:
class ArticleResolverTest extends TestCase
{
public function testResolveValidArticle(): void
{
$resolver = new ArticleResolver($this->createMockRepository());
$result = $resolver->resolve('ABC-123', CATALOG_IBLOCK_ID);
$this->assertSame(456, $result->getSkuId());
}
public function testResolveUnknownArticleReturnsNull(): void
{
$resolver = new ArticleResolver($this->createEmptyRepository());
$this->assertNull($resolver->resolve('UNKNOWN', CATALOG_IBLOCK_ID));
}
}
Ключевой паттерн: внедрение зависимостей вместо прямых вызовов статических методов Битрикс — это и делает код тестируемым. Экономия на регрессе может достигать 80%.
Функциональные тесты с Codeception
Codeception с модулем для Битрикс позволяет тестировать HTTP-сценарии без браузера:
// tests/functional/OrderCheckoutCest.php
class OrderCheckoutCest
{
public function addToCartAndCheckout(FunctionalTester $I): void
{
$I->amOnPage('/catalog/product-slug/');
$I->click('Добавить в корзину');
$I->seeInDatabase('b_sale_basket', ['PRODUCT_ID' => 123]);
$I->amOnPage('/order/');
$I->fillField('NAME', 'Тест Тестов');
$I->fillField('EMAIL', '[email protected]');
$I->click('Оформить заказ');
$I->seeInDatabase('b_sale_order', ['STATUS_ID' => 'N']);
}
}
E2E тесты с Playwright
Для критических пользовательских путей — e2e тесты, которые запускают настоящий браузер:
// tests/e2e/checkout.spec.js
test('full checkout flow', async ({ page }) => {
await page.goto('/catalog/product-slug/');
await page.click('.add-to-cart-btn');
await expect(page.locator('.cart-count')).toHaveText('1');
await page.goto('/order/');
await page.fill('[name="NAME"]', 'Test User');
await page.fill('[name="EMAIL"]', '[email protected]');
await page.click('.submit-order-btn');
await expect(page).toHaveURL(/\/order\/success\//);
});
Как интегрировать тесты в CI/CD?
Тесты запускаются автоматически при пуше в репозиторий. Мы используем GitHub Actions или GitLab CI. Настройка занимает 2–4 часа. В результате каждый коммит проходит проверку: unit-тесты за 30 секунд, функциональные — за 3 минуты, e2e — за 5–10 минут. При обнаружении ошибок сборка останавливается, и разработчик получает уведомление.
Согласно документации 1С-Битрикс, тестовое окружение должно быть изолировано от боевого. Поэтому все тесты выполняются на копии базы данных с тестовыми данными.
Сравнение ручного и автоматического тестирования
| Критерий | Ручное тестирование | Автоматическое тестирование |
|---|---|---|
| Время регресса | 4–8 часов | 10–15 минут |
| Периодичность | После каждого релиза | При каждом коммите |
| Вероятность ошибки | Высокая (человеческий фактор) | Низкая (воспроизводимость) |
| Стоимость одного цикла | Высокая (трудозатраты) | Низкая (серверное время) |
| Поддержка обновлений | Требуется ручная перепроверка | Автоматический запуск, правка 1–3 тестов |
Автоматизация окупается за 2–3 месяца.
Типичные этапы разработки системы тестирования
| Этап | Длительность | Результат |
|---|---|---|
| Аудит кода и архитектуры | 1–2 дня | Список модулей для покрытия |
| Настройка bootstrap и инфраструктуры | 1–2 дня | Рабочее тестовое окружение |
| Рефакторинг для внедрения зависимостей | 3–5 дней | Тестируемый код |
| Unit-тесты для бизнес-логики | 5–10 дней | Набор стабильных unit-тестов |
| Функциональные тесты (Codeception) | 3–5 дней | Проверка HTTP-сценариев |
| E2E-тесты (Playwright) | 3–5 дней | Покрытие критических путей |
| Интеграция в CI/CD | 1–2 дня | Автоматический запуск при пуше |
| Документация и обучение | 1–2 дня | Готовность команды к поддержке |
Что входит в разработку системы тестирования
- Аудит текущего кода и выделение тестируемых модулей.
- Настройка bootstrap-окружения PHPUnit для загрузки Битрикс в тестовом режиме.
- Рефакторинг кода для внедрения зависимостей и тестируемости.
- Написание unit-тестов для ключевой бизнес-логики.
- Настройка Codeception для функциональных тестов HTTP-сценариев.
- E2E тесты на Playwright для критических пользовательских путей.
- Интеграция в CI/CD (GitHub Actions, GitLab CI).
- Документация и обучение команды.
Мы гарантируем стабильность тестов при обновлениях ядра. Сертифицированные специалисты с опытом 5+ лет и более 30 проектов по автоматизации Битрикс.
Готовы автоматизировать тестирование вашего Битрикс-проекта? Свяжитесь с нами — оценим проект бесплатно и предложим решение под ключ. Получите консультацию прямо сейчас.







