Почему Тестирование Биллинга Критически Важно
Баги биллинга имеют прямое финансовое влияние. Некорректный расчёт proration, который перевзимает $5 с пользователей, умноженный на 10,000 подписчиков — это $50,000 потенциальных возвратов плюс ущерб доверию и риск оттока.
Подписной биллинг — одна из самых сложных областей тестирования, так как включает логику, зависящую от времени, интеграцию с платёжными провайдерами, расчёты налогов и множество переходов состояний.
Жизненный Цикл Подписки
Каждый переход — это тестовый сценарий.
Ключевые Области Тестирования
Пропорциональное Начисление (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-дневный trial | Trial начинается, без списаний |
| 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 |
| 2 | Upgrade до Pro ($29/мес) 16 января | Proration: ($29-$10) × (15/31) = $9.19 |
| 3 | Preview следующего счёта | $29 на 1 февраля |
| 4 | Downgrade до 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 автоматически конвертировался в платный план без явного действия пользователя.
Лучшие Практики
- Используйте манипуляцию временем — Stripe test clocks для симуляции хода времени
- Тестируйте полные платёжные потоки — Всегда проходите через весь UI, не только API-вызовы
- Проверяйте счета — Каждая транзакция должна генерировать корректный счёт
- Тестируйте работу с валютами — Если приложение поддерживает несколько валют
- Документируйте расчёты — Показывайте математику для proration и налогов
Ключевые Выводы
- Тестирование биллинга требует проверки каждого перехода состояния в жизненном цикле
- Proration — наиболее сложная расчётная область, проверяйте математику для каждого изменения
- Всегда тестируйте с тестовыми картами платёжного провайдера
- Dunning-потоки критичны для восстановления доходов
- Расчёты налогов различаются по юрисдикциям и должны корректно отображаться в счетах
- Отмена не должна вступать в силу до конца оплаченного периода