GH GambleHub

السخرية وأماكن التكامل

1) لماذا نحتاج إلى البراغيش والسدادات

التكامل مع مقدمي الدفع وخدمات KYC ووسطاء الرسائل و CRM وما إلى ذلك يجعل الاختبارات بطيئة وغير مستقرة ومكلفة. يسمح الموكي/المقابس بما يلي:
  • عزل منطق الخدمة عن بيئة غير مستقرة
  • تحديد الردود والأخطاء
  • إعادة إنتاج الحالات الحدودية النادرة (المهلة، 429/5xx، عدم الاتساق) ؛
  • إجراء الاختبارات محليًا وفي CI بسرعة وبشكل متوقع.
💡 المبدأ: كلما انخفض مستوى الاختبار (الوحدة/العنصر)، زاد استبدالنا ؛ كلما اقتربت من واقع الإنتاج (التكامل/E2E)، قل عدد المقابس.

2) المصطلحات والتصنيف

Stub عبارة عن كعب بسيط مع استجابة ثابتة، بدون فحوصات تفاعل.
Mock - كائن ينتظر المكالمات ويتحقق منها (طلب/رقم/حجج).
Fake هو تنفيذ مبسط (على سبيل المثال، مستودع In-Memory) بسلوك حقيقي.
الجاسوس هو غلاف يسجل المكالمات الفعلية.
افتراضية الخدمة هي خدمة خارجية «افتراضية» مع نصوص وحالة وميزات الشبكة.
التسجيل/إعادة التشغيل - تسجيل حركة المرور الحقيقية والتشغيل اللاحق (مع المرشحات/الإصدار).

متى تختار:
الحالةأداة
منطق الأعمال الخالصمزيفة (في الذاكرة)، سخرية الوحدة
تكامل HTTP مع الحالات البسيطةStubs (WireMock/MockServer/HTTPServer)
تحقق من عقد العميل لمزودCDC يسخر (ميثاق)
سيناريوهات/ظروف/أخطاء الشبكة المعقدةافتراضية الخدمة/Hoverfly/MockServer
رسائل (كافكا/RabbitMQ)Testcontainers + المنتج/المستهلك الواعي بالمخطط

3) الأنماط المعمارية للاختبار

المنافذ والمحولات (سداسي): خذ التكامل إلى ما وراء الواجهات - من السهل استبداله بمزيف/وهمي.
طبقة مكافحة الفساد (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، والتأخير والنوافذ «القشرية».

4. 4 العقدة (Nock )/Python (الردود )/Go ('httptt')

نوك:
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»، وتنفيذ الطرق باستخدام الاستجابات الخاضعة للرقابة.
تحقق من البيانات الوصفية (الرؤوس)، والحالات ('الرموز. InvalidArgument ',' codes. الموعد النهائي تجاوزه).

GogRPC مزيف (مقتطف):
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) المشاركات والجداول: كافكا/RabbitMQ

6. 1 موكي الواعي بالمخطط

استخدم سجل المخطط والتحقق من صحة Avro/JSON-Schema/Protobuf في الاختبارات.
اختبار المنتج: الرسالة مطابقة للمخطط ؛ اختبار المستهلك: يقبل الإصدارات القديمة والجديدة.

6. 2 Testcontainers (Kafka + Registry مثال)

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)

يولد المستهلك توقعات → يتحقق → ملف الاتفاقية على الحامل.
يلعب خادم Pact stub التوقعات لاختبارات تكامل العملاء.

7. 2 OpenAPI/Protobuf → جيل مستقر

الأدوات التي ترفع الخادم الوهمي من المواصفات (بما في ذلك Prism، openapi-mock، grpc-mock).
إدراج أمثلة/رموز سلبية في المواصفات: هذا أيضًا عقد.

8) الشبكة والفوضى: محاكاة الإخفاقات

حالات التأخير والترفيه: ثابتة/موزعة ؛ التحقق من المواعيد النهائية وفترة الاستراحة لكل تجربة.
المهلات/الفواصل: اتصالات نصف مفتوحة، RST، إعادة ضبط البث H2، 503/Retry-After.
فقدان/تكرار العبوة: لـ gRPC/تيارات.
الأدوات: Toxiproxy، MockServer (حقن الخطأ)، xk6-disruptor، netem in CI.

مثال على التوكسيبروكسي (CLI):

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

9) البيانات والأسرار والحتمية

التنقيح والمواد التركيبية: لا يوجد مؤشر استثمار دولي في الإصلاحات ؛ المال - كسر عشري/تنسيق صارم.
تحديد الوقت: ساعة مزيفة ؛ «أمس/اليوم» - السيطرة.
الفراغ: نفس رد «Idempotency-Key» → نفس الرد.
المولدات: مصانع/بناة بيانات ذات قيم شفافة (على سبيل المثال، «الاختبار _ المستخدم _ 001»).
إصلاحات الإصدار (العلامات)، لا تخزن الإجابات «المحذوفة» دون وساطة.

10) CI/CD والبيئات

المصفوفة: الوحدة (المزيفة أثناء العملية) → المكون (الافتراضية المحلية) → التكامل (الحد الأدنى من moks، Testcontainers).
القطع الأثرية: ملفات ميثاق، لقطات OpenAPI، سجلات خادم ioc، PCAP للقطرات.
التوازي: الموانئ/البادئات الرئيسية الفريدة ؛ عزل الحاويات.
البوابة: العقد الأخضر (التحقق من مركز السيطرة على الأمراض)، المواصفات صالحة (الوبر)، السلبيات مرت.

