Функциональное тестирование сайта на 1С-Битрикс
Функциональное тестирование — проверка того, что каждая функция сайта работает согласно требованиям. Звучит банально, но на Битрикс-проектах это систематически игнорируют: «клики по сайту» перед релизом не считаются тестированием. Без чёткого тест-плана, разбитого по модулям Битрикс, каждый раз что-то ускользает — чаще всего в корзине, поиске или в личном кабинете.
Тест-план по модулям
Функциональное тестирование Битрикс-проекта структурируют по ключевым модулям. Для каждого — набор обязательных проверок.
Каталог и инфоблоки (iblock):
- Корректность фильтрации по свойствам (
IBLOCK_PROPERTY, умный фильтр) - Работа сортировки по цене, популярности, новизне — проверяем SQL в
b_iblock_element - Пагинация без дублирования элементов на стыке страниц
- SEO-теги и мета-данные на страницах разделов и элементов
- Корректное отображение торговых предложений (SKU) для товаров с вариантами
Корзина и оформление заказа (sale):
- Добавление товара, изменение количества, удаление
- Применение купонов (
b_sale_discount_coupon) - Корректный пересчёт скидок при изменении состава корзины
- Выбор доставки и оплаты, сохранение выбора при перезагрузке
- Проверка ограничений на минимальную сумму заказа
- Создание заказа без регистрации (гость)
Личный кабинет (subscribe, sale, socialservices):
- Регистрация, авторизация, восстановление пароля
- История заказов, повторный заказ
- Редактирование профиля, смена email/пароля
- Авторизация через OAuth (ВКонтакте, Google, Яндекс)
Поиск (search):
- Полнотекстовый поиск — результаты, релевантность
- Морфология (русский язык, стемминг)
- Поиск с опечаткой — если подключён модуль «Морфологический поиск»
- Отсутствие результатов — корректная страница «ничего не найдено»
Технические проверки
Ряд проверок нельзя выполнить только кликами — нужен доступ к базе и логам.
Проверка дублирования элементов на листинге. При использовании нескольких инфоблоков через CIBlockElement::GetList с JOIN по торговым предложениям часто появляются дубли. Проверяют запросом:
SELECT ie.id, COUNT(*) as cnt
FROM b_iblock_element ie
JOIN b_catalog_price cp ON cp.product_id = ie.id
WHERE ie.iblock_id = 5
GROUP BY ie.id
HAVING COUNT(*) > 1;
Проверка работы умного фильтра. После изменения свойств товаров или добавления новых элементов умный фильтр может показывать устаревшие данные. Проверяют перестройку индекса:
// Принудительный пересчёт фасетного индекса
\Bitrix\Iblock\PropertyIndex\Manager::markAsInvalid($iblockId);
\Bitrix\Iblock\PropertyIndex\Manager::updateIndex($iblockId);
Проверка событий заказа. После оформления тестового заказа проверяем наличие нужных событий в b_sale_order_change_data и корректность отправленных email-уведомлений через /bitrix/admin/mail_event_message_list.php.
Инструменты
Для автоматизации функциональных тестов на Битрикс чаще всего используют:
- Playwright — для end-to-end тестов браузерного флоу (корзина, оформление)
- PHPUnit — для unit-тестов компонентов и хелперов
- Postman / Bruno — для тестирования REST API (если проект использует кастомный API)
Базовый e2e-тест оформления заказа на Playwright:
test('checkout flow', async ({ page }) => {
await page.goto('/catalog/product-slug/');
await page.click('[data-role="add-to-cart"]');
await page.goto('/cart/');
await expect(page.locator('.cart-item')).toHaveCount(1);
await page.click('[data-role="checkout"]');
await page.fill('#phone', '+79001234567');
await page.fill('#email', '[email protected]');
await page.selectOption('#delivery', 'pickup');
await page.click('[type="submit"]');
await expect(page).toHaveURL(/\/personal\/order\/detail\//);
});
Сроки
| Объём проекта | Срок |
|---|---|
| Landing / сайт-визитка (базовый функционал) | 1–2 дня |
| Интернет-магазин (каталог + корзина + ЛК) | 3–6 дней |
| Крупный e-commerce (несколько сайтов, b2b, интеграции) | 8–15 дней |







