Ми пропонуємо послуги з автоматичного тестування 1С-Бітрікс, включаючи регресійне тестування Bitrix, тестування інтеграції з 1С, та використовуємо такі інструменти, як PHPUnit Бітрікс, Codeception Bitrix, Playwright Bitrix для юніт-тестів Bitrix, функціональних тестів Bitrix та e2e тестів Bitrix. Наші рішення з CI/CD для Бітрікс забезпечують швидку автоматизацію.
Оновлення ядра Бітрікс виходять кожні два тижні. Після кожного апдейту — ручне регресійне тестування на 4–8 годин. Інтеграція з 1С через CommerceML додає ризики. Ми автоматизуємо регрес як мінімум у 24 рази швидше: тести виконуються за 10–15 хвилин замість чотирьох годин. Автоматизоване тестування виконує регрес у 24 рази швидше, ніж ручне. За понад 8 років роботи ми автоматизували регрес для більш ніж 30 проектів. Без автоматизації проект втрачає до 20% бюджету на тестуванні. Середній бюджет на автоматизацію для проекту середнього розміру — $2,000–$5,000, а економія на регресі становить до 80%.
Чому Бітрікс вимагає особливого підходу до тестування
Головна проблема — монолітна архітектура. Всі компоненти зав'язані на глобальний стан: \Bitrix\Main\Application::getInstance(), \CMain, $DB. Юніт-тести неможливо запустити без ініціалізації ядра. Потрібна спеціальна інфраструктура. Другий момент — часті оновлення. Кожен апдейт може зламати інтеграцію з 1С або кастомні рішення. Третій — складність ізоляції. Без автоматизації кожен новий реліз — стрес. Ми вирішуємо ці проблеми за допомогою перевіреного стеку інструментів.
Стек інструментів
Для Бітрікс-проектів актуальна комбінація:
- PHPUnit — юніт-тести для ізольованої бізнес-логіки.
- Codeception — функціональні та інтеграційні тести (має модуль для Bitrix).
- Playwright — e2e тести браузерної поведінки.
- PHPStan — статичний аналіз (не тест, але частина CI).
Замовте розробку системи тестування вже сьогодні — це окупиться після двох оновлень.
Як налаштувати PHPUnit для Бітрікс
Головна проблема юніт-тестування Бітрікс — код залежить від глобального стану: \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> Що тестувати юніт-тестами
Бізнес-логіка, ізольована в класах без прямої залежності від ядра:
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 години. В результаті кожен коміт проходить перевірку: юніт-тести за 30 секунд, функціональні — за 3 хвилини, e2e — за 5–10 хвилин. При виявленні помилок збірка зупиняється, і розробник отримує сповіщення.
Згідно з документацією 1С-Бітрікс, тестове середовище має бути ізольоване від бойового. Тому всі тести виконуються на копії бази даних з тестовими даними.
Для детального ознайомлення з налаштуваннями конвеєра CI/CD використовуйте офіційну документацію GitHub Actions або GitLab CI.
Порівняння ручного та автоматичного тестування
| Критерій | Ручне тестування | Автоматичне тестування |
|---|---|---|
| Час регресу | 4–8 годин | 10–15 хвилин |
| Періодичність | Після кожного релізу | При кожному коміті |
| Ймовірність помилки | Висока (людський фактор) | Низька (відтворюваність) |
| Вартість одного циклу | Висока (трудозатрати) | Низька (серверний час) |
| Підтримка оновлень | Потрібна ручна перевірка | Автоматичний запуск, правка 1–3 тестів |
Автоматизація окупається за 2–3 місяці.
Типові етапи розробки системи тестування
Покроковий план:
- Аудит коду та архітектури.
- Налаштування інфраструктури та bootstrap.
- Рефакторинг для впровадження залежностей.
- Написання юніт-тестів для бізнес-логіки.
- Функціональні тести (Codeception).
- E2E-тести (Playwright).
- Інтеграція в CI/CD.
| Етап | Тривалість | Результат |
|---|---|---|
| Аудит коду та архітектури | 1–2 дні | Список модулів для покриття |
| Налаштування bootstrap та інфраструктури | 1–2 дні | Робоче тестове середовище |
| Рефакторинг для впровадження залежностей | 3–5 днів | Тестований код |
| Юніт-тести для бізнес-логіки | 5–10 днів | Набір стабільних юніт-тестів |
| Функціональні тести (Codeception) | 3–5 днів | Перевірка HTTP-сценаріїв |
| E2E-тести (Playwright) | 3–5 днів | Покриття критичних шляхів |
| Інтеграція в CI/CD | 1–2 дні | Автоматичний запуск при пуші |
| Документація та навчання | 1–2 дні | Готовність команди до підтримки |
Скільки коштує автоматизація тестування Бітрікс?
Вартість автоматизації залежить від обсягу проекту. Середній бюджет для проекту середнього розміру — $2,000–$5,000, а економія на регресі становить до 80%. Інвестиції окупаються за 2–3 місяці.
Що входить у розробку системи тестування
- Аудит поточного коду та виділення тестованих модулів.
- Налаштування bootstrap-середовища PHPUnit для завантаження Бітрікс у тестовому режимі.
- Рефакторинг коду для впровадження залежностей та тестованості.
- Написання юніт-тестів для ключової бізнес-логіки.
- Налаштування Codeception для функціональних тестів HTTP-сценаріїв.
- E2E тести на Playwright для критичних користувацьких шляхів.
- Інтеграція в CI/CD (GitHub Actions, GitLab CI).
- Документація та навчання команди.
Ми гарантуємо стабільність тестів при оновленнях ядра. Сертифіковані спеціалісти з досвідом 5+ років та більш ніж 30 проектів з автоматизації Бітрікс.
Готові автоматизувати тестування вашого Бітрікс-проекту? Зв'яжіться з нами — оцінимо проект безкоштовно та запропонуємо рішення під ключ. Отримайте консультацію прямо зараз.