11) أنتيباترن

موكي «نسخ» عيوب في الخدمة الحقيقية → ثقة زائفة. يعامل بالعقود والسجل الدوري/التحقق.
«الماكروموكس» للعالم بأسره في كل اختبار → الهشاشة، الاتجاه السائد باهظ الثمن. اصنع موانئ رقيقة و ACLs.
Moki في E2E التي تحتاج إلى تكامل حقيقي (لا سيما المدفوعات/الخطابات الشبكية مع HMAC/mTLS).
الرقائق بسبب الوقت/السباق العشوائي/الشبكة → استخدام ساعة مزيفة، مقاعد حتمية.
أسرار في الإصلاحات/المستودعات. الأسرار - فقط من خلال التخزين السري CI.

12) تفاصيل iGaming/Finance

المدفوعات/عمليات السحب: يجب على Mokes دعم «Idempotency-Key» و «Retry-After» و HMAC/mTLS ورموز العقوبات والردود «الطويلة».
منطق المكافأة/مكافحة الاحتيال: سيناريوهات السرعة/429، ATO/التحدي، حلول المخاطر «تسمح/تنكر/تتحدى» باستخدام TTL.
KYC/AML: استجابات الصندوق الرملي حسب مستويات KYC، السلبيات (عدم التطابق، المستندات غير الصالحة)، خطافات الويب مع إعادة التشغيل المضادة (نافذة «X-Timestamp»).
الولايات القضائية/المستأجرون: عناوين «X-Tenant/X-Region» المطلوبة، وملامح استجابة مختلفة.

13) وصفات صغيرة (ورقة غش)

تكرار الدفع: WireMock «سيناريوهات» - الأول «201» والثاني «409 مكرر».
PSP البطيء: MockServer «الاستجابة التأخير» + التحقق من المهلة لكل تجربة على العميل.
خطوط الويب: خادم HTTP المحلي + التحقق من توقيع HMAC ؛ إعادة التشغيل بعد 5 ثوانٍ لا تخلق ضعف.
يكرر كافكا: انشر نفس الرسالة مرتين ؛ يجب أن يكون المعالج أبله.
حالات gRPC: مصفوفة اختبارات «الرموز» (InvalidArgument، DeadlineExceded، ResourceExhauted).

14) قائمة التحقق من الاستعداد

  • تسليط الضوء على الموانئ/المحولات ؛ التكامل مخفي خلف الواجهات.
  • بالنسبة لـ HTTP/gRPC - هناك طعنات مدركة للعقد (Pact/OpenAPI/Proto) ذات سلبيات.
  • للسماسرة - Testcontainers + Registry ؛ تكرار/طلب/اختبارات الرسائل الكبيرة.
  • الفوضى: التأخير، المهلة، إعادة الضبط، 429/503 مع «إعادة التجربة بعد» ؛ يتم محاكاة الشبكة (Toxiproxy/netem).
  • التجهيزات الثابتة بدون PII ؛ الساعة المزيفة ؛ سك الفراغ.
  • مصفوفة CI: وحدة → عنصر → التكامل ؛ يتم الحفاظ على القطع الأثرية/العقد.
  • صناديق الرمل الخاصة بالمزود: يتم فصل المفاتيح، ويتم تكوين نقاط النهاية، وهناك دفتر تشغيل.
  • يتم تحديث Record/Replay في الموعد المحدد، ويتم تحرير الآثار.
  • المقاييس المتقلبة ومدد الاختبار الخاضعة للمراقبة ؛ تنبيهات النمو.

15) TL ؛ د

عزل عمليات التكامل من خلال الموانئ الرقيقة واستخدام الأداة المناسبة للمهمة: الأذرع للحالات البسيطة، والسخرية للتحقق من التفاعلات، والتزييف للسلوك الواقعي، وافتراضية الخدمة والفوضى للشبكة والأخطاء النادرة. اجعل عقد moki واعيًا (Pact/OpenAPI/Proto)، واحتفظ بالإصلاحات حتمية وخالية من PII، وقم بمحاكاة التأخيرات/المهلات/429/5xx. في CI، بناء هرم: وحدة → عنصر → التكامل ؛ كتلة إطلاق مع عقود حمراء. بالنسبة لمسارات الدفع/CCM، ضع في اعتبارك HMAC/mTLS، والخصوصية والسيناريوهات السلبية.

Contact

اتصل بنا

تواصل معنا لأي أسئلة أو دعم.نحن دائمًا جاهزون لمساعدتكم!

بدء التكامل

البريد الإلكتروني — إلزامي. تيليغرام أو واتساب — اختياري.

اسمك اختياري
البريد الإلكتروني اختياري
الموضوع اختياري
الرسالة اختياري
Telegram اختياري
@
إذا ذكرت تيليغرام — سنرد عليك هناك أيضًا بالإضافة إلى البريد الإلكتروني.
WhatsApp اختياري
الصيغة: رمز الدولة + الرقم (مثال: +971XXXXXXXXX).

بالنقر على الزر، فإنك توافق على معالجة بياناتك.