GH GambleHub

Entegrasyonlar için alay ve stoklar

1) Neden midge ve fişlere ihtiyacımız var

Ödeme sağlayıcıları, KYC hizmetleri, mesaj brokerleri, CRM vb. İle entegrasyonlar testleri yavaş, kararsız ve pahalı hale getirir. Moki/fişler izin verir:
  • Servis mantığını dengesiz bir ortamdan izole edin
  • Yanıtları ve hataları belirleme
  • Nadir sınır durumlarını çoğaltmak (zaman aşımları, 429/5xx, tutarsızlık);
  • Testleri yerel olarak ve CI'da hızlı ve tahmin edilebilir bir şekilde çalıştırın.
💡 İlke: Test seviyesi ne kadar düşükse (Birim/Bileşen), o kadar fazla değiştiririz; Üretim gerçekliğine (Entegrasyon/E2E) ne kadar yakınsa, o kadar az fiş.

2) Şartlar ve taksonomi

Stub, etkileşim kontrolleri olmadan sabit bir yanıta sahip basit bir saplamadır.
Mock - çağrıları bekleyen ve bunları doğrulayan bir nesne (sipariş/sayı/argümanlar).
Fake, gerçek davranışa sahip basitleştirilmiş bir uygulamadır (örneğin, bir In-Memory deposu).
Casus, gerçek aramaları kaydeden bir paket.
Hizmet Sanallaştırma, komut dosyaları, durum ve ağ özelliklerine sahip'sanal'bir harici hizmettir.
Kayıt/Yeniden Oynatma - gerçek trafiğin kaydı ve ardından oynatma (filtreler/sürüm ile).

Ne zaman seçilir:
DurumAraç
Saf iş mantığıSahte (bellek içi), birim-alay
Basit durumlarla HTTP entegrasyonuStubs (WireMock/MockServer/HTTPServer)
Müşteri sözleşmesini sağlayıcıya kontrol edinCDC alay ediyor (Pakt)
Karmaşık Ağ Senaryoları/Koşulları/HatalarıHizmet sanallaştırma/Hoverfly/MockServer
Mesajlar (Kafka/RabbitMQ)Testcontainers + şemaya duyarlı üretici/tüketici taslakları

3) Test edilebilirlik için mimari desenler

Bağlantı Noktaları ve Adaptörler (Altıgen): Entegrasyonu arayüzlerin ötesine taşır - sahte/sahte ile değiştirmek kolaydır.
Bozulmayı önleme katmanı (ACL): Bir modül harici bir modeli etki alanı modeline çevirir - daha az moka noktası.
Kontrata duyarlı istemciler: OpenAPI/Protobuf generation - daha az manuel tutarsızlık.
Özellik bayrakları ve sanal alan modları: sağlayıcının kararlılığı için güvenli anahtarlar/uç noktalar.

4) HTTP: araçlar ve örnekler

4. 1 WireMock (bağımsız/Java DSL)

JSON bıçak:
json
{
"request": { "method": "POST", "urlPath": "/v1/payouts", "headers": { "Idempotency-Key": { "matches": ".+" } } },
"response": {
"status": 201,
"headers": { "Content-Type": "application/json" },
"jsonBody": { "id": "po_123", "status": "queued" },
"fixedDelayMilliseconds": 80
}
}
Java DSL (gövde kontrolü ve varyasyonları ile):
java stubFor(post(urlEqualTo("/v1/payouts"))
.withHeader("Idempotency-Key", matching(".+"))
.withRequestBody(matchingJsonPath("$.amount", equalTo("100. 00")))
.willReturn(aResponse(). withStatus(201). withHeader("Content-Type","application/json")
.withBody("{\"id\":\"po_123\",\"status\":\"queued\"}")));

4. 2 MockServer (Dinamikler/Doğrulamalar)

json
{
"httpRequest": { "method": "GET", "path": "/v1/wallets/w123" },
"httpResponse": { "statusCode": 200, "headers":[{"name":"Content-Type","values":["application/json"]}],
"body": { "id":"w123","currency":"EUR","balance":0 } }
}

4. 3 Hoverfly (middleware, kayıt/tekrar)

Trafiği sağlayıcının sanal alanına karşı kaydedin, PII'yi temizleyin, fikstür olarak düzeltin.
Simülasyon modunda, varyasyonlar ekleyin: 200/4xx/5xx, gecikmeler ve "lapa lapa" pencereler.

4. 4 Düğüm (Nock )/Python (yanıtlar )/Go ('httptest')

