БесплатноБесплатный аудит сайта и кода на 1С-Битрикс при заказе доработки или поддержки

Автотесты для критичных сценариев магазина (E2E)

E2E-автотесты критичных сценариев интернет-магазина на 1С-Битрикс: корзина, оформление, оплата

Релиз выкатили в пятницу, а в понедельник выясняется, что кнопка «Оформить заказ» неделю не работала — и никто не заметил, пока не упали продажи. Классическая история магазина без автотестов: каждое изменение — это лотерея, потому что вручную проверять весь путь оформления после каждой правки невозможно, а именно там теряются деньги.

Эта статья — о том, как покрыть E2E-автотестами критичные сценарии магазина на 1С-Битрикс: корзину, оформление, оплату и обмен с 1С, чтобы релизы не ломали продажи. Разберём, что тестировать в первую очередь, как проверять оплату без реальных платежей и как встроить тесты в CI. Организовать процессы вокруг этого помогает аудит и оптимизация.

Коротко

  • E2E-тесты проверяют сценарий целиком глазами пользователя: от каталога до оплаты — и ловят поломки, которые видит покупатель.
  • Покрывать в первую очередь критичный путь: корзину, оформление, оплату, авторизацию и повторный заказ.
  • Оплату и обмен с 1С тестируют на песочницах, а не на боевых реквизитах и учётной системе.
  • Тесты запускают в CI на staging перед выкаткой, чтобы регресс ловился до боя, а не на нём.

Почему магазину нужны автотесты

Магазин — это система, где ломается незаметно самое дорогое. Ошибка в оформлении или оплате не выдаёт себя баннером «всё сломалось» — покупатель просто не может завершить заказ и уходит. Пока проблему заметят по проседанию выручки, могут пройти дни, а деньги уже потеряны.

Ручное тестирование не спасает от регресса: проверять один и тот же путь оформления после каждого релиза вручную дорого и ненадёжно — человек устаёт, торопится и пропускает. Автотесты решают именно эту задачу: они прогоняют критичные сценарии за минуты, одинаково внимательно каждый раз, и сигнализируют о поломке до того, как её увидит клиент. Это не замена ручному QA, а его дополнение на самом важном участке.

Что такое E2E и где его место

Тесты бывают разного уровня, и для магазина важно понимать, какой что даёт.

Тип тестаЧто проверяетЦенность для магазина
Юнит-тестОтдельную функцию в изоляцииЛогику расчётов, скидок
ИнтеграционныйСвязку компонентовОбмен, API, интеграции
E2EСценарий целиком в браузереКритичный путь покупателя

E2E (end-to-end) гоняет реальный браузер по настоящему интерфейсу: открывает каталог, добавляет товар, оформляет и оплачивает — ровно как это делает покупатель. Именно поэтому для магазина он самый ценный: ловит поломки, которые видит клиент, даже если каждая функция по отдельности «работает». Юнит- и интеграционные тесты дополняют его снизу, но начинать стоит с E2E критичных путей.

Пайплайн релиза: от кода до мониторинга Кодветка, коммитТестыавтопроверкиСборкаартефактДеплойна боевойМониторингошибки, метрики
Схема: каждое изменение проходит автотесты и сборку, безопасно выкатывается на боевой сервер, а мониторинг сразу показывает ошибки и метрики — откат под рукой.

Какие сценарии критичны

Автоматизировать всё сразу — верный способ утонуть. Приоритет расставляют по деньгам: сначала то, что, сломавшись, останавливает продажи.

  1. Добавление в корзину. Товар из каталога и карточки попадает в корзину с верной ценой и количеством.
  2. Оформление заказа. Заполнение данных, выбор доставки и оплаты, создание заказа.
  3. Оплата. Переход к платежу и корректный статус заказа после него.
  4. Авторизация и профиль. Вход, регистрация, подстановка сохранённых данных.
  5. Повторный заказ. Наполнение корзины из истории для постоянных клиентов.

Это критичный путь выручки. Второстепенные функции — фильтры, сортировки, вспомогательные формы — покрывают позже. Правило: сначала автоматизируйте то, что стоит денег при поломке, а не то, что проще всего протестировать.

Тестирование корзины и оформления

Корзина и оформление — сердце критичного пути, и здесь E2E-тест приносит максимум пользы. Хороший сценарий проходит весь путь и проверяет не только «дошёл до конца», но и корректность данных на каждом шаге.

Проверка граничных случаев особенно важна: именно на них магазины ломаются тише всего. Аккуратную серверную логику, которую проверяют такие тесты, удобно строить через D7 ORM, где поведение предсказуемо и легче тестируется.

Оплата на тестовом контуре

