Use Cases

Тестирование CAPTCHA в собственных API расчёта доставки

Безопасный scope: руководство применимо только к собственным или явно авторизованным QA-, staging- и production-средам. Речь идёт о диагностике, тестировании и наблюдаемости вашей собственной CAPTCHA-интеграции — не о сторонних сайтах и не о несанкционированных workflow.

Тарифный калькулятор доставки считается протестированным, когда воспроизводятся четыре состояния: запрос без CAPTCHA, запрос с появившейся проверкой, запрос с валидным токеном и запрос с заведомо испорченным токеном. Если все четыре ветки стабильно отрабатывают на staging и дают предсказуемый ответ API, интеграция закрыта. Дальше в тексте — как получить эти прогоны воспроизводимо и как по логам понять, что именно сломалось после очередного релиза.

Почему калькулятор тарифов закрывают проверкой

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

Отсюда типичный конфликт, знакомый командам в Москве, Минске и Алматы, которые считают трансграничную доставку сразу по нескольким направлениям: партнёрский интерфейс легально опрашивает ваш же калькулятор пачкой по 30–40 направлений за раз, упирается в порог и получает проверку там, где её не ждали. QA должен подтвердить обе стороны договорённости — что защита включается на всплеске и что она не выпадает легитимному клиенту на обычной нагрузке.

Отдельная строка в тест-плане — данные. В staging-прогонах используйте фиктивные адреса и обезличенные габариты: реальные адресные данные получателей попадают под 152-ФЗ «О персональных данных», и тестовому контуру они не нужны.

Матрица тестовых сценариев

Сценарий Что подаётся Ожидаемый ответ API
Одиночный расчёт Обычный запрос, проверка не сработала 200, тарифы в теле ответа
Всплеск параллельных запросов Серия запросов выше порога Форма отдаёт CAPTCHA, расчёт не выполняется
Валидный токен Токен от CaptchaAI в поле формы 200, расчёт продолжается
Испорченный токен Обрезанная или чужая строка 4xx с понятным кодом ошибки, без 5xx
Повторная отправка Тот же токен второй раз Отказ: токен одноразовый

Последняя строка чаще всего и вскрывает дефект: бэкенд проверяет наличие поля, но не проверяет, что токен ещё не был погашен.

Прогон на staging с CaptchaAI

Все сценарии выполняются на собственной копии API. Схема одна и та же: тест забирает sitekey со страницы формы, отправляет задачу в CaptchaAI, опрашивает res.php, подставляет полученный токен в поле формы (g-recaptcha-response для reCAPTCHA v2, cf-turnstile-response для Turnstile) и отправляет расчёт. Подробный разбор обоих вызовов — в руководствах по reCAPTCHA v2 через API и Cloudflare Turnstile через API; если ваш калькулятор закрыт GeeTest v3, порядок шагов тот же — см. GeeTest v3 через API.

Тарификация считается не по количеству прогонов, а по числу одновременных задач: тариф BASIC ($15/мес, 5 потоков) закрывает ночной регресс одного сервиса, ADVANCE ($90/мес, 50 потоков) — параллельный прогон матрицы направлений в CI. Выставляйте потоки под пиковую параллельность пайплайна, а не под суммарное число сценариев.

Логи и наблюдаемость

Структурированные логи позволяют сравнивать поведение CAPTCHA между релизами и быстро находить регрессии в собственных формах:

import json, time, logging

log = logging.getLogger('captcha-qa')

def record(event: str, **fields) -> None:
    payload = {'ts': time.time(), 'event': event, **fields}
    log.info(json.dumps(payload, ensure_ascii=False))

Минимальный набор полей для каждой попытки: slug, captcha_type, task_id, wait_seconds, verify_status, env. Этого достаточно, чтобы построить дашборд медианы, P90 и P99 по типу CAPTCHA и по среде.

Смотреть на медиану имеет смысл только вместе с хвостом распределения. Медиана держится ровно, а P99 уезжает — обычно это не CAPTCHA, а тайм-аут многошаговой формы расчёта. Второй полезный срез — доля попыток, где токен получен, но бэкенд его отклонил: рост этой доли почти всегда означает рассинхрон pageurl между тестом и реальным адресом формы.

Типичные сбои и что проверять

Симптом Что сделать
Расчёт падает с 5xx Проверьте лимиты staging и размер тестовой пачки
CAPTCHA не появляется вовсе Снизьте порог срабатывания в staging-конфиге
Токен получен, но не принят Сверьте pageurl и sitekey с реальной страницей формы
Дубли расчётов в отчёте Включите идемпотентный ключ на запрос
Тайм-аут ожидания решения Расширьте окно опроса и добавьте экспоненциальную задержку

Чек-лист перед мержем

  • Запросы уходят только на собственные или явно авторизованные endpoints.
  • Тестовые учётные записи, отправления и платежи помечены как фиктивные.
  • CAPTCHA-токен проверяется на собственном backend, а не принимается на доверии от клиента.
  • Логи содержат task_id, тип CAPTCHA, время ожидания и результат pass/fail.
  • Прогон возвращает корректный exit code, чтобы CI мог принять решение сам.
  • Ветка с испорченным токеном даёт 4xx, а не падение сервиса.

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

Сколько потоков нужно для ночного регресс-прогона?

Считайте по пиковой параллельности, а не по общему числу сценариев. Если CI гоняет восемь направлений одновременно, восьми потоков достаточно: BASIC ($15/мес, 5 потоков) закрывает небольшой набор тестов, ADVANCE ($90/мес, 50 потоков) — матрицу направлений в несколько параллельных job.

Какие типы проверок закрываются на тарифных формах?

Из того, что реально встречается на калькуляторах доставки, поддерживаются reCAPTCHA v2 и v3, Cloudflare Turnstile, GeeTest v3 и image/OCR-проверки. hCaptcha и FunCaptcha в этот список не входят, GeeTest v4 — пока в разработке.

Как отличить регрессию от разового флака?

Сравнивайте сопоставимые выборки: тот же набор направлений, та же среда, то же число попыток. Разовый флак виден как одиночный выброс в P99 при неизменной медиане; регрессия сдвигает медиану и долю verify_status=fail одновременно.

Можно ли гонять такие тесты на сайте перевозчика-партнёра?

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

Смежные руководства

Пора прогнать собственный тарифный калькулятор по всем четырём веткам? Подключите CaptchaAI.

Комментарии для этой статьи отключены.