Налаштування Codeception-тестів для 1С-Бітрікс
Ми стикалися з ситуаціями, коли інтернет-магазин на Бітрікс працював роками без жодного автотесту. Кожне оновлення каталогу або платіжного модуля перетворювалося на ручну перевірку сотень сценаріїв. Клієнти скаржилися на баги в кошику, а розробники боялися змінювати legacy-код. Рішення — впровадити Codeception. Це PHP-фреймворк, який об'єднує unit, functional та acceptance (E2E) тести в одному інструменті. Для Бітрікс він особливо зручний: можна писати functional-тести, що перевіряють PHP-логіку без браузера, та acceptance-тести через WebDriver — все в одному стеку, з одними хелперами та єдиним конфігом.
Чому Codeception для Бітрікс?
Чому саме Codeception, а не класичний PHPUnit? PHPUnit чудово підходить для unit-тестів, але для інтеграційних та acceptance-сценаріїв він вимагає написання додаткової інфраструктури. Codeception надає готові модулі: Db для перевірок бази даних, WebDriver для браузера, PHPBrowser для емуляції HTTP. А головне — модульну архітектуру, в яку ми вбудовуємо власний хелпер для Бітрікс. Цей хелпер ініціалізує інфоблоки, кошик, замовлення через Sale API. Порівняння: один functional-тест на Codeception виконується за 2 хвилини замість 30 хвилин ручної перевірки — в 15 разів швидше. Наша практика показує, що регресійне тестування скорочується на 30-50% після впровадження.
Що входить у налаштування?
Ми віддаємо готовий результат, який можна одразу запустити:
- Конфігурація
codeception.ymlз трьома суїтами: acceptance, functional, unit. - Хелпер
Bitrix.phpдля ініціалізації середовища Бітрікс, авторизації користувача та роботи з кошиком/замовленнями черезCSaleAPI. - Набір базових тестів: перевірка авторизації, додавання товару в кошик, створення замовлення.
- Інтеграція з CI/CD (GitLab CI / GitHub Actions) — приклад
.gitlab-ci.yml. - Документація щодо запуску та додавання нових тестів.
- Консультація команди з підтримки тестів протягом 2 тижнів після здачі.
Як Codeception інтегрується з CI/CD?
Ми налаштовуємо запуск тестів у вашому середовищі безперервної інтеграції. Для GitLab CI додається джоба, яка запускає vendor/bin/codecept run після деплою на тестовий стенд. Приклад конфігурації:
# .gitlab-ci.yml codeception: stage: test script: - composer install --no-progress - cp .env.testing .env - php vendor/bin/codecept run only: - develop Для GitHub Actions аналогічно. Тести виконуються в headless-режимі, без реального браузера для functional-суїти, та з WebDriver для acceptance. Інтеграція займає не більше дня та гарантує, що кожен пуш перевіряється автоматично.
Як ми налаштовуємо Codeception?
Процес складається з п'яти етапів. На першому ми аналізуємо ваш проєкт: версію Бітрікс, структуру каталогу, використовувані модулі (sale, catalog, iblock). Потім встановлюємо пакети через Composer та налаштовуємо codeception.yml. Найважливіший етап — написання хелпера для Бітрікс. Він має коректно підключати пролог, уникати конфліктів з сесіями та статичними файлами. Ми використовуємо константи NO_KEEP_STATISTIC, NOT_CHECK_PERMISSIONS, BX_WITH_ON_AFTER_EPILOG — це типові рішення з документації Бітрікс. Потім пишемо кілька тестів на критичний функціонал: каталог, кошик, оформлення замовлення. Фінальний етап — інтеграція з CI/CD, щоб тести запускалися автоматично при кожному пуші.
Приклад: функціональний тест замовлення
Ось як виглядає functional-тест на створення замовлення через Sale API. Він використовує хелпер для авторизації та додавання товару в кошик:
// tests/Functional/OrderCest.php namespace Tests\Functional; use Tests\Support\FunctionalTester; class OrderCest { public function _before(FunctionalTester $I): void { // Очищаємо кошик перед кожним тестом $I->executeQuery('DELETE FROM b_sale_basket WHERE FUSER_ID = ?', [1]); } public function addItemAndCreateOrder(FunctionalTester $I): void { // Додаємо товар у кошик через хелпер $I->loginAs('testuser', 'testpassword'); $count = $I->addProductToCart(42, 2); // товар ID=42, 2 штуки $I->assertEquals(1, $count, 'У кошику має бути 1 товар'); // Створюємо замовлення через Sale API $I->executeCustomAction(function () { \Bitrix\Main\Loader::includeModule('sale'); $basket = \Bitrix\Sale\Basket::loadItemsForFUser(1, 's1'); $order = \Bitrix\Sale\Order::create('s1', 1); // сайт, користувач $order->setBasket($basket); $order->setField('CURRENCY', 'RUB'); $propertyCollection = $order->getPropertyCollection(); $prop = $propertyCollection->getPayerName(); $prop?->setValue('Тестовий Користувач'); $result = $order->save(); return $result; }, function ($result) use ($I) { $I->assertTrue($result->isSuccess(), implode(', ', $result->getErrorMessages())); }); // Перевіряємо, що замовлення створено в базі $I->seeInDatabase('b_sale_order', [ 'USER_ID' => 1, 'CURRENCY' => 'RUB', 'STATUS_ID' => 'N', ]); } } Acceptance-тест через WebDriver
Для перевірки UI використовуємо WebDriver з Chrome у headless-режимі. Приклад фільтрації за брендом у каталозі:
// tests/Acceptance/CatalogCest.php namespace Tests\Acceptance; use Tests\Support\AcceptanceTester; class CatalogCest { public function filterByBrandShowsCorrectProducts(AcceptanceTester $I): void { $I->amOnPage('/catalog/tools/'); $I->waitForElement('.catalog-filter', 10); // Застосовуємо фільтр за брендом $I->checkOption('[data-filter="brand"][value="bosch"]'); $I->waitForElementNotVisible('.catalog-loading', 10); // Перевіряємо URL $I->seeInCurrentUrl('brand=bosch'); // Перевіряємо, що всі картки — Bosch $I->seeNumberOfElementsGreaterThan('.product-card', 0); $brands = $I->grabMultiple('.product-brand'); foreach ($brands as $brand) { $I->assertEquals('Bosch', $brand); } } } Типові помилки при написанні тестів
- Використання
die()абоexit()у хелпері — це вбиває тест. - Ігнорування очищення бази даних після тестів: потрібно видаляти створені замовлення та кошики.
- Хардкод ID товарів і користувачів — краще створювати через фабрики.
- Запуск acceptance-тестів на продакшені — тільки на копії бази.
Порівняння типів тестів
| Тип тесту | Швидкість | Що перевіряє | Інструмент | Час написання |
|---|---|---|---|---|
| Unit | ~1 мс | Клас, метод | PHPUnit | 5-10 хв |
| Functional | ~100 мс | Бізнес-логіка, БД | Codeception + PHPBrowser | 30-60 хв |
| Acceptance | ~2 с | UI, JS, верстка | Codeception + WebDriver | 1-3 год |
Строки та процес
| Етап | Завдання | Строки |
|---|---|---|
| Аналіз | Вивчення проєкту, версій, залежностей | 1 день |
| Розробка | Встановлення Codeception, написання хелпера, конфігурація суїт | 1-2 дні |
| Написання тестів | Functional-тести для бізнес-логіки (замовлення, кошик, розрахунки) | 1-3 дні |
| Acceptance-тести | WebDriver-тести для каталогу, чекауту, авторизації | 2-4 дні |
| Інтеграція | Вбудовування в CI/CD, перевірка стабільності | 1 день |
| Документація | Інструкція для розробників, опис хелпера | 1 день |
Наші інженери мають 5+ років досвіду роботи з Бітрікс та Codeception. За цей час ми реалізували тестування для 30+ проєктів — від невеликих інтернет-магазинів до великих торгових порталів з навантаженням 50 000 товарів. Ми гарантуємо, що тести проходять у вашому середовищі без доопрацювань, і надаємо 2 тижні безкоштовної підтримки після здачі.
Хочете назавжди забути про ручний регрес? Зв'яжіться з нами — оцінимо проєкт і запропонуємо план впровадження за 1 день. Замовте налаштування Codeception та отримайте надійний фундамент для автоматизації тестування.







