Настройка 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для инициализации окружения Битрикс, авторизации пользователя и работы с корзиной/заказами черезСSaleAPI. - Набор базовых тестов: проверка авторизации, добавление товара в корзину, создание заказа.
- Интеграция с 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 и получите надёжный фундамент для автоматизации тестирования.







