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

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

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

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • 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
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Розробка системи автоматичного тестування для 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)