GH GambleHub

एकीकरण के लिए मॉकिंग और स्टब्स

1) हमें मिड्स और प्लग की आवश्यकता क्यों है

भुगतान प्रदाताओं, केवाईसी सेवाओं, संदेश दलालों, सीआरएम आदि के साथ एकीकरण परीक्षणों को धीमा, अस्थिर और महंगा बनाते हैं। मोकी/प्लग की अनुमति:
  • अस्थिर वातावरण से सेवा तर्क को अलग करें
  • प्रतिक्रियाएँ और त्रुटियाँ निर्धा
  • दुर्लभ सीमा मामलों (टाइमआउट, 429/5xx, असंगति) को पुन: पेश करें;
  • स्थानीय और सीआई में जल्दी और अनुमानित रूप से परीक्षण चलाएं।
💡 सिद्धांत: परीक्षण स्तर (इकाई/घटक) जितना कम होगा, उतना ही हम प्रतिस्थापित करेंगे; उत्पादन वास्तविकता (एकीकरण/E2E) के करीब, कम प्लग।

2) शर्तें और वर्गीकरण

स्टब एक निश्चित प्रतिक्रिया के साथ एक सरल स्टब है, बिना बातचीत की जांच के।

मॉक - एक वस्तु जो कॉल की प्रतीक्षा करती है और उन्हें सत्यापित करती है (क्रम/संख्या/तर्क)।

फेक वास्तविक व्यवहार के साथ एक सरलीकृत कार्यान्वयन (उदाहरण के लिए, एक इन-मेमोरी रिपॉजिटरी) है।

जासूस एक रैपर है जो वास्तविक कॉल रिकॉर्ड करता है।

सेवा वर्चुअलाइजेशन स्क्रिप्ट, स्थिति और नेटवर्क सुविधाओं के साथ एक "आभासी" बाहरी सेवा है।

रिकॉर्ड/रिप्ले - वास्तविक ट्रैफिक और बाद के प्लेबैक की रिकॉर्डिंग (फिल्टर/संस्करण के साथ)।

कब चुनें:
स्थितिऔज़ार
शुद्ध व्यापार तर्कफेक (इन-मेमोरी), यूनिट-मॉक्स
सरल मामलों के साथ HTTP एकीकरणस्टब्स (वायरमॉक/मॉकसर्वर/HTTPServer)
प्रदाता को ग्राहक संविदा की जाँचसीडीसी मॉक (संधि)
जटिल नेटवर्क परिदृश्य/शर्तें/त्रुटियाँसेवा वर्चुअलाइजेशन/Hoverfly/MockServer
संदेश (काफ्का/RabbitMQ)Testconteners + स्कीमा-जागरूक निर्माता/उपभोक्ता स्ट

3) परीक्षण के लिए वास्तुशिल्प पैटर्न

पोर्ट्स एंड एडेप्टर्स (हेक्सागोनल): इंटरफेस से परे एकीकरण लें - इसे नकली/नकली से बदलना आसान है।

भ्रष्टाचार विरोधी परत (एसीएल): एक मॉड्यूल एक बाहरी मॉडल को डोमेन मॉडल में अनुवाद करता है - कम मोका बिंदु।

अनुबंध-जागरूक ग्राहक: OpenAPI/Protobuf पीढ़ी - कम मैनुअल विसंगतियाँ।

फ़ीचर फ्लैग और सैंडबॉक्स मोड: प्रदाता के स्थिर के लिए सुरक्षित कुंजी/समापन बिंदु।

4) HTTP: उपकरण और उदाहरण

4. 1 वायरमॉक (स्टैंडअलोन/जावा डीएसएल)

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 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 मॉकसर्वर (गतिशीलता/सत्यापन)

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 होवरफ्लाई (मिडिलवेयर, रिकॉर्ड/रीप्ले)

प्रदाता के सैंडबॉक्स के खिलाफ यातायात रिकॉर्ड करें, पीआईआई को साफ करें, इसे स्थिरता के रूप में ठीक करें।

अनुकरण मोड में, विविधताएं जोड़ें: 200/4xx/5xx, देरी और "परतदार" खिड़कियां।

4. 4 नोड (नोक )/पायथन (प्रतिक्रियाएँ )/गो ('httpest')

नॉक:
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) जीआरपीसी/प्रोटोबुफ

5. 1 स्टैब पीढ़ी

'.proto' द्वारा सर्वर उत्पन्न करें, नियंत्रित प्रतिक्रियाओं के साथ विधियों को लागू करें.

मेटाडेटा (हेडर), स्टेटस ('कोड चेक करें। अमान्य तर्क ',' कोड। Exeded ')।