Оплату нужно тестировать, но без реальных денег. У почти всех платёжных провайдеров есть тестовый режим и песочница с фейковыми картами, где можно прогнать и успешный, и неуспешный платёж.

Правило безопасности: E2E-тесты оплаты гоняются только на тестовых платёжных реквизитах. Прогонять их на боевом шлюзе с реальными картами нельзя.

Сценарий такой: тест доходит до платёжной страницы, выполняет тестовый платёж и проверяет, что заказ получил правильный статус — «оплачен» при успехе, «ожидает оплаты» или «отменён» при неуспехе. Отдельно стоит проверить возврат покупателя на сайт после оплаты и корректную обработку колбэка от провайдера. Про безопасность интеграционного слоя, через который приходят такие уведомления, мы пишем в статье про REST, вебхуки и безопасность.

Проверка обмена с 1С

Обмен с 1С — одно из самых хрупких мест магазина: меняются форматы, ломаются выгрузки, расходятся остатки. Поэтому его проверка ценна, но её выносят на тестовый контур с песочницей 1С, а не на боевую учётную систему.

Полноценный E2E обмена сложнее браузерного теста, ближе к интеграционному. Но даже базовые проверки формата и доставки данных резко снижают риск «тихой» поломки обмена, которую иначе замечают только по расхождению остатков. Такую логику часто оформляют как отдельный модуль, который проще покрывать тестами.

Тестовые данные и изоляция

Автотесты создают заказы, регистрируют пользователей, меняют состояние — и если делать это на «живых» данных, тесты быстро загрязнят базу и начнут мешать друг другу. Поэтому важна изоляция тестовых данных.

Изоляция — то, что отличает набор тестов, которому доверяют, от набора, который «иногда падает непонятно почему». Запускают их на staging или отдельном стенде, похожем на бой, но с тестовыми реквизитами. Про организацию таких окружений — в разборе staging-окружения и деплоя.

Автотесты в CI и деплое

Тесты приносят пользу, только когда запускаются автоматически и вовремя — до выкатки на бой. Место им в конвейере CI/CD: при каждом изменении перед деплоем прогоняются критичные сценарии, и если что-то сломалось, релиз останавливается.

  1. Триггер по изменению. Тесты запускаются при пуше и перед выкаткой.
  2. Прогон на стенде. Сценарии гоняются на staging с тестовыми реквизитами.
  3. Блокировка при падении. Красные тесты не пускают релиз на production.
  4. Понятный отчёт. Видно, какой сценарий и на каком шаге упал.

Так регресс ловится до боя, а не покупателем. Это замыкает картину надёжной разработки: код в git, окружения, деплой и тесты работают как единый механизм. Полный разбор конвейера — в статье про CI/CD и деплой в Битрикс.

Как не сделать тесты хрупкими

Главная причина, по которой команды бросают автотесты, — хрупкость: тесты падают от каждого пустяка, им перестают доверять, а потом отключают. Этого можно избежать дисциплиной написания.

Правильно написанный E2E-тест падает, когда реально что-то сломалось, а не когда дизайнер поменял отступ. Хрупкость — это следствие небрежности, а не неизбежное свойство E2E. Один надёжный тест ценнее десяти, которым не верят.

С чего начать внедрение

Соблазн «покрыть всё сразу» почти всегда заканчивается заброшенным набором хрупких тестов. Разумный путь — начать с малого и наращивать.

  1. Один сквозной сценарий. Путь от каталога до оплаты — самый важный.
  2. Надёжность. Довести этот тест до стабильного состояния, которому доверяют.
  3. Встроить в CI. Запускать автоматически перед выкаткой.
  4. Расширять по приоритету. Добавлять сценарии из списка критичных путей.

Так вы получаете пользу с первого рабочего теста и наращиваете покрытие управляемо. Это тот же принцип итеративности, что и в остальной разработке: маленький надёжный шаг лучше большого рискованного.

Частые ошибки

Чек-лист покрытия

  1. Критичный путь покрыт. Есть E2E на корзину, оформление и оплату.
  2. Оплата в песочнице. Тесты платежей идут на тестовых реквизитах.
  3. Обмен проверяется. Уход заказа и приход остатков тестируются на песочнице 1С.
  4. Данные изолированы. Тестовые товары и пользователи, очистка за собой.
  5. Запуск в CI. Тесты гоняются автоматически перед выкаткой.
  6. Красный блокирует релиз. Падение тестов останавливает деплой на бой.
  7. Тесты стабильны. Падают по делу, а не от правок вёрстки.
  8. Покрытие растёт. Сценарии добавляются по приоритету, а не хаотично.

Вывод

Автотесты критичных сценариев превращают релизы из лотереи в контролируемый процесс. E2E-тесты проходят путь покупателя от каталога до оплаты и ловят именно те поломки, которые стоят денег, — до того, как их увидит клиент. Для магазина это самый прямой способ перестать «узнавать о сломанной кнопке оформления по проседанию выручки».