Nock:
js nock('https://psp. example. com')
.post('/v1/payouts'). reply(201, { id:'po_123', status:'queued' })
.post('/v1/payouts'). reply (409, {code: 'duplicate'}) ;//second call - conflict
Git:
go srv:= httptest. NewServer(http. HandlerFunc(func(w http. ResponseWriter, r http. Request){
if r. Header. Get("Idempotency-Key") == "" { w. WriteHeader(400); return }
w. Header(). Set("Content-Type","application/json")
w. WriteHeader(201); w. Write([]byte(`{"id":"po_123","status":"queued"}`))
}))
defer srv. Close()

5) gRPC/Protobuf

5. 1 Bıçak üretimi

'.proto'ile bir sunucu oluşturun, kontrollü yanıtlarla yöntemler uygulayın.
Meta verileri (üstbilgiler), durumları ('kodları) denetleyin. InvalidArgument ',' kodları. DeadlineExceeded ').

Go gRPC fake (snippet):
go type FakePayouts struct{ pb. UnimplementedPayoutsServer }
func (f FakePayouts) Create(ctx context. Context, in pb. PayoutReq)(pb. PayoutRes,error){
if in. Amount <= 0 { return nil, status. Error(codes. InvalidArgument,"amount>0") }
return &pb. PayoutRes{Id:"po_123", Status:"QUEUED"}, nil
}

5. Negatifler için 2 grpcurl


grpcurl -plaintext -d '{"amount":0}' localhost:50051 payouts. Payouts/Create

6) Mesajlar ve akışlar: Kafka/RabbitMQ

6. 1 Şemaya duyarlı moki

Schema Registry'yi kullanın ve testlerde Avro/JSON-Schema/Protobuf'u doğrulayın.
Üretici testi: mesaj şemaya karşılık gelir; Tüketici testi: eski ve yeni sürümleri kabul eder.

6. 2 Testcontainers (Kafka + Registry örneği)

java
KafkaContainer kafka = new KafkaContainer(DockerImageName. parse("confluentinc/cp-kafka:7. 6. 1"));
kafka. start();
//We publish the event and wait for consumption with deduplication by key

6. 3 Negatifler

Kopyalar, siparişin yeniden düzenlenmesi, teslimat gecikmesi, "zehirli" mesajlar (ölü mektup).
Büyük mesajlar (sınıra yakın), tanınmayan şema sürümleri.

7) Sözleşmeye duyarlı fişler

7. 1 Pakt (CDC alay ediyor)

Tüketici beklentileri oluşturur - pakt dosyası - sağlayıcı standda doğrular.
Pact stub sunucusu, istemci entegrasyon testleri için beklentileri oynar.

7. 2 OpenAPI/Protobuf - kararlı nesil

Mock sunucuyu spesifikasyondan yükselten araçlar (Prism, openapi-mock, grpc-mock dahil).
Şartnameye olumsuz örnekler/kodlar ekleyin: bu da bir sözleşmedir.

8) Ağ ve kaos: başarısızlıkların simülasyonu

Gecikmeler ve titreme: sabit/dağıtılmış; Son teslim tarihlerini ve deneme başına zaman aşımını kontrol edin.
Zaman aşımları/kesmeler: yarı açık bağlantılar, RST, sıfırlama akışı H2, 503/Retry-After.
Paket kaybı/çoğaltma: gRPC/akışlar için.
Araçlar: Toxiproxy, MockServer (hata enjeksiyonu), xk6-bozucu, CI'da netem.

Toxiproxy (CLI) örneği:

toxiproxy-cli toxic add psp --type latency --latency 300 --jitter 100

9) Veri, sırlar ve determinizm

Redakt ve sentetikler: Düzeltmelerde PII yok; para - ondalık/katı biçimlendirme.
Zaman sabitleme: sahte saat; "Dün/bugün" - kontrol.
Idempotency: aynı 'Idempotency-Key' - aynı yanıt.
Jeneratörler: şeffaf değerlere sahip verilerin fabrikaları/inşaatçıları (örneğin, 'test _ user _ 001').
Sürüm düzeltmeleri (etiketler), "kaldırıldı" yanıtlarını aracı olmadan saklamayın.

10) CI/CD ve ortamlar

Matris: birim (işlem içi sahte) - bileşen (yerel sanallaştırma) - entegrasyon (minimum moks, Testcontainers).
Eserler: pakt dosyaları, OpenAPI anlık görüntüleri, ioc sunucu günlükleri, damlalar için PCAP.
Paralellik: benzersiz bağlantı noktaları/anahtar önekleri; konteynerlerin izolasyonu.
Kapı: sözleşme yeşili (CDC doğrulaması), şartname geçerli (tiftik), negatifler geçti.

11) Antipatterns

