Безопасный scope: Это руководство применимо только к собственным или явно авторизованным QA-, staging- и production-средам. Описаны сценарии диагностики, тестирования и наблюдаемости вашей собственной CAPTCHA-интеграции — не для сторонних сайтов и не для несанкционированных workflow.
В QA-сюитах легко получить «грязные» прогоны: cookie от предыдущего теста подменяет состояние сессии, фоновый login пропускает шаг, а сравнение результатов между сценариями становится невозможным. Разделение браузерных профилей решает эту проблему чисто инфраструктурно.
Зачем разделять профили в QA
- Каждый сценарий стартует с заранее известным cookie-состоянием.
- Тестовые учётные записи не пересекаются между сценариями.
- Сравнение прогонов становится воспроизводимым.
- Падение одного теста не «отравляет» остальные.
Это не средство контролируемая проверка чужих защит — это инженерная гигиена собственных тестов.
Что изолировать в каждом профиле
| Слой | Что хранится |
|---|---|
| Cookies | session, csrf, опционально CAPTCHA-cookie |
| Local / session storage | UI-состояние, фичефлаги |
| IndexedDB | оффлайн-кеш приложения |
| Service worker registrations | оффлайн-режим |
| Permissions | уведомления, геолокация в staging |
Пример состояния QA-профиля
Каталог ./qa-profiles/checkout-smoke/ хранит данные одного сценария. Запуск браузера с собственным --user-data-dir не является универсальным обещанием, что данные не попадут в соседние сценарии:
chrome --user-data-dir=./qa-profiles/checkout-smoke \
https://staging.example.com/checkout-test
В Playwright/Puppeteer это userDataDir или persistent context.
Интеграция CaptchaAI во внутреннюю QA suite
Если в staging-форме появляется CAPTCHA, тест запрашивает токен только для своей собственной страницы и помещает его в DOM локального профиля:
from playwright.sync_api import sync_playwright
PROFILE = './qa-profiles/checkout-smoke'
PAGE = 'https://staging.example.com/captcha-demo'
with sync_playwright() as p:
ctx = p.chromium.launch_persistent_context(PROFILE, headless=True)
page = ctx.new_page()
page.goto(PAGE)
sitekey = page.locator('.g-recaptcha').get_attribute('data-sitekey')
token = solve(sitekey)
page.evaluate(
"t => document.getElementById('g-recaptcha-response').value = t",
token,
)
page.click('button[type=submit]')
ctx.close()
Жизненный цикл профиля
Каталог профиля — артефакт CI: создаётся перед прогоном, очищается после. Для долгоживущих сценариев храните snapshot профиля как обычный артефакт сборки и восстанавливайте его в начале теста.
Логи и наблюдаемость
Структурированные логи помогают сравнивать поведение 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 и по среде.
Troubleshooting
| Симптом | Что сделать |
|---|---|
| Тест видит чужие cookie | Проверьте уникальность --user-data-dir |
| Профиль повреждён | Удалите каталог и пересоздайте |
| Профиль слишком большой | Очищайте IndexedDB между прогонами |
| CAPTCHA каждый прогон | Сохраните валидную сессию между шагами |
QA-чек-лист
- Запрос отправляется только на собственные или авторизованные endpoints.
- Тестовые учётные записи, события и платежи помечены как фиктивные.
- CAPTCHA-токен проверяется на собственном backend, а не доверяется клиенту.
- Логи содержат
task_id, тип CAPTCHA, время ожидания и pass/fail. - Скрипт возвращает корректный exit code, чтобы CI мог принять решение.
FAQ
Можно ли использовать этот подход на сторонних сайтах?
Нет. Описанные сценарии применимы только к собственным или явно авторизованным средам. Для чужих ресурсов запрашивайте письменное разрешение владельца.
Что делать, если CaptchaAI вернул ошибку?
Логируйте task_id, тип CAPTCHA и текст ошибки, повторите запрос с экспоненциальной задержкой и фиксируйте долю ошибок в дашборде. Постоянный рост ошибок — повод проверить sitekey и страницу.
Как сравнивать результаты между релизами?
Сохраняйте логи в одном формате и стройте отчёт по медиане, P90 и P99 на одинаковом наборе сценариев. Сравнивайте только сопоставимые выборки в собственной среде.
Безопасные связанные руководства
- Быстрый старт CaptchaAI
- QA-тестирование CAPTCHA в авторизованных средах
- Тестирование CAPTCHA API на собственных формах
- Отладка: браузерный тест падает, API проходит
- reCAPTCHA v2 через API
- Cloudflare Turnstile через API
- GeeTest v3 через API
Чистые QA-прогоны и предсказуемые CAPTCHA-сценарии — начните с CaptchaAI.