Lingkup aman: Panduan ini berlaku hanya untuk lingkungan QA, staging, dan praproduksi milik sendiri atau yang Anda miliki otorisasinya. Materi membahas pola diagnostik, pengujian, dan observabilitas untuk integrasi CAPTCHA Anda sendiri — bukan untuk situs pihak ketiga atau alur tanpa otorisasi.
Saat pengujian QA mencakup beberapa akun uji atau lingkungan staging berbeda, profil browser yang terisolasi mencegah kontaminasi cookie dan memberikan keadaan yang dapat direproduksi. Panduan ini fokus pada manajemen profil di QA sendiri — bukan pada anti-deteksi atau penghindaran.
Mengapa profil perlu dipisahkan dalam QA
- Mencegah cookie satu kasus uji mempengaruhi kasus lain.
- Mengisolasi akun uji di setiap skenario.
- Mereproduksi state browser yang konsisten di CI.
- Memisahkan konfigurasi staging berbeda.
Apa saja yang dipisahkan per profil
Cookie, localStorage, sessionStorage, IndexedDB, cache service worker, dan ekstensi developer. CAPTCHA juga dipengaruhi oleh state sesi, jadi profil bersih membuat hasil uji konsisten.
Contoh menyimpan state profil QA
from playwright.sync_api import sync_playwright
def run(profile_dir, qa_user):
with sync_playwright() as p:
ctx = p.chromium.launch_persistent_context(
user_data_dir=profile_dir, headless=True
)
page = ctx.new_page()
page.goto('https://staging.example.com/qa-form')
# ... validasi CAPTCHA dengan CaptchaAI ...
ctx.storage_state(path=f'state-{qa_user}.json')
ctx.close()
Integrasi CaptchaAI dalam suite QA internal
Untuk setiap profil, jalankan flow CAPTCHA: deteksi widget di halaman staging Anda, kirim ke in.php, polling res.php, validasi token via endpoint backend QA. Catat hasil per profile_id dan kasus_qa.
Pemecahan masalah
| Gejala | Tindakan yang disarankan |
|---|---|
| Tes tidak menemukan widget | Periksa selector dan timing pada staging Anda |
CaptchaAI mengembalikan ERROR_NO_SLOT_AVAILABLE |
Coba ulang dengan backoff pada pipeline internal |
| Backend QA menolak token | Bandingkan action/sitekey dengan konfigurasi sebenarnya |
Observabilitas
Catat log terstruktur untuk setiap eksekusi QA. Metrik yang dianjurkan: durasi total token, kode respons HTTP, ID tugas, dan kedalaman antrean. Pisahkan saluran log per lingkungan (development, staging, pra-produksi) dan korelasikan dengan distributed tracing (mis. OpenTelemetry) lewat correlation id. Kemampuan memutar ulang skenario penuh dari satu id biasanya memangkas waktu diagnosis insiden setidaknya separuh.
Checklist
- Cakupan pengujian dibatasi pada aplikasi sendiri atau sumber daya yang Anda miliki otorisasinya.
- Kunci CaptchaAI disimpan di secret manager CI atau vault, bukan di source code.
- Setiap eksekusi mencatat latensi dan kode status respons.
- Strategi retry idempoten dengan batas atas untuk error sementara.
- Pengujian dapat direproduksi di pipeline CI.
Contoh pemanggilan QA
Contoh Python berikut menunjukkan alur minimum untuk memvalidasi widget CAPTCHA pada lingkungan staging milik Anda sendiri lewat CaptchaAI.
import os
import time
import requests
API_KEY = os.environ['CAPTCHAAI_KEY']
QA_PAGE_URL = os.environ['QA_PAGE_URL'] # contoh: https://staging.example.com/qa-login
QA_SITE_KEY = os.environ['QA_SITE_KEY']
def submit_qa_recaptcha() -> str:
payload = {
'key': API_KEY,
'method': 'userrecaptcha',
'googlekey': QA_SITE_KEY,
'pageurl': QA_PAGE_URL,
'json': 1,
}
response = requests.post(
'https://ocr.captchaai.com/in.php',
data=payload,
timeout=30,
)
response.raise_for_status()
return response.json()['request']
def fetch_qa_result(task_id: str) -> dict:
params = {
'key': API_KEY,
'action': 'get',
'id': task_id,
'json': 1,
}
while True:
response = requests.get(
'https://ocr.captchaai.com/res.php',
params=params,
timeout=30,
)
response.raise_for_status()
data = response.json()
if data.get('request') != 'CAPCHA_NOT_READY':
return data
time.sleep(5)
FAQ
Apakah alur ini menyentuh trafik produksi?
Tidak. Semua contoh mengasumsikan domain QA milik sendiri seperti staging.example.com. Replikasi konfigurasi CAPTCHA produksi di salinan staging Anda untuk validasi.
Boleh menulis API key di source code?
Tidak boleh. Suntikkan lewat secret manager CI, environment variable, atau vault. Key yang sudah ter-commit harus dirotasi segera.
Strategi apa yang disarankan untuk error sementara?
Retry idempoten dengan exponential backoff (mis. 1s, 2s, 4s) dan batas atas. Error jaringan, respons 5xx, dan ERROR_NO_SLOT_AVAILABLE layak di-retry; error otorisasi yang persisten tidak boleh di-retry.
Panduan terkait yang aman
- Mulai cepat CaptchaAI
- QA CAPTCHA terotorisasi
- Pengujian endpoint CAPTCHA pada formulir sendiri
- Debug saat tes browser gagal padahal API berfungsi
- Menyelesaikan reCAPTCHA v2 dengan API
- Menyelesaikan Cloudflare Turnstile dengan API
- Menyelesaikan GeeTest v3 dengan API
Validasi integrasi CAPTCHA Anda di lingkungan sendiri dengan CaptchaAI.