Integrations

Isolasi profil browser untuk QA dengan CaptchaAI

Lingkup aman: Panduan ini hanya untuk lingkungan QA, staging, dan praproduksi milik Anda sendiri atau yang Anda pegang otorisasinya. Fokusnya adalah pola diagnostik, pengujian, dan observabilitas untuk integrasi CAPTCHA Anda — bukan situs pihak ketiga dan bukan alur tanpa izin.

Satu profil browser per skenario QA adalah cara paling sederhana menjaga setiap pengujian tetap bersih. Begitu cookie, storage, dan akun uji dipisah, hasil validasi CAPTCHA di staging berhenti saling mencemari dan bisa Anda reproduksi kapan pun — di laptop developer maupun di runner CI.

Masalah klasik di suite QA yang tumbuh besar: satu kasus uji login meninggalkan cookie sesi, kasus berikutnya mewarisi state itu, dan tiba-tiba widget CAPTCHA muncul (atau justru tidak muncul) di tempat yang salah. Isolasi profil menutup celah ini tanpa menyentuh apa pun soal deteksi bot atau penyamaran — murni soal kebersihan lingkungan uji.

Kenapa tiap skenario QA butuh profil terpisah

Profil yang dipisah membereskan empat hal sekaligus:

  • Cookie dari satu kasus uji tidak lagi bocor ke kasus lain.
  • Setiap akun uji berdiri sendiri, tanpa sesi tumpang tindih.
  • State browser bisa direproduksi persis sama di CI, bukan hanya di mesin Anda.
  • Konfigurasi staging yang berbeda (misalnya sitekey reCAPTCHA v2 vs Cloudflare Turnstile) tetap rapi terpisah.

Hasil validasi CAPTCHA sensitif terhadap state sesi. Profil yang bersih membuat pengujian deterministik: token yang Anda peroleh dari CaptchaAI divalidasi terhadap kondisi halaman yang sama setiap kali, bukan terhadap sisa sesi run sebelumnya.

Apa yang perlu diisolasi di setiap profil

Perlakukan tiap profil sebagai kotak tertutup berisi: cookie, localStorage, sessionStorage, IndexedDB, cache service worker, dan ekstensi developer yang Anda pasang. Semua ini ikut menentukan apakah sebuah CAPTCHA muncul dan bagaimana backend memvalidasi tokennya. Kalau salah satu bocor antar-run, Anda kehilangan kemampuan mereproduksi bug.

Menyimpan state profil agar bisa diputar ulang

Simpan state tiap profil ke berkas terpisah supaya run berikutnya bisa dimulai dari titik yang sama. Contoh dengan Playwright dan persistent context:

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()

Beri satu profile_dir per akun uji, dan storage_state per pengguna. Dengan begitu, kegagalan pada satu skenario bisa Anda putar ulang tanpa menyeret kontaminasi dari skenario lain.

Menjalankan alur CAPTCHA CaptchaAI di dalam suite QA

Untuk tiap profil, jalankan alur empat langkah yang sama seperti integrasi CaptchaAI mana pun: deteksi widget di halaman staging Anda, kirim task ke in.php, polling res.php, lalu validasi token lewat endpoint backend QA Anda. Catat hasilnya per profile_id dan kasus_qa supaya laporan CI bisa langsung menunjuk skenario yang gagal.

CaptchaAI bersifat browser-agnostic: layanan hanya butuh sitekey dan URL halaman, jadi profil mana pun yang Anda pakai untuk mengisolasi sesi tidak mengubah cara token diminta. CaptchaAI mendukung reCAPTCHA v2/v3, Cloudflare Turnstile, Cloudflare Challenge, GeeTest v3, serta image/OCR dan grid — cukup untuk sebagian besar formulir staging yang perlu Anda uji.

Contoh: tim data freelance yang uji QA dari Jakarta

