Güvenli kapsam: Bu kılavuz yalnızca size ait veya yetkilendirilmiş QA, staging ve ön üretim ortamları için geçerlidir. İçerik kendi CAPTCHA entegrasyonlarınız için tanılama, test ve gözlemlenebilirlik kalıplarını ele alır — üçüncü taraf siteleri veya yetkisiz akışları kapsamaz.
Her QA senaryosunu kendi tarayıcı profilinde çalıştırın: çerezler, oturum verileri ve test hesapları birbirine karışmaz, CAPTCHA doğrulaması da her koşuda temiz bir durumdan başlar. Staging testlerinizi tekrarlanabilir kılmanın en pratik yolu budur. Bu rehber, kendi QA ve ön üretim ortamlarınızda profil izolasyonunu CaptchaAI entegrasyonuyla nasıl kuracağınızı gösterir.
Profil izolasyonu QA'da neden önemli?
İzole profiller, bir test senaryosunun bıraktığı durumun bir sonrakini bozmasını engeller. Paylaşılan tek bir tarayıcı oturumunda çalıştığınızda, önceki koşudan kalan bir çerez veya localStorage kaydı testi sessizce etkiler ve hatayı yeniden üretmek zorlaşır. Ayrı profillerle her koşu bilinen, temiz bir durumdan başlar.
- Bir senaryonun çerezleri diğerini etkilemez.
- Her senaryo kendi test hesabıyla izole çalışır.
- CI'da aynı tarayıcı durumu tekrar tekrar üretilebilir.
- Farklı staging yapılandırmaları birbirine karışmaz.
Somut bir örnek: İstanbul'daki bir e-ticaret ekibi, ödeme adımındaki reCAPTCHA v2 doğrulamasını üç farklı test hesabıyla sınıyor. Her hesap için ayrı bir profil kullanıldığında bir hesabın oturumu diğerinin sonucunu bozmaz ve başarısız bir koşu birebir yeniden oynatılabilir. Test verisi gerçek müşteri bilgisi içeriyorsa bunun KVKK kapsamına girdiğini unutmayın — profillerde yalnızca sentetik test hesapları kullanın.
Her profilde neyi izole etmelisiniz
Bir profilin sınırı yalnızca çerezlerle bitmez. Aşağıdaki katmanların her biri profil başına ayrı tutulmalıdır; CAPTCHA doğrulaması da oturum durumundan etkilendiği için temiz bir profil, sonuçların koşudan koşuya tutarlı kalmasını sağlar.
| Katman | Neden profil başına izole edilir |
|---|---|
| Çerezler ve localStorage | Önceki koşudan kalan oturum testi sessizce bozar |
| sessionStorage ve IndexedDB | Senaryolar arası durum sızıntısını önler |
| service worker önbelleği | Eski yanıtların önbellekten dönmesini engeller |
| Yüklü geliştirici eklentileri | Enjekte edilen scriptlerin sonucu etkilemesini önler |
Playwright ile kalıcı QA profili oluşturma
Playwright'ın kalıcı bağlam (persistent context) özelliği, her QA kullanıcısı için ayrı bir profil dizini tutmanın en temiz yoludur. Aşağıdaki örnek, verilen profil dizininde bir oturum açar, staging formunu ziyaret eder ve durum dosyasını kullanıcı başına kaydeder.
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')
# ... CaptchaAI ile CAPTCHA doğrulama ...
ctx.storage_state(path=f'state-{qa_user}.json')
ctx.close()
CaptchaAI'yi QA suite'inize bağlama
Her profil için CAPTCHA akışını aynı sırayla çalıştırın: staging sayfanızdaki widget'ı tespit edin, görevi in.php'ye gönderin, sonucu res.php'den sorgulayın ve dönen token'ı QA backend uç noktanız üzerinden doğrulayın. Sonuçları profil kimliği (profile_id) başına ayrı loglayın ki her senaryonun geçmişi bağımsız kalsın.
CaptchaAI bu akışta reCAPTCHA v2 ve v3, Cloudflare Turnstile ve GeeTest v3 gibi türleri çözer; yalnızca sitekey ve sayfa URL'sine ihtiyaç duyduğu için hangi profil yöneticisini kullandığınızdan bağımsız çalışır. hCaptcha ve FunCaptcha desteklenmez, bu yüzden test matrisinizi desteklenen türlerle sınırlayın.
Minimal QA çağrısı örneği
Aşağıdaki Python örneği, kendi staging ortamınızdaki bir reCAPTCHA widget'ını CaptchaAI üzerinden test etmek için gereken minimum akışı gösterir: görevi gönderin, sonucu sorgulayın.
import os
import requests
API_KEY = os.environ['CAPTCHAAI_KEY']
QA_PAGE_URL = os.environ['QA_PAGE_URL'] # ör. https://staging.example.com/qa-login
QA_SITE_KEY = os.environ['QA_SITE_KEY']
def submit_qa_recaptcha() -> str:
payload = {
'clientKey': API_KEY,
'task': {
'type': 'NoCaptchaTaskProxyless',
'websiteURL': QA_PAGE_URL,
'websiteKey': QA_SITE_KEY,
},
}
response = requests.post(
'https://api.captchaai.com/createTask',
json=payload,
timeout=30,
)
response.raise_for_status()
return response.json()['taskId']
def fetch_qa_result(task_id: str) -> dict:
payload = {'clientKey': API_KEY, 'taskId': task_id}
response = requests.post(
'https://api.captchaai.com/getTaskResult',
json=payload,
timeout=30,
)
response.raise_for_status()
return response.json()
Sorun giderme
| Sorun | Önerilen çözüm |
|---|---|
| Test widget'ı bulamıyor | Staging ortamındaki seçiciyi ve widget'ın yüklenme zamanlamasını doğrulayın |
CaptchaAI ERROR_NO_SLOT_AVAILABLE döndürüyor |
Kısa bir geri çekilmeyle yeniden deneyin; thread doygunluğunda kuyruk boşalınca çözüm sürer |
| Backend QA token'ı reddediyor | action ve sitekey değerlerini gerçek staging yapılandırmasıyla karşılaştırın |
Gözlemlenebilirlik ve loglama
Her QA çalıştırması için yapılandırılmış (structured) loglar üretin. Toplam token süresi, HTTP yanıt kodu, görev kimliği ve kuyruk derinliği gibi ölçümler panolarınızı ve uyarılarınızı besler. Ortamları — geliştirme, staging, ön üretim — ayrı log kanallarına yazın; OpenTelemetry gibi bir dağıtık izleme katmanıyla bağıntı kimliklerini (correlation id) eşleştirin. Tek bir kimlikten tüm senaryoyu yeniden oynatabilmek, bir olay sırasında tanılama süresini belirgin biçimde kısaltır. Token reddi gibi aralıklı hataları erken yakalamak için başarı oranını profil ve senaryo bazında ayrı ayrı izleyin.
CI için profil yönetimi kontrol listesi
- Kapsam her zaman kendi uygulamalarınız veya yetkilendirilmiş kaynaklarla sınırlıdır.
- CaptchaAI anahtarı CI gizli deposunda veya bir kasa hizmetinde tutulur, kaynak kodda asla bulunmaz.
- Her çalıştırma için çağrı süresi ve yanıt kodu kayıt altına alınır.
- Geçici hatalar için üstel geri çekilme (exponential backoff) ile idempotent yeniden deneme kuruludur.
- Testler CI ortamınızdan tekrarlanabilir biçimde yeniden oynatılabilir.
- Profil dizinleri her koşudan sonra temizlenir veya sürüm kontrolünün dışında tutulur.
Plan ve thread notu
Bu tür bir QA akışı paralel profillerle ölçeklenir ve maliyeti belirleyen tek şey eşzamanlı thread sayısıdır — çözüm başına ücret yoktur. CaptchaAI planları thread bazlıdır ve USD olarak faturalanır; TL'nin oynaklığı düşünüldüğünde öngörülebilir aylık maliyet Türkiye'deki ekipler için gerçek bir avantajdır. Küçük bir QA suite için BASIC ($15/ay, 5 thread) başlangıç noktası olarak yeterlidir; paralel profil sayınız arttıkça daha yüksek thread sunan planlara geçebilirsiniz.
Sık sorulan sorular
Her QA senaryosu için ayrı bir profil gerekli mi?
Tekrarlanabilirlik istiyorsanız evet. Ayrı profiller çerez ve oturum sızıntısını engeller; aynı hesabı paylaşan senaryolarda bir koşunun durumu diğerini bozabilir.
Bu akışta CaptchaAI hangi CAPTCHA türlerini çözer?
reCAPTCHA v2 ve v3, Cloudflare Turnstile, GeeTest v3, BLS ve görüntü/OCR türlerini çözer. hCaptcha ve FunCaptcha desteklenmez; test matrisinizi desteklenen türlerle sınırlayın.
API anahtarımı test kodunda saklamak güvenli mi?
Hayır. Anahtarı ortam değişkeni, CI gizli yöneticisi veya kasa hizmeti üzerinden enjekte edin. Kod tabanına işlenen bir anahtar derhal döndürülmelidir.
Geçici hatalarda ne yapmalıyım?
Üstel geri çekilme ile idempotent yeniden deneme kullanın (örneğin 1s, 2s, 4s ve bir üst sınır). Ağ hataları, 5xx yanıtları ve ERROR_NO_SLOT_AVAILABLE için yeniden deneme uygundur; kalıcı kimlik doğrulama hataları için değildir.
İlgili güvenli rehberler
- CaptchaAI hızlı başlangıç rehberi
- Yetkili CAPTCHA QA testleri
- Kendi formlarınızda CAPTCHA uç noktası testleri
- Tarayıcı testi başarısız ama API başarılı: hata ayıklama
- reCAPTCHA v2'yi API ile çözme
- Cloudflare Turnstile'ı API ile çözme
- GeeTest v3'ü API ile çözme
CAPTCHA entegrasyonunuzu kendi ortamınızda CaptchaAI ile doğrulayın.