Разработка системы автоматического тестирования для 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Услуги, которые мы предлагаем
Показано 1 из 1Все 1626 услуг
Разработка системы автоматического тестирования для 1С-Битрикс
Средний
~2-3 дня
Часто задаваемые вопросы

Наши компетенции:

Этапы разработки

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1330
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    924
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    672
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    815
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    714
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    1051

Обновления ядра Битрикс выходят каждые две недели. После каждого апдейта — ручное регрессионное тестирование на 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 проектов по автоматизации Битрикс.

Готовы автоматизировать тестирование вашего Битрикс-проекта? Свяжитесь с нами — оценим проект бесплатно и предложим решение под ключ. Получите консультацию прямо сейчас.