Bayangkan tim data kecil yang mengerjakan kontrak scraping dan otomatisasi form. Mereka men-deploy runner CI di region ap-southeast-3 (Jakarta) atau ap-southeast-1 (Singapura) dan perlu memvalidasi alur pendaftaran di salinan staging milik klien. Tiap tester memegang beberapa akun uji, dan tanpa isolasi profil, cookie sesi satu akun bocor ke akun lain — bug validasi CAPTCHA jadi mustahil direproduksi.

Untuk tim seperti ini, biaya yang bisa diprediksi penting. Paket CaptchaAI berbasis thread, bukan per solve: BASIC ($15/bulan, 5 thread) menjalankan lima validasi CAPTCHA paralel dengan solve tak terbatas sepanjang bulan berjalan, sehingga run QA yang menumpuk saat rilis tidak memicu tagihan kejutan. Satu catatan kepatuhan yang relevan secara lokal: sesuai UU Pelindungan Data Pribadi (UU 27/2022), uji hanya data yang memang berhak Anda proses dan hindari data pribadi di lingkungan staging.

Observabilitas dan pemisahan log per lingkungan

Tulis log terstruktur untuk setiap eksekusi QA. Metrik yang layak dicatat: durasi total hingga token siap, kode respons HTTP, ID task, dan kedalaman antrean. Pisahkan saluran log per lingkungan (development, staging, praproduksi) lalu korelasikan lewat distributed tracing (misalnya OpenTelemetry) dengan satu correlation id. Kemampuan memutar ulang satu skenario penuh dari sebuah id biasanya memangkas waktu diagnosis insiden secara signifikan.

Contoh pemanggilan CaptchaAI dari harness QA

Contoh Python berikut menunjukkan alur minimum untuk memvalidasi widget CAPTCHA di lingkungan staging milik Anda sendiri lewat CaptchaAI. Kirim task, lalu polling sampai token siap:

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)

Ambil API key dari environment variable, jangan pernah dari source code. Fungsi fetch_qa_result melakukan polling sampai res.php berhenti mengembalikan CAPCHA_NOT_READY.

Pemecahan masalah umum

Gejala Tindakan yang disarankan
Tes tidak menemukan widget Periksa selector dan timing pada halaman staging Anda
CaptchaAI mengembalikan ERROR_NO_SLOT_AVAILABLE Coba ulang dengan backoff pada pipeline internal
Backend QA menolak token Bandingkan action/sitekey dengan konfigurasi staging sebenarnya
Widget muncul di skenario yang salah Pastikan profil bersih; cookie sesi kemungkinan bocor antar-run

Checklist sebelum masuk ke CI

  • Cakupan pengujian dibatasi pada aplikasi sendiri atau sumber daya yang Anda pegang 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.
  • Setiap skenario memakai profil dan storage_state tersendiri.
  • Pengujian dapat direproduksi persis di pipeline CI, bukan hanya di mesin lokal.

FAQ

Apakah alur QA 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, bukan di sistem yang sedang melayani pengguna.

Bolehkah API key CaptchaAI ditulis di source code?

Tidak boleh. Suntikkan lewat secret manager CI, environment variable, atau vault. Key yang sudah terlanjur ter-commit harus segera dirotasi.

Bagaimana menangani ERROR_NO_SLOT_AVAILABLE saat banyak profil berjalan paralel?

Perlakukan sebagai error sementara: coba ulang dengan exponential backoff (misalnya 1s, 2s, 4s) dan batas atas percobaan. Error jaringan dan respons 5xx layak di-retry; error otorisasi yang persisten tidak boleh di-retry.

Apakah CaptchaAI bisa dipakai memvalidasi hCaptcha di staging?

Belum. hCaptcha tidak didukung saat ini, begitu pula FunCaptcha (Arkose Labs). Untuk pengujian, gunakan tipe yang didukung seperti reCAPTCHA v2/v3, Cloudflare Turnstile, atau GeeTest v3.

Panduan terkait yang aman

Validasi integrasi CAPTCHA Anda di lingkungan sendiri dengan CaptchaAI.

Komentar dinonaktifkan untuk artikel ini.