Gerçek hizmette Moki "kopya" kusurları - yanlış güven. Sözleşmelerle ve periyodik kayıt/doğrulama ile işlenir.
Her testte tüm dünyanın "makromokları" - kırılganlık, pahalı ana akım. İnce portlar ve ACL'ler yapın.
Gerçek entegrasyonun gerekli olduğu E2E Moki (özellikle HMAC/mTLS ile ödemeler/web kitapları).
Zaman/rastgele/ağ yarışları nedeniyle pullar - sahte saat, deterministik koltuklar kullanın.
Düzeltmelerdeki/depolardaki sırlar. Sırlar - sadece gizli depolama yoluyla CI.

12) iGaming/Finansın Özellikleri

Ödemeler/para çekme: Mokes 'Idempotency-Key', 'Retry-After', HMAC/mTLS, yaptırım kodları ve 'uzun' yanıtları desteklemelidir.
Bonus mantığı/dolandırıcılıkla mücadele: hız/429 senaryoları, ATO/challenge, TTL ile risk çözümleri 'allow/deny/challenge'.
KYC/AML: KYC seviyelerine göre sandbox yanıtları, negatifler (uyumsuzluk, geçersiz belgeler), anti-replay ('X-Timestamp' penceresi) içeren web kitapları.
Yargı Alanları/Kiracılar: Gerekli 'X-Kiracı/X-Bölgesi' başlıkları, farklı yanıt profilleri.

13) Mini tarifler (hile sayfası)

Tekrar ödeme: WireMock "Senaryolar" - ilk '201', ikinci '409 yinelenen'.
Yavaş PSP: MockServer 'responseDelay' + istemcide deneme başına zaman aşımını denetleme.
Webhooks: yerel HTTP sunucusu + HMAC imza doğrulaması; 5 saniye sonra tekrar oynatma çift oluşturmaz.
Kafka kopyalar: aynı mesajı iki kez gönderin; Handler idempotent olmalıdır.
gRPC durumları: 'kodlar' testlerinin matrisi (InvalidArgument, DeadlineExceeded, ResourceExtended).

14) Prod Hazırlık Kontrol Listesi

  • Bağlantı noktaları/bağdaştırıcılar vurgulanır; Entegrasyonlar arayüzlerin arkasına gizlenmiştir.
  • HTTP/gRPC için - negatifleri olan sözleşmeye duyarlı bıçaklamalar (Pact/OpenAPI/Proto) vardır.
  • Brokerler için - Testcontainers + Registry; yinelenen/sipariş/büyük mesaj testleri.
  • Kaos: gecikmeler, zaman aşımları, sıfırlama, 429/503 ile 'Retry-After'; Ağ taklit edilir (Toxiproxy/netem).
  • PII'siz fikstürler; sahte saat; idempotency basılır.
  • CI matrisi: birim> bileşen> entegrasyon; Log/sözleşme eserler korunur.
  • Sağlayıcı sanal alanları: anahtarlar ayrılır, uç noktalar yapılandırılır, bir çalışma kitabı vardır.
  • Kayıt/Yeniden Oynatma programa göre güncellenir, izler düzenlenir.
  • kontrol altında lapa lapa metrikler ve test süreleri; büyümede uyarılar.

15) TL; DR

Entegrasyonları ince bağlantı noktalarından ayırın ve görev için doğru aracı kullanın: basit durumlar için taslaklar, etkileşimlerin doğrulanması için alaylar, gerçekçi davranış için sahte, ağ ve nadir hatalar için hizmet sanallaştırma ve kaos. Moki sözleşmesini bilinçli hale getirin (Pact/OpenAPI/Proto), düzeltmeleri deterministik ve PII'siz tutun, gecikmeleri/zaman aşımlarını/429/5xx'i simüle edin. CI'da bir piramit inşa edin: birim - bileşen - entegrasyon; Kırmızı sözleşmelerle serbest bırakma bloğu. Ödeme/CCM yolları için HMAC/mTLS, idempotans ve olumsuz senaryoları göz önünde bulundurun.

Contact

Bizimle iletişime geçin

Her türlü soru veya destek için bize ulaşın.Size yardımcı olmaya her zaman hazırız!

Entegrasyona başla

Email — zorunlu. Telegram veya WhatsApp — isteğe bağlı.

Adınız zorunlu değil
Email zorunlu değil
Konu zorunlu değil
Mesaj zorunlu değil
Telegram zorunlu değil
@
Telegram belirtirseniz, Email’e ek olarak oradan da yanıt veririz.
WhatsApp zorunlu değil
Format: +ülke kodu ve numara (örneğin, +90XXXXXXXXX).

Butona tıklayarak veri işlemenize onay vermiş olursunuz.