Güvenli kapsam: Bu kılavuz yalnızca size ait ya da yetkilendirilmiş QA, staging ve ön üretim ortamlarını kapsar; üçüncü taraf siteleri veya yetkisiz akışları kapsamaz.
Sipariş onayı adımına bir CAPTCHA doğrulaması eklendiğinde cevaplanması gereken tek soru şudur: regresyon paketiniz bu adımı kendi başına çözüp siparişi tamamlayabiliyor mu? Cevap üç kurala sığıyor — staging kopyanızı sentetik SKU'larla doldurun, doğrulamayı test istemcinizden CaptchaAI API'si üzerinden çözün, siparişin yazıldığını backend'de ayrı bir kontrolle kanıtlayın. Üretim kataloğu ve gerçek müşteri kaydı bu döngünün hiçbir adımında yer almaz.
Test döngüsü tek bakışta
Kurulum beş katmana sığar; bir senaryo kırmızıya döndüğünde hangi katmanın konuştuğunu bilmek hata ayıklamanın yarısıdır.
| Katman | QA'nın doğrulaması gereken |
|---|---|
| Katalog | Listeleme yalnızca sentetik SKU'ları döndürür |
| Sepet | Fiyat ve stok, fixture değerleriyle birebir eşleşir |
| CAPTCHA | Doğrulama tamamlanır ve token akışa girer |
| Sipariş | Dahili uç nokta simüle sipariş kimliği döndürür |
| Kayıt | Her koşu için süre, görev kimliği ve yanıt kodu loglanır |
Perakende checkout'u neden ayrı bir test problemi?
Bir iletişim formunda tek bir gönderim vardır; perakende akışında sepet, stok rezervasyonu, kargo seçimi ve ödeme adımı birbirine bağlıdır. CAPTCHA doğrulaması çoğu zaman bu zincirin en sonuna, sipariş onayına konur: paketiniz onlarca adım ilerledikten sonra takılır ve her yeniden deneme bütün zinciri baştan koşmak demektir.
İkinci fark doğrulamanın türünde: perakende akışlarında görüntü tabanlı (OCR) doğrulamalar hâlâ yaygındır. Görüntü/OCR görevleri için yayınlanan çözüm süresi tavanı 0,5 saniyenin altındadır — test bütçenizi asıl yiyen şey çözüm adımı değil, sayfanın ve ödeme sağlayıcısının yanıt süresidir.
Adım 1: Sentetik katalogla başlayın
Üretim veritabanının kopyasıyla test etmeyin. Katalog indeksinizi tamamen üretilmiş kayıtlarla kurun: uydurma ürün adları, sabit fiyatlar, kontrollü stok adetleri. Sipariş testleri ad, adres ve telefon alanı doldurur; bu alanlara gerçek müşteri verisi taşımak KVKK açısından savunulabilir değildir. +90 5XX biçiminde sahte numaralar, tr-TR locale'ine uygun adres alanları ve Europe/Istanbul saat dilimiyle üretilmiş zaman damgaları işi görür.
Kataloğu deterministik tutun: bol stoklu bir ürün, son bir adedi kalan bir ürün ve stoğu tükenmiş bir ürün yeterlidir. CAPTCHA adımından sonra üçünün de doğru davranması en ucuz kanıttır — sipariş oluştuysa stok düşmüş, tükenmiş üründe ise akış temiz bir hatayla kapanmış olmalıdır.
Adım 2: Doğrulamayı test istemcinizden çözün
Test istemciniz widget'ı elle tamamlamak yerine gerekli parametreleri CaptchaAI API'sine gönderir ve sonucu sorgular. Görüntü tabanlı doğrulamalarda görsel base64 gövde olarak gider; reCAPTCHA v2, Cloudflare Turnstile ya da GeeTest v3 için sitekey ile sayfa adresi yeterlidir. Akış her durumda aynıdır: görevi gönderin, görev kimliğini saklayın, sonucu periyodik olarak sorgulayın.
Zaman aşımınızı yayınlanan tavana göre değil, kendi ortamınızdaki p95 değerine göre belirleyin — staging makineleri üretimden yavaştır ve paylaşımlı CI koşucuları dalgalanır.
Adım 3: Siparişin oluştuğunu backend'de kanıtlayın
Token'ın üretilmiş olması siparişin yazıldığı anlamına gelmez. Dahili uç noktanızın simüle bir sipariş kimliği döndürdüğünü ve yanıttaki SKU, adet ve tutarın fixture değerleriyle eşleştiğini ayrıca doğrulayın.
Ardından negatif tarafı tamamlayın: token'sız istek, süresi dolmuş token'lı istek ve aynı token'ın ikinci kez kullanıldığı istek. Üçü de 4xx ile reddedilmelidir. Bu testler olmadan, doğrulama bir refactor sırasında devre dışı kalsa bile happy path senaryolarınız yeşil kalır.
Python ile minimum QA çağrısı
Aşağıdaki örnek en kısa akışı gösterir: görevi gönderin, kimliği saklayın, sonucu sorgulayın. API anahtarı ve staging adresi ortam değişkeninden okunur.
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()
İskeleti taşırken tek eklemeniz gereken, sorgulama döngüsünün süreyi ve deneme sayısını da kaydetmesidir.
Her koşudan çıkması gereken kayıtlar
Yapılandırılmış log üretmeyen bir QA hattı, zamanla kimsenin açıklayamadığı bir kırmızı-yeşil kumarına dönüşür. En az şu alanları kaydedin:
- Toplam çözüm süresi — zaman aşımı bütçenizi bu belirler.
- Görev kimliği — tek bir koşuyu yeniden oynatmanızı sağlar.
- HTTP yanıt kodu — çözüm hatasını uygulama hatasından ayırır.
- Eşzamanlı iş sayısı — thread sınırına yaklaştığınızı gösterir.
- Ortam etiketi — geliştirme, staging ve ön üretim kayıtlarını ayırır.
Bağıntı kimliklerini dağıtık izleme aracınızla (örneğin OpenTelemetry) eşleştirin: bütün senaryoyu tek bir kimlikten yeniden oynatabilmek, olay anında tanılama süresini belirgin biçimde kısaltır.
Kampanya haftasından bir saha örneği
Türkiye'de e-ticaret trafiğinin önemli bir kısmı kasım kampanyalarına sıkışır ve değişiklikler çoğu zaman tam o haftada yayına alınır. Sipariş onayına görüntü tabanlı bir doğrulama ekleyen bir ekip düşünün: pazartesi sabahı checkout senaryolarının yarısı "ödeme adımı yüklenmedi" hatasıyla kapanmıştı. Sebep ödeme sağlayıcısı değil, test istemcisinin hiç görmediği doğrulama ekranıydı. Sentetik katalog ve çözüm adımı eklendiğinde kazanılan asıl şey hız değil görünürlük oldu.
Thread bütçesi: hangi plan yeterli?
CaptchaAI eşzamanlı thread üzerinden ücretlendirir. Kapasite sorusu bu yüzden "ayda kaç çözüm" değil, "aynı anda kaç senaryo çözüm bekliyor" biçiminde sorulur.
Gece boyunca sırayla koşan tek bir CI hattı için BASIC ($15/ay, 5 thread) yeterlidir. Checkout matrisini tarayıcı, cihaz ve ödeme yöntemi kombinasyonlarıyla paralel çalıştıran ekipler için ADVANCE ($90/ay, 50 thread) daha gerçekçi bir başlangıçtır. Paralel iş sayısını thread sayınızın üzerine çıkarmayın; ERROR_NO_SLOT_AVAILABLE yanıtları test gürültüsüne karışıp gerçek hataları gizler. Fiyatların USD üzerinden sabit kalması, kur dalgalanmasıyla yaşayan ekipler için QA bütçesini öngörülebilir kılar.
Sorun giderme
| Sorun | Önerilen çözüm |
|---|---|
| Test widget'ı bulamıyor | Seçiciyi ve sayfa yükleme sırasını kontrol edin; doğrulama geç enjekte ediliyor olabilir |
CaptchaAI ERROR_NO_SLOT_AVAILABLE döndürüyor |
Paralel iş sayısını thread sayınıza indirin ve üstel geri çekilme (exponential backoff) ile yeniden deneyin |
| Backend QA token'ını reddediyor | action ve sitekey değerlerini staging yapılandırmasıyla karşılaştırın |
| Sipariş oluşuyor ama kimlik boş dönüyor | Sentetik siparişlerin ayrı kuyruğa yazıldığını kontrol edin |
| Görüntü doğrulaması yanlış okunuyor | Görselin eksiksiz indirildiğini doğrulayın; kırpılmış base64 gövdesi en sık nedendir |
| Süre ara sıra bütçeyi aşıyor | Zaman aşımını sabit varsayımla değil, p95 ölçümünüze göre belirleyin |
Yayına almadan önce kontrol listesi
- Kapsam yalnızca kendi uygulamalarınız ve yetkilendirilmiş ortamlarınızdır.
- CaptchaAI API anahtarı CI gizli deposunda veya kasada durur.
- Katalog, sipariş ve müşteri verisinin tamamı sentetiktir.
- Her koşu için çözüm süresi, görev kimliği ve yanıt kodu kaydedilir.
- Negatif token testleri (eksik, süresi dolmuş, yeniden kullanılmış) pakettedir.
Sık sorulan sorular
Sentetik katalog yerine üretim verisinin bir kopyasını kullanamaz mıyım?
Kullanmamanız daha doğru. Sipariş testleri ad, adres ve telefon alanlarını doldurur; bu alanlara gerçek müşteri verisi taşımak KVKK kapsamında gereksiz bir risktir. Üretilmiş kayıtlar hem bu riski kaldırır hem de testleri deterministik yapar.
Test zaman aşımını kaç saniyeye ayarlamalıyım?
Sabit bir sayı yerine kendi p95 ölçümünüzü kullanın. İlk hafta çözüm sürelerini kaydedin, dağılımın üst ucuna makul bir pay ekleyin ve çeyrek dönemde bir gözden geçirin.
Checkout'umuzda hCaptcha var; test istemcisi bunu çözebilir mi?
Hayır. CaptchaAI hCaptcha'yı ve FunCaptcha'yı (Arkose Labs) desteklemiyor; GeeTest v4 için yalnızca "çok yakında" ifadesi geçerli. Perakende akışlarında sık görülen görüntü/OCR ve grid doğrulamaları, reCAPTCHA v2/v3, GeeTest v3 ve Cloudflare Turnstile desteklenen türlerdir; CaptchaFox (beta), Friendly Captcha (beta) ve Lemin (beta) beta aşamasındadır.
Staging ile üretim için aynı sitekey'i kullanabilir miyim?
Kullanmayın. Staging'e ayrı bir sitekey tanımlayın ve staging.example.com gibi kendi test alan adınızla sınırlayın. Aynı anahtarı paylaşmak test trafiğini üretim ölçümlerinize karıştırır.
Güvenli ilgili kılavuzlar
- CaptchaAI hızlı başlangıç rehberi
- Yetkilendirilmiş ortamlarda CAPTCHA QA testleri
- Kendi form uç noktalarınızda CAPTCHA testleri
- Tarayıcıda başarısız, API'de başarılı hata ayıklama
- reCAPTCHA v2'yi API ile çözme
- Cloudflare Turnstile'ı API ile çözme
- GeeTest v3'ü API ile çözme
Sipariş onayınızdaki CAPTCHA doğrulamasını kendi staging ortamınızda CaptchaAI ile test edin.