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.
Kendi tarife hesaplayıcınızın önüne bir CAPTCHA koyduğunuz gün regresyon paketiniz kırmızıya döner: form gönderilemez, fiyat dönmez, senaryolar "widget bulunamadı" diye düşer. Kalıcı çözüm doğrulamayı test ortamından kaldırmak değil — token'ı QA çalıştırması sırasında CaptchaAI API'si üzerinden üretip forma yerleştirmektir. Böylece staging'de gerçek doğrulama akışı çalışmaya devam eder ve tarife hesabınızı canlıdaki koşullarla sınarsınız.
Aşağıdaki kalıp, Türkiye'deki e-ticaret ve lojistik ekiplerinin en sık kurduğu senaryoya göre yazıldı: kargo firması entegrasyonlarını saran kendi tarife servisiniz ve önünde reCAPTCHA v2 ya da Cloudflare Turnstile ile korunan bir sorgu formu.
Test verinizi sentetik gönderilerle kurun
Gerçek sipariş kayıtlarını QA ortamına kopyalamayın. Alıcı adı, adres ve telefon içeren üretim verisi staging'e taşındığı anda KVKK kapsamına giren bir kişisel veri işleme faaliyeti başlatmış olursunuz — üstelik bunun testinize hiçbir katkısı yoktur.
Bunun yerine sabit bir sentetik gönderi kümesi tanımlayın:
- Rota çiftleri:
34010 → 06010(İstanbul–Ankara),35100 → 01100(İzmir–Adana) gibi 8–10 sabit posta kodu kombinasyonu. - Desi ve ağırlık eşikleri: tarife kademelerinizin tam sınırlarına oturan değerler (örneğin 4,9 kg ve 5,1 kg) — kademe geçişindeki yuvarlama hatalarını yakalayan asıl senaryo budur.
- Sınır durumlar: desi hesabının hacimden geldiği büyük ama hafif koli, ve tek parça ağır gönderi.
- Sahte iletişim verisi:
+90 5xxformatında numaralar vetr-TRlocale ile üretilmiş adres metinleri.
Bu kümeyi bir fixture dosyasında sürüm kontrolüne alın. Her çalıştırma aynı girdilerle koştuğu için tarife çıktısındaki her fark gerçek bir regresyondur, veri gürültüsü değil.
CAPTCHA adımını API ile çözün
Formunuzun doğrulama widget'ı QA'da da canlıdaki gibi çalışmalı — aksi hâlde test ettiğiniz şey üretimdeki uygulama değil, onun sakatlanmış bir kopyası olur. Akış üç adımdır: sayfadaki sitekey değerini okuyun, CaptchaAI'ye görev gönderin, dönen token'ı form alanına yerleştirin.
Alan adı CAPTCHA türüne göre değişir ve karıştırılırsa arka uç token'ı sessizce reddeder:
| Widget | Gönderilecek alan | İlgili rehber |
|---|---|---|
| reCAPTCHA v2 | g-recaptcha-response |
reCAPTCHA v2 token'ını API ile alma |
| Cloudflare Turnstile | cf-turnstile-response |
Turnstile çözüm akışı |
| GeeTest v3 | doğrulama üçlüsü (challenge / validate / seccode) | GeeTest v3 entegrasyon adımları |
CaptchaAI reCAPTCHA v2 ve v3, Cloudflare Turnstile ve Cloudflare doğrulama akışı, GeeTest v3, görüntü/OCR ve grid CAPTCHA türlerini çözer; CaptchaFox (beta), Friendly Captcha (beta) ve Lemin (beta) beta aşamasındadır. hCaptcha ve FunCaptcha (Arkose Labs) desteklenmiyor; GeeTest v4 ise henüz kullanıma açık değil, çok yakında geliyor. Staging formunuzda bu üç türden biri varsa token'ı API ile üretemezsiniz; QA senaryonuzu farklı kurgulamanız gerekir.
Arka uçtaki tarife hesabını doğrulayın
Token kabul edildikten sonra asıl test başlar. Doğrulanması gereken şey CAPTCHA değil, formun arkasındaki hesaplama:
- Fiyat doğruluğu: her rota ve desi çifti için dönen tutar, fixture'daki referans değerle birebir eşleşiyor mu?
- Ek kalemler: yakıt farkı, sigorta ve KDV alanları yanıtta ayrı ayrı geliyor mu, yoksa toplama gömülü mü?
- Zaman aşımı davranışı: kargo firmasının API'si yanıt vermediğinde servisiniz 500 mü dönüyor, yoksa önbellekteki son tarifeyi mi veriyor?
- Token ömrü: token'ı aldıktan 60 saniye sonra göndermeyi deneyin — arka ucunuz süresi geçmiş token'ı reddetmeli.
Son madde en sık atlanan testtir. Çok adımlı bir tarife formunda kullanıcı ikinci ekranda beklerken token'ın süresi dolar; arka uç bunu doğru işlemiyorsa hata ilk kez canlıda görünür.
Sorun giderme
| Sorun | Olası neden | Önerilen çözüm |
|---|---|---|
| Test widget'ı bulamıyor | Widget staging'de geç render ediliyor | Seçiciyi görünürlük koşuluna bağlayın, sabit bekleme koymayın |
CaptchaAI ERROR_NO_SLOT_AVAILABLE döndürüyor |
Plan thread kapasitesi dolu | Üstel geri çekilme (exponential backoff) ile yeniden deneyin veya thread sayısını yükseltin |
| Arka uç QA token'ını reddediyor | sitekey veya action değeri staging ile uyuşmuyor |
Yapılandırmayı canlı formunkiyle karşılaştırın |
| Tarife tutarı beklenenden farklı | Ek kalemler yanıta dahil edilmemiş | Yakıt farkı ve KDV alanlarını ayrı ayrı kontrol edin |
| Token gönderildiği hâlde form boş dönüyor | Alan adı yanlış seçilmiş | Widget türüne göre alan adını yukarıdaki tablodan doğrulayın |
Çalıştırmaları ölçülebilir hâle getirin
Her QA çalıştırması için yapılandırılmış günlük ü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ı kanallara yazın ve dağıtık izleme (örneğin OpenTelemetry) ile bağıntı kimliklerini eşleştirin. Tek bir kimlikten senaryonun tamamını yeniden oynatabilmek, olay sırasında tanılama süresini belirgin biçimde kısaltır.
Kapasite tarafında: CaptchaAI planları thread bazlıdır ve her plan thread başına sınırsız çözüm içerir. Gecelik regresyon paketi çalıştıran bir ekip için BASIC ($15/ay, 5 thread) genelde yeterlidir; paralel CI job'ları ve birden fazla ortam söz konusuysa STANDARD ($30/ay, 15 thread) daha rahat çalışır. Kur oynaklığı düşünüldüğünde aylık maliyetin USD üzerinden sabit kalması planlamayı kolaylaştırır.
Yayına almadan önce kontrol listesi
- Kapsam kesinlikle kendi uygulamalarınız veya yetkilendirilmiş kaynaklarla sınırlıdır.
- CaptchaAI API anahtarı CI gizli deposunda veya kasada saklanır, kaynak kodda asla bulunmaz.
- Test verisi tamamen sentetiktir; üretim gönderi kayıtları staging'e kopyalanmaz.
- 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 idempotent yeniden deneme stratejisi kuruludur.
- Testler sürekli entegrasyon ortamınızdan tekrarlanabilir biçimde yeniden oynatılır.
Minimal Python akışı
Aşağıdaki örnek, kendi staging ortamınızdaki bir CAPTCHA widget'ını CaptchaAI üzerinden test etmek için gereken en küçük akışı gösterir: görevi gönderin, görev kimliğini alın, 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()
Bu akışı bir pytest fixture'ına sarıp her senaryodan önce çağırın; sorgulama döngüsüne makul bir zaman aşımı ve üstel geri çekilme ekleyin. Kurulumun tamamı için CaptchaAI hızlı başlangıç rehberine bakabilirsiniz.
Sık sorulan sorular
Staging ortamındaki CAPTCHA'yı tamamen kapatmak daha kolay değil mi?
Kolay ama testi anlamsızlaştırır. Doğrulama kapatıldığında arka ucun token doğrulama kodu, süre aşımı davranışı ve hata yolları hiç çalışmaz; regresyon ilk kez canlıda görünür. Doğru yaklaşım, CAPTCHA'yı yerinde bırakıp QA çalıştırmasında API ile çözmektir.
Bir gecelik regresyon paketi için hangi plan yeterli?
Sıralı koşan tek bir paket için BASIC ($15/ay, 5 thread) genelde yeter. Birden fazla CI job'ı paralel koşuyor veya aynı anda birkaç ortamı test ediyorsanız STANDARD ($30/ay, 15 thread) daha rahattır. Planlar thread bazlıdır; thread başına çözüm sayısında sınır yoktur.
Sentetik test verisi KVKK açısından yeterli mi?
Tamamen üretilmiş isim, adres ve telefon verisi kişisel veri sayılmadığı için staging'de rahatça kullanılabilir. Riskli olan, üretim veritabanının test ortamına kopyalanmasıdır — bu durumda maskeleme ve saklama süresi kuralları devreye girer.
Aynı QA paketiyle birden fazla CAPTCHA türünü test edebilir miyim?
Evet. Fark yalnızca gönderim method değerinde ve token'ın yerleştirileceği alan adındadır. Widget türünü fixture parametresi hâline getirirseniz aynı senaryo reCAPTCHA v2 ve Turnstile korumalı iki form için de koşar.
Testlerim ara sıra ERROR_NO_SLOT_AVAILABLE alıyor, bu bir hata mı?
Hayır, kapasite sinyalidir: o an tüm thread'leriniz doluysa API bu kodu döndürür. Üstel geri çekilme ile yeniden deneyin; sık tekrarlıyorsa paralel job sayısını düşürün veya plan thread sayısını yükseltin.
Güvenli ilgili kılavuzlar
- CaptchaAI hızlı başlangıç
- Yetkili ortamlarda CAPTCHA QA testleri
- Kendi formlarınızda uç nokta testleri
- Tarayıcı testi düşüyor ama API çalışıyor: hata ayıklama
- reCAPTCHA v2'yi API ile çözme
- Cloudflare Turnstile'ı API ile çözme
- GeeTest v3'ü API ile çözme
Tarife formunuzun CAPTCHA adımını kendi staging ortamınızda CaptchaAI ile doğrulayın.