الاختبار_بالتوتر
مجموعة_الإجهاد.تدق_أجزاء_التطبيق_التي_يمكن_أن_تكلّف_المستخدمين
أموالاً_—خاصة نسخ_التداول بحمل_عدائي_ومُعشَّم_ومُحقن_بالأخطاء.
تؤكد_بقاء_النظام_صحيحاً.تعيش_فيtests/StressTests،تشغل_في
بوابةdotnet test _الخضراء_الافتراضية.
النهج_—الاختبار_المحاكي_الحتمي(DST)
أفضل_طريقة_لاختبار_أنظمة_مالية_موزعة_=_ الاختبار_المحاكي_الحتمي، لكل_TigerBeetle،_FoundationDB،_Antithesis:تشغل_منطق_حقيقي_مقابل عالم_مُحاكى،تدفع_بحمل بذروي عشوائي+_الأخطاء_المُحقنة، تؤكد_الثوابت_عند_الاستقرار.كل_البذوري_و_الحتمية→أي فشل_يُعيد_إنتاج_التشابك_بالضبط_من_البذرة._مُجمَّعة_مع:
- حقن_خطأ_هندسة_الفوضى (أسلوب_Netflix_Chaos_Monkey)— انقطاعات_الاتصال،_رفض_الأوامر،_تدوير_الرمز،_موت_العقدة.
- ثوابت_مبنية_على_الخصائص —لا_تؤكد_تسلسلات_الاستدعاء_ال确切؛ تؤكد_خصائص_يجب_أن_تصمد_بغض_النظر_عن_كيف_تتخلّف_الأحداث_ (التقارب،_لا_أيتام،_على_الأكثر_واحد_يحمل_الاستئجار).
التطبيق_يشحن_عالماً_مثالياً_لـ_DST:FakeTradingSession،
جلسة_Open_API_في_الذاكرة_المؤمنة_بـ_cTrader.مجموعة_الإجهاد
تعيد_استخدامه(مرتبط،_مصدر_حقيقة_واحد)لا_محاكاة،لذا
الوسيط_المُحاكى_يتbehavior_مثل_الوسيط_الحقيقي.
ماذا_تغطي
نسخ_التداول_(التركيز_الأساسي)
تُدفع_عبر_CopyDstWorld (tests/StressTests/CopyTrading/)،
تشغلCopyEngineHost _الحقيقية_مقابل_جلسة_الأصلي،تصدر
حمل_مصدر_متسق_العضوية:
| السيناريو | يُدق |
|---|---|
Mass_fan_out… | 1_مصدر_→_80_وجهة،_150_فتح_ثم_إغلاق؛Fan-out_كامل+_تفريغ |
High_frequency_open_close… | 300_فتح/إغلاق_متداخلة_سريعة؛_لا_مواقع_مسرّبة |
Partial_close_and_scale_in_storm… | عاصفة_إغلاق_جزئي_+_scale-in؛_استقرار_مجموعة_التسميات |
Connection_flap_storm… | قطع_/إعادة_اتصال_مقبس_مُكرر_+_عدم_التزامن_في_منتصف_الرحلة؛_تقارب_المصادقة |
Order_rejection_cascade… | مجموعة_فرعية_ترفض_كل_أمر؛_الوجهات_الصحية_لا_تتأثر،_ثم_تشفى_ذاتها_عبر_المصادقة |
Token_rotation_storm… | تبديلات_رمز_سريعة_في_المكان_خلال_عاصفة_أمر |
Randomized_chaos_workload… (10_بذور) | قلب_DST —كل_نوع_حدث_+_كل_خطأ_متداخلة_غير_متوقعة |
CopyLeaseReclaimStressTests | موت_العقدة_+استرداد_الاستئجار_عبر_عنقود_مُوسع(مجال_نقي،_FakeTimeProvider) |
ثابت_التقارب.في_الراحة،كل_وجهة_صحية_تُنسخ_بالضبط_مجموعة مواقع_المصدر_المفتوحة—لا_أيتام،لا_مفقودات.يُؤكد_على مجموعة التسمية(scale-in_يفتح_legitimately_موقع_وجهة_ثانٍ_تحت_نفس تسمية_المصدر_،_لذا_التسميات_المكررة_مُتوقعة).الوجهة_الحالية ترفض_الأوامر_يُسمح_لها_بالتأخر،_تُصادَق_بمجرد_الشفاء.
ثابت_الاستئجار.في_عنقود_حيث_العقد_تموت_وتُحيى_حسب_جدول
مُبذور،على_الأكثر_عقدة_واحدة_تحمل_الاستئجار_الساري_على_ملف؛
الاستئجار_الميت_ينتهي_بالضبط_عند_انتهاء_الصلاحية،يُسترد؛
العنقود_الصحي_يستقر_مع_كل_ملف_مُحتجز_بواسطة_عقدة_واحدة_بالضبط._
يعكس_CopyEngineSupervisor'_ من_predicate_ادعاء_ضد_أساليب
الاستئجار_الخاص_بـ_CopyProfile_.
سلامة_الخيط_من_الـ_harness
FakeTradingSession أحادية_الخيط؛حمل_الإجهاد_يُغيرات_من_خيط
الاختبار_بينما_المضيف_يقرأ/يكتب_من_حلقة_الخلفية_الخاصة_به.
SyncTradingSession يلتف_عليها،يجعل_كل_عملية_جلسة_ذرية_على
بوابة_واحدة(دون_الاحتفاظ_بالبوابة_عبر_استدعاء_العودة_→
سيف_العكس_ترتيب_القفل_مقابل__stateGate المضيف_و deadlock)._
المحاكي_نفسه_تُرك_دون_لمس.
الأخطاء_المكتشفة
- سباق_إعادة_المصادقة_عند_البدء_في_
CopyEngineHost.OnReconnected_ موصول_قبل_تحميل_المرجع_الأولي+أول_مصداقة،التي_شغلت_بدون_stateGate.قطع_المقبس_خلال_البدء_شغل_ثاني_مصداقة_متزامن، أفسدت_قاموس_الحالة_غير_المتزامنة_للمضيف(_symbolDetails،_sourceVolumes)._تم_الإصلاح:تشغيل_التحميل_الأولي+أول_مصداقة تحت_البوابة.سباق_إنتاجي،ليس_artefact_اختبار—حمل_الإجهاد الفوضوي_كشفه.
التشغيل
dotnet test tests/StressTests/StressTests.csproj
المجموعة مُسلسلة ([assembly:_CollectionBehavior(DisableTestParallelization_=_true)]):
كل_اختبار_يدور_حلقة_خلفية_حية_،تدفع_إلى_الاستقرار_تحت_ساعة
حائطية_،لذا_التشغيل_المتوازي_يجوّع_مهام_المضيف_ويجعل
فترات_التقارب_متقطعة.أحجام_الأحمال_مُصممة_للتوقف_في_ثوانٍ
لذا_المجموعة_تبقى_في_بوابة_الإخضرار_الافتراضية.الفشل_يطبع
بذرته؛_أعد_تشغيل_تلك_البذرة_لإعادة_إنتاج_التشابك_بالضبط.
التمديد
- سلوك_نسخ_جديد_→أضف_عملية_مصدر_إلى
CopyDstWorld(حافظ_على عضوية_دفتر_المصدر_مع_تدفق_الأحداث)_+حالة_مرجحة_فيCopyChaosDstTests.إذا_يمكنه_إنشاء_أو_إحالة_موضع_وجهة، تأكد_ثابت_التقارب_لا_يزال_صامداً. - خطأ_جديد_→أضف_حقن_إلى
CopyDstWorld(يُفوِّض_إلى_سطح تحكم_FakeTradingSessionعبرSyncTradingSession)+ مارس_في_سيناريو_مسمى_بالإضافة_إلى_خليط_الفوضى. - حافظ_على_المحاكي_مؤمن_بـ_cTrader_(انظر_جذر_تفويض_
CLAUDE.md)؛ لا_تُضعفه_ليمر_اختبار_إجهاد_.