GRPC नकली जाओ (स्निपेट):
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) पोस्ट और स्ट्रीम: काफ्का/रैबिटएमक्यू

6. 1 स्कीमा-जागरूक मोकी

स्कीमा रजिस्ट्री का उपयोग करें और परीक्षण में एवरो/JSON-Schema/Protobuf को मान्य करें।

निर्माता परीक्षण: संदेश स्कीमा से मेल खाता है; उपभोक्ता परीक्षण: पुराने और नए संस्करणों को स्वीकार करता है।

6. 2 टेस्टनकर्ता (काफ्का + रजिस्ट्री उदाहरण)

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 संधि (सीडीसी मॉक)

उपभोक्ता उम्मीदें पैदा करता है - संधि फ़ाइल प्रदाता स्टैंड पर सत्यापित करता है।

पैक्ट स्टब सर्वर क्लाइंट एकीकरण परीक्षणों के लिए अपेक्षाओं को

7. 2 OpenAPI/Protobuf → स्थिर पीढ़ी

उपकरण जो मॉक सर्वर को विनिर्देशन से उठाते हैं (प्रिज्म, ओपनपी-मॉक, ग्रेप-मॉक सहित)।

विनिर्देशन में नकारात्मक उदाहरण/कोड शामिल करें: यह एक अनुबंध भी है।

8) नेटवर्क और अराजकता: विफलताओं का अनुकरण

देरी और झटका: निश्चित/वितरित; समय सीमा और प्रति-कोशिश समय की जाँच करें।

टाइमआउट/ब्रेक: आधा-खुला कनेक्शन, आरएसटी, रीसेट स्ट्रीम एच 2, 503/Retry-After।

पैकेट हानि/डुप्लिकेट: gRPC/धाराओं के लिए।

उपकरण: Toxiproxy, MockServer (गलती इंजेक्शन), xk6-व्यवधान, CI में netem।

Toxiproxy (CLI) का उदाहरण:

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

9) डेटा, रहस्य और नियतावाद

रिडैक्ट और सिंथेटिक्स: फिक्स में कोई पीआईआई नहीं; पैसा - दशमलव/सख्त स्वरूपण।

समय निर्धारण: नकली घड़ी; "कल/आज" - नियंत्रण।

Idempotency: समान 'Idempotency-Key' - एक ही प्रतिक्रिया।

जनरेटर: पारदर्शी मूल्यों के साथ डेटा के कारखाने/बिल्डर (उदाहरण के लिए, 'परीक्षण _ user _ 001')।

संस्करण सुधार (टैग), मध्यस्थता के बिना "हटाए गए" उत्तरों को संग्रहीत न करें।

10) सीआई/सीडी और वातावरण

मैट्रिक्स: यूनिट (इन-प्रोसेस फेक) → घटक (स्थानीय वर्चुअलाइजेशन) → एकीकरण (न्यूनतम मोक, टेस्टनटेनर)।

कलाकृतियाँ: संधि फ़ाइलें, ओपनएपीआई स्नैपशॉट, आईओसी सर्वर लॉग, ड्रॉप के लिए पीसीएपी।

समानतावाद: अद्वितीय बंदरगाह/प्रमुख उपसर्ग; कंटेनरों का इन्सुलेशन।

गेट: अनुबंध ग्रीन (सीडीसी सत्यापित), विनिर्देश मान्य (लिंट), नकारात्मक पारित।

11) एंटीपैटर्न

मोकी "कॉपी" वास्तविक सेवा में दोष - झूठे विश्वास। संविदाओं और आवधिक रिकॉर्ड के साथ व्यवहार/सत्यापन।

हर परीक्षण में पूरी दुनिया के "मैक्रोमॉक्स" - नाजुकता, महंगी मुख्यधारा। पतले बंदरगाह और एसीएल बनाएं।

मोकी में - जहां वास्तविक एकीकरण की आवश्यकता होती है (विशेष रूप से एचएमएसी/एमटीएलएस के साथ भुगतान/वेबहूक)।

समय/यादृच्छिक/नेटवर्क रेसिंग के कारण गुच्छे - नकली घड़ी, नियतात्मक सीटों का उपयोग करें।

सुधार/भंडार में रहस्य। रहस्य - केवल गुप्त भंडारण सीआई के माध्यम से।

12) आईगेमिंग/वित्त की विशिष्टताएं

भुगतान/निकासी: मोक्स को 'आइडेम्पोटेंसी-की', 'रेट्री-आफ्टर', एचएमएसी/एमटीएलएस, मंजूरी कोड और 'लंबी' प्रतिक्रियाओं का समर्थन करना चाहिए।

बोनस तर्क/विरोधी धोखाधड़ी: वेग/429 परिदृश्य, एटीओ/चुनौती, जोखिम समाधान 'अनुमति/इनकार/चुनौती' टीटीएल।

