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

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Разработка системы автоматического тестирования для 1С-Битрикс
Средняя
~2-3 рабочих дня
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1177
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • 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
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    747
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

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

Обновление ядра Битрикс каждые две недели, постоянные доработки, интеграция с 1С — регрессионное тестирование вручную занимает 4–8 часов после каждого изменения. Автоматизированные тесты сокращают это до 10–15 минут и дают уверенность, что ключевой функционал работает. Сложность в том, что Битрикс — монолитный фреймворк с глобальным состоянием, который не любит тестовую изоляцию. Нужна специфическая инфраструктура.

Стек тестирования

Для Битрикс-проектов актуальна комбинация:

  • PHPUnit — unit-тесты для изолируемой бизнес-логики
  • Codeception — функциональные и интеграционные тесты (имеет модуль для Bitrix)
  • Playwright / Puppeteer — e2e тесты браузерного поведения
  • PHPStan — статический анализ (не тест, но часть CI)

Инфраструктура для unit-тестов

Главная проблема 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
    {
        // Мокаем зависимость от IBlock API
        $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));
    }
}

Ключевой паттерн: внедрение зависимостей вместо прямых вызовов статических методов Битрикс — это и делает код тестируемым.

Функциональные тесты с 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:

# .github/workflows/tests.yml
test:
  runs-on: ubuntu-latest
  steps:
    - uses: actions/checkout@v3
    - name: Setup PHP
      uses: shivammathur/setup-php@v2
      with:
        php-version: '8.1'
    - run: composer install
    - run: vendor/bin/phpunit --testsuite Unit
    - run: vendor/bin/codecept run functional
Тип теста Инструмент Время выполнения Покрытие
Unit (изолированная логика) PHPUnit 30–60 с Резолвинг, расчёты, маппинг
Функциональные Codeception 2–5 мин Корзина, заказ, формы
E2E Playwright 5–10 мин Критические пути пользователя
Статический анализ PHPStan 1–2 мин Весь PHP-код

Что входит в разработку системы тестирования

  • Настройка bootstrap-окружения PHPUnit для загрузки Битрикс в тестовом режиме
  • Рефакторинг кода для внедрения зависимостей и тестируемости
  • Написание unit-тестов для ключевой бизнес-логики
  • Настройка Codeception для функциональных тестов HTTP-сценариев
  • E2e тесты на Playwright для критических пользовательских путей
  • Интеграция в CI/CD (GitHub Actions, GitLab CI)