GH GambleHub

Κοροϊδία και αποκόμματα για ενσωμάτωση

1) Γιατί χρειαζόμαστε νάνους και βύσματα

Οι ενοποιήσεις με παρόχους πληρωμών, υπηρεσίες KYC, μεσίτες μηνυμάτων, CRM κ.λπ. καθιστούν τις δοκιμές αργές, ασταθείς και δαπανηρές. Τα Moki/βύσματα επιτρέπουν:
  • Απομονωμένη λογική υπηρεσίας από ασταθές περιβάλλον
  • Προσδιορισμός απαντήσεων και σφαλμάτων
  • αναπαραγωγή σπάνιων περιπτώσεων στα σύνορα (χρονικά περιθώρια, 429/5xx, ασυνέπεια)·
  • διεξαγωγή δοκιμών σε τοπικό και σε ΚΚΠ γρήγορα και προβλέψιμα.
💡 Αρχή: όσο χαμηλότερο είναι το επίπεδο δοκιμής (μονάδα/συστατικό), τόσο περισσότερο αντικαθιστούμε. όσο πλησιέστερα στην πραγματικότητα της παραγωγής (Ολοκλήρωση/E2E), τόσο λιγότερα βύσματα.

2) Όροι και ταξινόμηση

Το stub είναι ένα απλό απόκομμα με σταθερή απόκριση, χωρίς ελέγχους αλληλεπίδρασης.
Mock - ένα αντικείμενο που περιμένει για κλήσεις και τις επαληθεύει (παραγγελία/αριθμός/επιχειρήματα).
Το Fake είναι μια απλοποιημένη εφαρμογή (για παράδειγμα, ένα αποθετήριο In-Memory) με πραγματική συμπεριφορά.
Ο κατάσκοπος είναι ένα περιτύλιγμα που καταγράφει πραγματικές κλήσεις.
Η εικονοποίηση υπηρεσιών είναι μια «εικονική» εξωτερική υπηρεσία με σενάρια, κατάσταση και χαρακτηριστικά δικτύου.
Εγγραφή/αναπαραγωγή - καταγραφή πραγματικής κυκλοφορίας και επακόλουθη αναπαραγωγή (με φίλτρα/έκδοση).

Πότε να επιλέξετε:
ΚατάστασηΕργαλείο
Καθαρή επιχειρηματική λογικήΑπομιμήσεις (στη μνήμη), πλάκες μονάδων
Ενσωμάτωση HTTP με απλές περιπτώσειςStubs (WireMock/MockServer/HTTPServer)
Έλεγχος σύμβασης πελάτη με τον πάροχοCDC mocks (Σύμφωνο)
Σύνθετα σενάρια/συνθήκες/σφάλματα δικτύουΕικονοποίηση υπηρεσίας/Hoverfly/MockServer
Μηνύματα (Kafka/RabbitMQ)Testcontainers + proma-aware production/consumer stubs

3) Αρχιτεκτονικά πρότυπα για τη δυνατότητα δοκιμής

Ports & Adapters (Hexagonal): Πάρτε την ενσωμάτωση πέρα από τις διεπαφές - είναι εύκολο να αντικατασταθεί με ψεύτικο/ψεύτικο.
Στρώμα κατά της διαφθοράς (ACL): μια ενότητα μεταφράζει ένα εξωτερικό μοντέλο σε ένα μοντέλο τομέα - λιγότερα σημεία moka.
Πελάτες που γνωρίζουν τις συμβάσεις: Η γενιά OpenAPI/Protobuf → λιγότερες χειροκίνητες ασυνέπειες.
Χαρακτηριστικά σημαιών και τρόπων αμμοκιβωτίου: ασφαλή κλειδιά/τελικά σημεία για τη σταθερότητα του παρόχου.

4) HTTP: εργαλεία και παραδείγματα

4. 1 WireMock (αυτόνομη/Java DSL)

Μαχαιριά JSON:
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 (με έλεγχο σώματος και τροποποιήσεις):
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 (Δυναμική/Επαληθεύσεις)

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 (μεσαίο λογισμικό, εγγραφή/επανάληψη)

Καταγράψτε την κίνηση στο αμμοκιβώτιο του παρόχου, καθαρίστε το PII, διορθώστε το ως διάταξη.
Σε κατάσταση προσομοίωσης, προσθέστε παραλλαγές: 200/4xx/5xx, καθυστερήσεις και «flaky» παράθυρα.

4. 4 Κόμβος (Nock )/Python (απαντήσεις )/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
Πήγαινε:
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 Παραγωγή μαχαιριών

Δημιουργία ενός εξυπηρετητή με '.proto', εφαρμογή μεθόδων με ελεγχόμενες απαντήσεις.
Έλεγχος μεταδεδομένων (κεφαλίδες), καταστάσεων (κωδικοί '. Μη έγκυρο επιχείρημα ',' κωδικοί. Reviewed ').

