VC LABБаза знанийТестирование оплаты

Тестирование оплаты: чек-лист, в котором нет «оплатить и посмотреть»

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

Успешные сценарии

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

Отказы и граничные случаи

Именно здесь живут дефекты, которые превращаются в двойные списания, зависшие заказы и споры с пользователями. Для каждого способа оплаты проходим один и тот же набор: отказ, отмена, таймаут, повтор.

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

Вебхуки, возвраты и сверка

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

Как проверять без потери денег

  1. Тестовый режим шлюза с тестовыми картами и сценариями отказов — для большинства проверок.
  2. Минимальные реальные суммы по согласованному протоколу — для сценариев, которые тестовый режим не воспроизводит: конкретные банки, кошельки, рассрочка.
  3. Эмуляция таймаутов и разрывов сети на стороне клиента — через прокси вроде Charles или ограничение сети на устройстве.
  4. Логи шлюза и продукта по каждому сценарию — для сверки того, что увидел пользователь, с тем, что произошло на самом деле.
Результат: регрессионный набор по оплате, который прогоняется перед каждым релизом, трогающим корзину, оплату или интеграции.

Отдельно для стран региона

В Казахстане, Узбекистане, Беларуси и других странах СНГ оплата идёт через локальные системы — Kaspi, Click и Payme, ЕРИП, Элкарт, m10 — у каждой свой тестовый режим, свои таймауты и своё поведение при отказе. Набор сценариев тот же, но прогонять его нужно на каждой системе отдельно и на устройствах с SIM-картами страны: часть кошельков и банковских приложений доступна только с местных номеров.

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

Достаточно ли тестового режима шлюза?
Для логики продукта — да. Для поведения конкретных банков, кошельков и рассрочки — нет: их тестовые режимы либо отсутствуют, либо не воспроизводят таймауты и отказы. Эти сценарии проходим на минимальных реальных суммах с последующим возвратом.
Как проверить двойное списание?
Повторным нажатием на кнопку, возвратом в приложение после таймаута, повторной доставкой вебхука и обновлением страницы в момент редиректа. Затем сверка: один заказ, одно списание, один вебхук обработан.
Нужно ли тестировать оплату после каждого релиза?
После релизов, которые трогают корзину, оплату, интеграции или обновляют SDK шлюза, — обязательно. Регрессия оплаты обычно укладывается в несколько часов, и это дешевле одного дня неработающей кнопки.
Что делать с найденными расхождениями при сверке?
Каждое расхождение — отдельный дефект с данными заказа и ответом шлюза. Расхождения в сверке почти всегда указывают на ошибку обработки вебхуков или статусов, а не на сам шлюз.

Расскажите о задаче

Ответим в течение одного рабочего дня, оценку пришлём за 1–2 дня. Бесплатно.

Обновлено: 2026-10-02