Настройка 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 и получите надёжный фундамент для автоматизации тестирования.