Ψεύτικο gRPC (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. 2 grpcurl για αρνητικά


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

6) Θέσεις και ρεύματα: Kafka/RabbitMQ

6. 1 Σύστημα-aware moki

Χρήση μητρώου Schema και επικύρωση Avro/JSON-Schema/Protobuf σε δοκιμές.
Δοκιμή παραγωγού: το μήνυμα αντιστοιχεί στο σχήμα. Δοκιμή καταναλωτή: αποδέχεται παλαιές και νέες εκδόσεις.

6. 2 Testcontainers (Παράδειγμα μητρώου Kafka +)

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 Αρνητικά

Αντίγραφα, αναδιάταξη της παραγγελίας, καθυστέρηση παράδοσης, «δηλητηριώδη» μηνύματα (νεκρό γράμμα).
Μεγάλα μηνύματα (κοντά στο όριο), μη αναγνωρισμένες εκδόσεις σχημάτων.

7) Βύσματα γνώσης συμβάσεων

7. 1 Σύμφωνο (CDC mocks)

Ο καταναλωτής δημιουργεί προσδοκίες → ο πάροχος → συμφωνιών επαληθεύει στο περίπτερο.
Το Pact stub server παίζει προσδοκίες για δοκιμές ενσωμάτωσης πελατών.

7. 2 OpenAPI/Protobuf → σταθερή παραγωγή

Εργαλεία που αυξάνουν το mock server από την προδιαγραφή (συμπεριλαμβανομένων Prism, openapi-mock, grpc-mock).
Συμπεριλαμβάνονται αρνητικά παραδείγματα/κωδικοί στη συγγραφή υποχρεώσεων: πρόκειται επίσης για σύμβαση.

8) Δίκτυο και χάος: προσομοίωση αστοχιών

Καθυστερήσεις και νευρικότητα: σταθερές/κατανεμημένες· έλεγχος των προθεσμιών και ανά δοκιμή χρονοδιάγραμμα.
Timeouts/breaks: half-open συνδέσεις, RST, retet stream H2, 503/Retry-After.
Απώλεια/αντίγραφο πακέτου: για gRPC/ροές.
Toxiproxy, MockServer (ένεση βλάβης), xk6-διαταράκτης, netem σε CI.

Παράδειγμα Τοξιπροξυ (CLI):

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

9) Δεδομένα, μυστικά και προσδιορισμός

Redact και συνθετικά: καμία PII σε διορθώσεις. χρήματα - δεκαδική/αυστηρή μορφοποίηση.
Προσδιορισμός χρόνου: ψεύτικο ρολόι. «χθες/σήμερα» - έλεγχος.
Idempotency: το ίδιο 'Idempotency-Key' → ίδια απάντηση.
Γεννήτριες: εργοστάσια/κατασκευαστές δεδομένων με διαφανείς τιμές (π.χ. «test _ user _ 001»).
Οι διορθώσεις έκδοσης (ετικέτες) δεν αποθηκεύουν «αφαιρεθείσες» απαντήσεις χωρίς διαμεσολάβηση.

10) CI/CD και περιβάλλοντα

Μήτρα: μονάδα (απομιμήσεις κατά τη διαδικασία) → συνιστώσα (τοπική εικονοποίηση) → ολοκλήρωση (ελάχιστες moks, Testcontainers).
Αντικείμενα: αρχεία συμφωνίας, στιγμιότυπα OpenAPI, αρχεία καταγραφής ioc server, PCAP για σταγόνες.
παραλληλισμός: μοναδικές θύρες/βασικά προθέματα· μόνωση δοχείων.
Πύλη: πράσινη σύμβαση (επαλήθευση CDC), έγκυρη προδιαγραφή (lint), εγκριθέντα αρνητικά.

11) Αντιπατερίδια

Moki «αντίγραφο» ελαττώματα στην πραγματική υπηρεσία → ψευδή εμπιστοσύνη. Αντιμετωπίζεται με συμβάσεις και περιοδική καταγραφή/επαλήθευση.
Τα «μακρομόκα» ολόκληρου του κόσμου σε κάθε δοκιμή → εύθραυστο, ακριβό mainstream. Κατασκευή λεπτών λιμένων και ACL.
Moki σε E2E όπου απαιτείται πραγματική ολοκλήρωση (ιδίως πληρωμές/webhooks με HMAC/mTLS).
Νιφάδες λόγω χρόνου/τυχαίων/δικτυακών αγώνων → χρησιμοποιούν ψεύτικο ρολόι, καθορισμένα καθίσματα.
Μυστικά σε διορθώσεις/αποθετήρια. Μυστικά - μόνο μέσω μυστικής αποθήκευσης CI.

12) Ιδιαιτερότητες του iGaming/Finance

