Тестирование проектов на 1С-Битрикс
CIBlockElement::GetList и пагинация — баг, который живёт годами
Классический кейс: на сайте каталог с пагинацией через компонент bitrix:catalog.section. Заказчик жалуется — на третьей странице дублируются товары. Лезешь в кеш компонента, чистишь — вроде ок. Через день снова. Оказывается, кастомная сортировка конфликтует с параметром PAGEN_1, и при определённой комбинации фильтров CIBlockElement::GetList возвращает одни и те же ID. Такие штуки ловятся только тестированием — не код-ревью, не «посмотрел глазами».
Мы выстраиваем QA-процесс под проекты на 1С-Битрикс: ручное функциональное, автоматизированные E2E, нагрузка и приёмочное тестирование.
Почему на Битриксе тестирование критично
Проекты на 1С-Битрикс — не лендинги. Под капотом — десятки модулей, интеграции и неочевидные зависимости:
-
Цепочки в бизнес-логике — поправил расчёт скидок в
sale.discount, а промокод черезsale.basket.discountперестал применяться. Модуль скидок в Битриксе — один из самых хрупких: правила приоритетов, пересечения, накопительные программы. Одна правка — каскад сбоев. -
Интеграция с 1С — обмен через
catalog.import.1cили REST. Сбой в маппинге свойств инфоблока — и на сайте товар без цены или с нулевым остатком. Рассинхронизация заказов — потерянные продажи. -
Обновления ядра —
bitrix:mainобновился, а кастомный компонент использовал deprecated-методCModule::IncludeModuleс нестандартными параметрами. Без регрессии — русская рулетка. -
Мультибраузерность —
bitrix:sale.order.ajaxрендерит формы по-разному в Safari и Chrome. Кнопка «Оформить заказ» на iPhone может уехать за пределы экрана.
Функциональное тестирование
Проверяем каждый бизнес-сценарий. Не «работает-не работает», а все граничные случаи.
Каталог (компоненты catalog.section, catalog.element):
- Умный фильтр
catalog.smart.filter: все комбинации свойств, сброс, подсчёт результатов. Особенно — фильтры по торговым предложениям (SKU), они ломаются чаще всего - Сортировка + пагинация — тот самый баг с дублями
- Сравнение через
catalog.compare.list— добавление, удаление, отображение различий - Быстрый просмотр — модальное окно, корзина из модалки
Корзина и заказ (sale.basket.basket, sale.order.ajax):
- Добавление из каталога, из карточки, быстрый заказ
- Скидки: по количеству, по сумме, по купону, по накопительной. Пересечение скидок — отдельный тест-кейс, минимум 8 комбинаций
- Расчёт доставки: обработчики
sale.delivery.services, стоимость, сроки, ПВЗ на карте - Оплата:
sale.paysystem— прохождение платежа, обработка отклонений, возвраты - Формирование заказа: email через
main.mail.event, запись в CRM, передача в 1С черезsale.export.1c
Личный кабинет (sale.personal.section):
- Регистрация, авторизация, восстановление пароля — включая edge-case с кириллическим email
- История заказов, повторный заказ
- Подписки, бонусная программа
Формы и поиск:
-
form.result.new/iblock.element.add.form— отправка, валидация, файловые поля -
search.page— релевантность, морфология, обработка опечаток черезsearch.title
Регрессионное тестирование
После каждого деплоя — один вопрос: не сломали ли то, что работало?
- Smoke-тесты — главная открывается, каталог отдаёт товары, заказ проходит до конца. 5 минут, запускаем после каждого деплоя. Если smoke упал — откатываем, не разбираясь.
- Регрессионный набор — 40–80 тест-кейсов по основным сценариям. Перед каждым релизом.
- Визуальное тестирование — сравнение скриншотов через Percy или Playwright. Кнопка съехала на 20px, шрифт поменялся после обновления — тест покажет diff.
-
Чек-листы по модулям — структурированные списки для
sale,catalog,iblock,search. Каждый модуль — свой чек-лист.
Нагрузочное тестирование
Вопрос не «выдержит ли сайт», а «при скольких одновременных пользователях catalog.section начнёт отдавать 500-ку».
Профиль нагрузки для магазина на Битрикс:
| Сценарий | Доля | Целевой отклик | Что ломается первым |
|---|---|---|---|
| Главная | 20% | < 1 сек | Композитный кеш, если не настроен |
| Каталог с фильтрами | 30% | < 2 сек | MySQL — тяжёлые JOIN по b_iblock_element_property |
| Карточка товара | 25% | < 1.5 сек | Запросы к торговым предложениям |
| Добавление в корзину | 10% | < 1 сек | Блокировки таблицы b_sale_basket |
| Оформление заказа | 5% | < 3 сек | Обработчики доставки (внешние API) |
| Поиск | 10% | < 2 сек | b_search_content без индексов |
Инструменты:
- k6 — JavaScript-сценарии, легко моделировать бизнес-логику корзины и чекаута
- Apache JMeter — классика, подходит для сложных сценариев с cookie-авторизацией
- Яндекс.Танк — визуализация в реальном времени, интеграция с Overload
На выходе: максимальный RPS, время отклика по перцентилям p50/p95/p99, узкие места (CPU, RAM, MySQL slow queries на b_iblock_element, файловый кеш). Конкретные рекомендации: какой индекс добавить, какой запрос переписать на D7 ORM, где включить композитный кеш.
Кроссбраузерное тестирование
Проверяем там, где реально сидят покупатели. Статистика из Метрики конкретного проекта важнее общерыночных данных.
Минимальный набор:
- Chrome (последние 2 версии) — основная масса трафика
- Safari на iOS — критично для мобильного checkout,
sale.order.ajaxчасто ведёт себя непредсказуемо - Яндекс.Браузер — заметная доля в РФ, рендеринг на Chromium, но есть нюансы с расширениями
- Samsung Internet — мобильные Android, про него забывают
Устройства:
- Desktop: 1920x1080, 1366x768
- iPhone: 375x812, 390x844 — обязательно проверять чекаут
- Android: 360x800, 412x915
Инструменты: BrowserStack для реальных устройств, Playwright для автоматизации в Chromium/Firefox/WebKit.
Автоматизация
Playwright — основной выбор для E2E на Битриксе:
- Кроссбраузерность: Chromium, Firefox, WebKit
- Параллельный запуск, автоматические ожидания
- Хорошо работает с динамическими формами
sale.order.ajax - Поддержка мобильных viewport и геолокации
Cypress:
- Работает в браузере — стабильнее для SPA-подобных интерфейсов
- Отличный визуальный runner для отладки
- Ограничение: только Chromium-based браузеры
PHPUnit для кастомного кода:
- Модульные тесты для кастомных компонентов и модулей Битрикс
- Тестирование бизнес-логики без зависимости от фронтенда
- Интеграция с CI/CD — GitLab CI, GitHub Actions
UAT — приёмочное тестирование
Финальная проверка с заказчиком на staging-окружении с актуальными данными:
- Совместно составляем список критических сценариев — не 200 тест-кейсов, а 15–20 ключевых путей покупателя
- Staging с копией продовой базы (обезличенные персональные данные)
- Оперативная фиксация багов — Jira/YouTrack, приоритизация по критичности
- Протокол приёмки — документ с результатами, подписи, готовность к запуску
QA-процесс
Тестирование встроено в разработку, не приклеено в конце:
- Анализ требований — QA участвует в обсуждении задач, ловит неоднозначности. «Скидка применяется к товару или к заказу?» — такой вопрос на старте экономит два дня отладки
- Тест-кейсы до разработки — сценарии готовы до первой строки кода
-
Code review — проверка на типичные ошибки Битрикса: неочищенный кеш компонентов, прямые SQL-запросы вместо ORM, отсутствие проверки
$USER->IsAuthorized() - Функциональное → регрессионное → деплой
-
Мониторинг после релиза — ошибки в
bitrix/error.log, метрики в Метрике, алерты по 500-м
Сроки
| Задача | Сроки |
|---|---|
| Тест-план | 2–3 дня |
| Функциональное тестирование (средний магазин) | 3–5 дней |
| Базовый набор E2E-автотестов (Playwright) | 2–3 недели |
| Нагрузочное тестирование + отчёт | 1–2 недели |
| Кроссбраузерное | 2–3 дня |
| UAT-сопровождение | 3–5 дней |
| QA-процесс с нуля | 3–4 недели |
Баг на продакшене — это не только стоимость исправления. Это потерянные заказы, пока баг живёт. На проекте с оборотом 5 млн/мес сломанная корзина за выходные — потери, которые не покроет никакой бюджет на тестирование.