Начинайте с одного надёжного сценария на критичном пути, тестируйте оплату и обмен на песочницах, изолируйте данные и запускайте тесты в CI перед выкаткой. Не гонитесь за полным покрытием сразу — один работающий тест ценнее сотни хрупких. Встроенные в разработку вместе с окружениями и деплоем, автотесты делают развитие магазина быстрым и спокойным, потому что каждый релиз проверяется машиной, а не надеждой.

Частые вопросы

Что такое E2E-тесты и чем они отличаются от юнит-тестов?

E2E (end-to-end) тесты проверяют сценарий целиком, глазами пользователя: открыть каталог, добавить товар в корзину, оформить заказ, оплатить. Они гоняют реальный браузер по настоящему интерфейсу. Юнит-тесты проверяют отдельные функции в изоляции. Для магазина важнее всего именно E2E критичных путей: они ловят поломки, которые видит покупатель, даже если каждая функция по отдельности «работает».

Какие сценарии магазина покрывать в первую очередь?

Те, где поломка стоит денег: добавление в корзину, оформление заказа, оплата, авторизация и повторный заказ. Это критичный путь, по которому идёт выручка. Второстепенные функции (фильтры, сортировки, второстепенные формы) покрывают позже. Правило простое: сначала автоматизируйте то, что, сломавшись, останавливает продажи, а не то, что проще всего протестировать.

Зачем автотесты, если есть ручное тестирование?

Ручное тестирование незаменимо для новых функций и сложных случаев, но плохо масштабируется на регресс: проверять один и тот же путь оформления после каждого релиза вручную дорого и ненадёжно — человек устаёт и пропускает. Автотесты прогоняют критичные сценарии за минуты, одинаково внимательно каждый раз, и ловят регрессию до того, как её увидит покупатель. Это дополнение к ручному QA, а не замена.

Как тестировать оплату, не проводя реальных платежей?

Через тестовые режимы платёжных провайдеров и песочницы. Почти у всех шлюзов есть тестовый контур с фейковыми картами, где можно прогнать успешную и неуспешную оплату без реальных денег. E2E-тест доходит до платёжной страницы, выполняет тестовый платёж и проверяет, что заказ получил правильный статус. Прогонять такие тесты на боевых платёжных реквизитах нельзя — только на тестовых.

Нужно ли тестировать обмен с 1С автотестами?

Обмен с 1С — одно из самых хрупких мест магазина, поэтому его проверка ценна, но её выносят на тестовый контур с песочницей 1С, а не на боевую учётную систему. Проверяют, что заказ корректно уходит в обмен, что приходят остатки и цены, что ошибки обрабатываются. Полноценный E2E обмена сложнее браузерного теста, но даже базовые проверки формата и доставки данных сильно снижают риск.

Где запускать автотесты — на каком окружении?

На staging или отдельном тестовом стенде, максимально похожем на боевой, но с тестовыми платёжными и обменными реквизитами. Запускать E2E на production опасно: тесты создают заказы и могут задеть реальные данные. Идеально — прогонять тесты автоматически в CI при каждом изменении перед выкаткой, чтобы регресс ловился до боя, а не на нём.

Не будут ли тесты постоянно «падать» из-за мелочей?

Хрупкость тестов — реальная проблема, если привязываться к нестабильным деталям вёрстки. Её снижают: тестируют по устойчивым признакам (data-атрибутам), а не по случайным классам; используют явные ожидания вместо пауз; изолируют тестовые данные. Хорошо написанные E2E-тесты падают, когда реально что-то сломалось, а не от каждого изменения стилей. Это вопрос дисциплины написания, а не неизбежность.

С чего начать, если тестов сейчас нет вообще?

С одного самого важного сценария — сквозного пути от каталога до оплаты. Написать один надёжный E2E-тест на критичный путь, встроить его в CI и убедиться, что он ловит поломки. Затем постепенно добавлять сценарии по приоритету. Пытаться сразу покрыть всё — частая ошибка, которая заканчивается заброшенным набором хрупких тестов. Лучше один работающий тест, чем сто, которым не доверяют.

Поделиться:

Хотите, чтобы релизы не ломали продажи?

Покроем E2E-тестами корзину, оформление и оплату, настроим проверку обмена с 1С и запуск тестов в CI перед выкаткой. Рассчитаем работу по вашему магазину.

Автоматизация на 1С

Игорь Воскресенский

Команда B2Bsite. С 2014 года разрабатываем интернет-магазины на 1С-Битрикс: E2E-автотесты критичных сценариев, проверка оплаты и обмена с 1С, запуск тестов в CI/CD.

← Все статьи блога