Kredi harcamadan Go CAPTCHA entegrasyonunu test edin
NewClientWithBaseURL kullanarak resmi Go SDK'sını bir httptest sunucusuna yönlendirin. Görev yanıtlarını sunucu sağlar; böylece solvethree kredisi harcamadan veya uygulama sırlarını sağlamadan SDK'yı deneyebilirsiniz.
Bu sayfada
SDK'yı yerel bir test düzeneğiyle çalıştırın
- 1.
Bağımlılığı yükleyin
Go 1.22 veya üzerini kullanın. Go modülünüzde
solvethree.com/[email protected]paketini yüklemek içingo getkullanın. Modül solvethree.com üzerinden sunulur. - 2.
Testi kaydedin ve çalıştırın
Örneği modülünüzde yalnızca testler için kullanılan bir dizine
captcha_integration_test.goadıyla kaydedin, ardından bu dizindego testçalıştırın. Test düzeneğinin anahtarını, ana makine adını ve proxy'sini değiştirmeyin: bunlar yapılandırmanız gereken kimlik bilgileri veya hizmetler değil, test verileridir.
package integration_test
import (
"context"
"fmt"
"net/http"
"net/http/httptest"
"sync/atomic"
"testing"
"time"
solvethree "solvethree.com/sdk"
)
func TestSolve(t *testing.T) {
var posts atomic.Int32
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
if r.Method == "POST" {
posts.Add(1)
fmt.Fprint(w, `{"id":"fixture-1","status":"pending"}`)
return
}
fmt.Fprint(w, `{"id":"fixture-1","status":"ready","solution":{"token":"FIXTURE_TOKEN","userAgent":"fixture-browser-identity","secChUa":"fixture-hints"}}`)
}))
defer server.Close()
client, err := solvethree.NewClientWithBaseURL("fixture-key", server.URL, nil)
if err != nil { t.Fatal(err) }
result, err := client.Solve(context.Background(), solvethree.TaskRequest{
Site: "accounts.example.com", Action: "login", Proxy: "http://proxy.example:8080",
}, solvethree.SolveOptions{Timeout: time.Second, PollInterval: time.Millisecond})
if err != nil { t.Fatal(err) }
if result.Solution.Token != "FIXTURE_TOKEN" || posts.Load() != 1 { t.Fatal("incorrect lifecycle") }
}NewClientWithBaseURL, testler için geri döngü HTTP bağlantılarını kabul eder. Burada server.URL, üretim API adresinin yerini alır ve işleyici yerel olarak yanıt verir. Proxy değeri yalnızca gönderilen görevin bir parçasıdır; bu test düzeneği proxy'ye bağlanmaz.
Başarılı test neyi kanıtlar?
POST yanıtı görevi beklemede bırakır. Sonraki bir istek, FIXTURE_TOKEN içeren hazır yanıtını alır. Son doğrulama hem döndürülen token'ı hem de tam olarak bir POST gönderildiğini kontrol ederek bu akış sırasında yanlışlıkla fazladan görev oluşturulmasını yakalar.
İşleyici bilerek basit tutulmuştur: POST dışındaki her istek hazır yanıtını alır. Yoklama yöntemini, istek yolunu veya gönderilen JSON'u doğrulamaz. İstek sözleşmesini de test etmek için işleyicinin beklenen oluşturma ve görev alma yollarının yanı sıra gönderilen siteyi, eylemi ve proxy'yi kontrol etmesini sağlayın.
Bu testin geçmesi, simüle edilen SDK yaşam döngüsünün çalıştığını kanıtlar. Gerçek bir site profilini, proxy'yi veya hedefin token'ı kabul ettiğini doğrulamaz. Döndürülen token ve tarayıcı kimliği test düzeneğine ait değerlerdir.
Entegrasyonunuzun karar verdiği noktalara hata senaryoları ekleyin
Yerel işleyiciyi, uygulamanızın ele alması gereken koşulları döndürecek şekilde genişletin. POST sayacını koruyun: bir yoklamayı yeniden denemek başka bir görev oluşturmamalıdır.
| Test düzeneğinin davranışı | Kontrol edilecekler |
|---|---|
| Bir yoklama isteği HTTP 429, 502, 503 veya 504 döndürür, ardından hazır yanıtı gelir. | Solve, geçici yoklama hatalarını yeniden dener, son süre sınırları içinde Retry-After'a uyar ve yine yalnızca bir POST gönderir. |
| Görev, errorCode değeri site-unreachable ve bir hata mesajıyla başarısız duruma geçer. | *solvethree.TaskFailedError hatasını ele alın ve bu görevi yoklamayı bırakın. ErrorCode, hatayı tanımlar; Error metnine ihtiyaç duyduğunuzda başarısız görevi alın. |
| Oluşturma işlemi başarılı olmayan bir HTTP yanıtı döndürür. | Yanıtı başarılı bir görev olarak değerlendirmek yerine HTTP hatasını ele alın. *solvethree.APIError değerini almak için errors.As kullanın ve StatusCode alanını inceleyin. |
| Görev son süreye kadar beklemede kalır. | context.DeadlineExceeded hatasını errors.Is ile tespit edin. Zaman aşımı beklemeyi durdurur; uzaktaki işi iptal etmez. |
| Sunucu oluşturma işlemini kaydeder ancak istemci yanıtı kaybeder. | *solvethree.Error üzerindeki kurtarma bilgilerini kontrol edin. CreateTask, POST isteğini otomatik olarak yeniden denemez. TaskID biliniyorsa GetTask ile kurtarın veya aynı RequestID ile tam olarak aynı özgün girdileri yeniden gönderin. |
Yanıtın kaybolduğu senaryo için teste açıkça bir istek kimliği verin ve bu kimlik ile aynı girdiler yeniden gönderildiğinde test düzeneğinin mevcut görevi döndürmesini sağlayın. Aksi takdirde kurtarmayı değil, ikinci bir oluşturma işlemini test etmiş olursunuz.
Kaynaklar ve API referansı
İlk görevinizi çalıştırın.
$5 çalışma alanı kredisiyle başlayın.