KYC/AML: KYC स्तरों द्वारा सैंडबॉक्स प्रतिक्रियाएं, नकारात्मक (बेमेल, अमान्य दस्तावेज), एंटी-रीप्ले ('X-Timestamp' विंडो) के साथ वेबहूक।

न्यायालय/किरायेदार: आवश्यक 'एक्स-किरायेदार/एक्स-रीजन' शीर्षक, विभिन्न प्रतिक्रिया प्रोफाइल।

13) मिनी व्यंजनों (धोखा पत्र)

दोहराएं भुगतान: वायरमॉक "परिदृश्य" - पहला '201', दूसरा '409 डुप्लिकेट'।

धीमा PSP: मॉकसर्वर ' देरी' + क्लाइंट पर प्रति-कोशिश समय की जाँच कर रहा है।

वेबहूक: स्थानीय HTTP सर्वर + HMAC हस्ताक्षर सत्यापन; 5 सेकंड के बाद रीप्ले एक डबल नहीं बनाता है।

काफ्का डुप्लिकेट: एक ही संदेश को दो बार पोस्ट करें; हैंडलर को पहचानने वाला होना चाहिए।

gRPC स्थिति: 'कोड' परीक्षणों का मैट्रिक्स (अमान्य तर्क, Exceded, ResourceExted)।

14) प्रोड रेडीनेस चेकलिस्ट

  • बंदरगाहों/एडाप्टरों पर प्रकाश डाला गया है; एकीकरण इंटरफेस के पीछे छिपे हुए हैं।
  • HTTP/gRPC के लिए - नकारात्मक के साथ अनुबंध-जागरूक स्टैब (संधि/OpenAPI/प्रोटो) हैं।
  • दलालों के लिए - टेस्टनटर + रजिस्ट्री; डुप्लिकेट/ऑर्डर/बड़ेसंदेश परीक्षण।
  • अराजकता: 'रेट्री-आफ्टर' के साथ देरी, टाइमआउट, रीसेट, 429/503; नेटवर्क का अनुकरण किया जाता है (Toxiproxy/netem)।
  • पीआईआई के बिना जुड़ नार; नकली घड़ी; पहचान का खनन किया जाता है।
  • सीआई मैट्रिक्स: इकाई → घटक → एकीकरण; लॉग/कॉन्ट्रैक्ट कलाकृतियां संरक्षित हैं।
  • प्रदाता सैंडबॉक्स: कुंजियों को अलग किया जाता है, समापन बिंदु कॉन्फ़िगर किए जाते हैं, एक रनबुक होती है।
  • अनुसूची पर रिकॉर्ड/रिप्ले अद्यतन किया जाता है, निशान संपादित किए जाते हैं।
  • परतदार मैट्रिक्स और नियंत्रण में परीक्षण अवधि; विकास पर अलर्ट।

15) टीएल; डीआर

पतले बंदरगाहों के माध्यम से एकीकरण को अलग करें और कार्य के लिए सही उपकरण का उपयोग करें: सरल मामलों के लिए स्टब, बातचीत के सत्यापन के लिए मॉक, यथार्थवादी व्यवहार के लिए नकली, सेवा वर्चुअलाइजेशन और नेटवर्क और दुर्लभ त्यों के लिए। मोकी अनुबंध-सचेत करें (पैक्ट/ओपनएपीआई/प्रोटो), फिक्स नियतात्मक और पीआईआई-मुक्त रखें, देरी/टाइमआउट/429/5xx का अनुकरण करें। सीआई में, एक पिरामिड का निर्माण करें: इकाई → घटक → एकीकरण; लाल अनुबंधों के साथ रिलीज ब्लॉक। भुगतान/CCM पथ के लिए, HMAC/mTLS, पहचान और नकारात्मक परिदृश्यों पर विचार करें।

Contact

हमसे संपर्क करें

किसी भी प्रश्न या सहायता के लिए हमसे संपर्क करें।हम हमेशा मदद के लिए तैयार हैं!

इंटीग्रेशन शुरू करें

Email — अनिवार्य है। Telegram या WhatsApp — वैकल्पिक हैं।

आपका नाम वैकल्पिक
Email वैकल्पिक
विषय वैकल्पिक
संदेश वैकल्पिक
Telegram वैकल्पिक
@
अगर आप Telegram डालते हैं — तो हम Email के साथ-साथ वहीं भी जवाब देंगे।
WhatsApp वैकल्पिक
फॉर्मैट: देश कोड और नंबर (उदा. +91XXXXXXXXXX)।

बटन दबाकर आप अपने डेटा की प्रोसेसिंग के लिए सहमति देते हैं।