Почему Тестирование Биллинга Критически Важно

Баги биллинга имеют прямое финансовое влияние. Некорректный расчёт proration, который перевзимает $5 с пользователей, умноженный на 10,000 подписчиков — это $50,000 потенциальных возвратов плюс ущерб доверию и риск оттока.

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

Жизненный Цикл Подписки

stateDiagram-v2 [*] --> Trial: Регистрация Trial --> Active: Конвертация/Оплата Trial --> Expired: Trial истёк без оплаты Active --> PastDue: Платёж не прошёл PastDue --> Active: Платёж восстановлен PastDue --> Cancelled: Исчерпаны попытки Active --> Cancelled: Пользователь отменяет Cancelled --> Active: Повторная подписка Active --> Active: Upgrade/Downgrade Active --> Active: Продление

Каждый переход — это тестовый сценарий.

Ключевые Области Тестирования

Пропорциональное Начисление (Proration)

При смене плана в середине цикла:

СценарийОжидаемое поведение
Upgrade в середине циклаНемедленное списание пропорциональной разницы
Downgrade в середине циклаКредит на следующий биллинговый период
Upgrade в последний деньСписание почти полной цены нового плана
Downgrade в первый деньКредит почти полной суммы старого плана

Продления

  • Подписка продлевается в корректную дату
  • Списывается правильная сумма
  • Генерируется и отправляется счёт
  • Доступ продолжается без перерыва

Отмена

  • Отмена вступает в силу в конце биллингового периода
  • Доступ сохраняется до конца оплаченного периода
  • Пользователь может отменить отмену до конца периода
  • Email подтверждения отмены

Неудачные Платежи и Dunning

ДеньДействиеКоммуникация
0Платёж не прошёлEmail: «Платёж не удался, обновите карту»
3Первый повторEmail: «Вторая попытка не удалась»
7Второй повторEmail: «Требуется действие»
14Третий повторEmail: «Последнее уведомление»
21Отмена подпискиEmail: «Подписка отменена из-за неудачного платежа»

Расчёты Налогов

  • НДС/GST применяется корректно по местоположению клиента
  • Освобождённые от налога клиенты не облагаются
  • Сумма налога отображается в счетах

Упражнение: Набор Тестов Подписного Биллинга

Вы тестируете SaaS-приложение с тремя планами, используя Stripe.

Настройка Окружения

Тестовые карты Stripe:

Номер картыСценарий
4242 4242 4242 4242Успешный платёж
4000 0000 0000 0002Карта отклонена
4000 0000 0000 3220Требуется 3D Secure
4000 0025 0000 3155Недостаточно средств

Сценарий 1: Полный Жизненный Цикл

ШагДействиеОжидаемый результат
1Регистрация на 14-дневный trialTrial начинается, без списаний
2Проверка на 13-й деньEmail-напоминание: «Trial заканчивается завтра»
3Конвертация в Pro ($29/мес)Первое списание $29
4На 15-й день upgrade до Enterprise ($99/мес)Proration: ($99-$29) × (15/30) = $35
5Дождаться продленияСписание $99
6Отменить подпискуДоступ до конца периода

Сценарий 2: Восстановление Неудачного Платежа

ШагДействиеОжидаемый результат
1Подписаться с рабочей картойПодписка активна
2Обновить на карту отклоненияКарта обновлена
3Дождаться попытки продленияПлатёж не прошёл, статус «Past Due»
4Проверить dunning email«Обновите способ оплаты»
5Обновить на рабочую картуПовтор платежа, успех
6Проверить статусВернулся к «Active»

Сценарий 3: Расчёты Proration

ШагДействиеОжидаемый результат
1Подписка на Basic ($10/мес) 1 январяСписание $10
2Upgrade до Pro ($29/мес) 16 январяProration: ($29-$10) × (15/31) = $9.19
3Preview следующего счёта$29 на 1 февраля
4Downgrade до Basic 25 январяКредит: ($29-$10) × (6/31) = $3.68
5Следующий счёт$10 - $3.68 кредит = $6.32
Решение: Типичные Баги Биллинга

Баг 1: Ошибка proration на один день Proration рассчитывался включая день изменения, что приводило к переплате.

Баг 2: Отмена действует немедленно Пользователь отменяет на 5-й день оплаченного месяца и теряет доступ сразу.

Баг 3: Годовое продление по месячной цене Годовые подписки ($290/год) продлевались по месячному тарифу ($29/мес).

Баг 4: Dunning-письма после ручной отмены Пользователь отменил вручную, но получает письма «платёж не прошёл».

Баг 5: Налог начислен дважды при upgrade При upgrade в середине цикла налог рассчитывался и на полную цену, и на пропорциональную сумму.

Баг 6: Trial конвертируется без согласия Trial автоматически конвертировался в платный план без явного действия пользователя.

Лучшие Практики

  1. Используйте манипуляцию временем — Stripe test clocks для симуляции хода времени
  2. Тестируйте полные платёжные потоки — Всегда проходите через весь UI, не только API-вызовы
  3. Проверяйте счета — Каждая транзакция должна генерировать корректный счёт
  4. Тестируйте работу с валютами — Если приложение поддерживает несколько валют
  5. Документируйте расчёты — Показывайте математику для proration и налогов

Ключевые Выводы

  • Тестирование биллинга требует проверки каждого перехода состояния в жизненном цикле
  • Proration — наиболее сложная расчётная область, проверяйте математику для каждого изменения
  • Всегда тестируйте с тестовыми картами платёжного провайдера
  • Dunning-потоки критичны для восстановления доходов
  • Расчёты налогов различаются по юрисдикциям и должны корректно отображаться в счетах
  • Отмена не должна вступать в силу до конца оплаченного периода