Πληρωμές/αναλήψεις: Οι Mokes πρέπει να υποστηρίζουν «Idempotency-Key», «Retry-After», HMAC/mTLS, κώδικες κυρώσεων και «long» απαντήσεις.
Λογική μπόνους/καταπολέμηση της απάτης: ταχύτητα/429 σενάρια, ATO/πρόκληση, λύσεις κινδύνου «επιτρέπουν/αρνούνται/αμφισβητούν» TTL.
KYC/AML: sandbox απαντήσεις από τα επίπεδα KYC, αρνητικά (αναντιστοιχία, άκυρα έγγραφα), webhooks με αντι-αναπαραγωγή (παράθυρο 'X-Timestamp').
Δικαιοδοσίες/Ενοικιαστές: Απαιτούμενες επικεφαλίδες «X-Tenant/X-Region», διαφορετικά προφίλ απόκρισης.

13) Μίνι συνταγές (φύλλο εξαπάτησης)

Επαναλαμβανόμενη πληρωμή: WireMock «Σενάρια» - πρώτο '201', δεύτερο '409 αντίγραφο'.
Αργή PSP: MockServer 'finance Delay' + checking per-try timeout on client.
Webhooks: τοπικός διακομιστής HTTP + επαλήθευση υπογραφής HMAC. η επανάληψη μετά από 5 δευτερόλεπτα δεν δημιουργεί διπλό.
Αντίγραφα Kafka: ανάρτηση του ίδιου μηνύματος δύο φορές. ο χειριστής πρέπει να είναι ευδιάκριτος.
Κατάσταση gRPC: πίνακας δοκιμών «κωδικών» (InvalidArgent, DefinitionSupered, ResourceExtrected).

14) Κατάλογος ελέγχου ετοιμότητας Prod

  • Επισημαίνονται οι λιμένες/προσαρμογείς. οι ενότητες είναι κρυμμένες πίσω από τις διεπαφές.
  • Για HTTP/gRPC - υπάρχουν μαχαιριές που γνωρίζουν τις συμβάσεις (Pact/OpenAPI/Proto) με αρνητικά.
  • Για μεσίτες - Testcontainers + Registry; δοκιμές διπλών/παραγγελιών/μεγάλων μηνυμάτων.
  • Χάος: καθυστερήσεις, χρονοδιαγράμματα, επαναφορά, 429/503 με το 'Retry-After'. το δίκτυο είναι προσομοιωμένο (Toxiproxy/netem).
  • Εξαρτήματα στερέωσης χωρίς PII. ψεύτικο ρολόι· Η ιδεατότητα κόβεται.
  • Μήτρα CI: μονάδα → συνιστώσα → ολοκλήρωση· συντηρούνται αντικείμενα καταγραφής/σύμβασης.
  • Αμμοκιβώτια παρόχου: τα κλειδιά είναι διαχωρισμένα, τα τελικά σημεία είναι διαμορφωμένα, υπάρχει ένα runbook.
  • Η εγγραφή/επανάληψη ενημερώνεται σύμφωνα με το χρονοδιάγραμμα, τα ίχνη επεξεργάζονται.
  • αστραφτερές μετρήσεις και διάρκεια δοκιμής υπό έλεγχο· προειδοποιήσεις για την ανάπτυξη.

15) TL· DR

Απομονώστε την ενσωμάτωση μέσω λεπτών θυρών και χρησιμοποιήστε το σωστό εργαλείο για την εργασία: αποκόμματα για απλές περιπτώσεις, κοροϊδία για την επαλήθευση των αλληλεπιδράσεων, πλαστά για ρεαλιστική συμπεριφορά, εικονοποίηση υπηρεσιών και χάος για δίκτυα και σπάνια σφάλματα. Κάντε το συμβόλαιο moki συνειδητό (Pact/OpenAPI/Proto), κρατήστε τις διορθώσεις deterministic και PII-free, προσομοιώστε καθυστερήσεις/timeouts/429/5xx. Στον ΚΚΠ, κατασκευάστε μια πυραμίδα: μονάδα → συνιστώσα → ολοκλήρωση. μπλοκ αποδέσμευσης με κόκκινα συμβόλαια. Για τις διαδρομές πληρωμής/CCM, εξετάστε HMAC/mTLS, ταυτότητα και αρνητικά σενάρια.

Contact

Επικοινωνήστε μαζί μας

Επικοινωνήστε για οποιαδήποτε βοήθεια ή πληροφορία.Είμαστε πάντα στη διάθεσή σας.

Έναρξη ολοκλήρωσης

Το Email είναι υποχρεωτικό. Telegram ή WhatsApp — προαιρετικά.

Το όνομά σας προαιρετικό
Email προαιρετικό
Θέμα προαιρετικό
Μήνυμα προαιρετικό
Telegram προαιρετικό
@
Αν εισαγάγετε Telegram — θα απαντήσουμε και εκεί.
WhatsApp προαιρετικό
Μορφή: κωδικός χώρας + αριθμός (π.χ. +30XXXXXXXXX).

Πατώντας «Αποστολή» συμφωνείτε με την επεξεργασία δεδομένων.