اختبار API / متوسط: عقود متفاعلة / الدرس 12
اختبار سير العمل غير المتزامن برصد محدود
نمذجة قبول العمل والتقدم والنتائج النهائية والأحداث المكررة دون تشغيل عمال.
في هذه الصفحة
أهداف الدرس
- التمييز بين قبول العمل ونجاح اكتماله.
- اختبار الانتقالات الصحيحة والاستطلاع المحدود ومعالجة التكرار محليا.
اعتبار القبول بداية
لا تثبت استجابة قبول وظيفة تصدير وجود الملف أو نجاحها لاحقا. يحتاج العقد وسيلة لرصد التقدم والنهايات وصلاحيات للوظيفة والنتيجة. حدد دعم الحالات queued وrunning وsucceeded وfailed وcancelled وانتقالاتها المشروعة، ومعنى الوظيفة الغائبة أو المنتهية. يستخدم المساق تصديرا خياليا لبيانات كتب عامة ولا يشغل عاملا أو طابورا أو تخزينا أو طلب شبكة.
التحقق من آلة الحالة
يكشف جدول الانتقال الصريح التراجعات المستحيلة وغياب معالجة النهايات. لا تعود وظيفة succeeded إلى running بصمت في هذا العقد. يفحص المثال مسارا ناجحا ثم غياب انتقال محظور من الجدول. لا ينفذ تسليم الرسائل أو الحالة الدائمة. قد تكرر المحاولات والرسائل المكررة الملاحظة دون انتقال جديد، لذا افصل تكرار الحالة عن تغير غير مشروع. اشترط التقدم الأحادي حيث يعد به العمل الفعلي فقط.
allowed = {"queued": {"running", "cancelled"}, "running": {"succeeded", "failed"}, "succeeded": set(), "failed": set(), "cancelled": set()}
path = ["queued", "running", "succeeded"]
for before, after in zip(path, path[1:]):
assert after in allowed[before]
assert "running" not in allowed["succeeded"]
print("workflow transition policy checked")
workflow transition policy checked
يفحص البرنامج الكامل مسارا بثلاث حالات وتراجعا محظورا واحدا. مجموعة الانتقالات سياسة مثال وليست دورة عامة للطوابير. لا يشغل معالجة خلفية أو تخزينا دائما.
تقييد الرصد دون نوم اعتباطي
يحتاج الاختبار غير المتزامن موعدا وتأكيدات نهاية مفيدة. قد يكون النوم الثابت ثم افتراض الاكتمال بطيئا ومتقلبا. يحتاج مساعد الاستطلاع ميزانية رصد قصوى ومعالجة الفشل النهائي ودليلا عند نفادها. يستهلك المثال تسلسلا ثابتا بدلا من الانتظار الفعلي، ويوضح أن القبول والتقدم لا يعدان نجاحا. تحتاج الجدولة والتراجع التدريجي والإلغاء والمواعيد إلى تحقق مستقل في بيئة معتمدة؛ ولا يولد المثال حركة استطلاع.
def observe(states, limit):
for state in states[:limit]:
if state in {"succeeded", "failed", "cancelled"}:
return state
return "OBSERVATION_BUDGET_EXHAUSTED"
assert observe(["queued", "running", "succeeded"], 3) == "succeeded"
assert observe(["queued", "running", "failed"], 3) == "failed"
assert observe(["queued", "running"], 2) == "OBSERVATION_BUDGET_EXHAUSTED"
print("bounded observations checked")
bounded observations checked
يتخذ البرنامج الكامل ثلاثة قرارات حتمية على مصفوفات محلية. يعد الحد الملاحظات لا الثواني. لا يسبب تأخيرا ولا يدعي التزام وظيفة حقيقية بزمن أو توفر محدد.
فصل التسليم عن آثار العمل
قد يسلم الطابور الرسالة أكثر من مرة وفق ضماناته. اختبر ألا ينتج التسليم المكرر نتائج محمية مكررة عندما يشترط العقد منعها. حدد نطاق إزالة التكرار واحتفاظه وأدرج الأحداث غير المرتبة إن أمكنت. قد يكون تكرار حدث النهاية غير مؤذ، بينما يخالف إشعار ثان وعد العمل. افحص الأثر الدائم مستقلا عن عدد الرسائل المستلمة. لا تدع تنفيذا مرة واحدة تماما لأن معالجا محليا تجاهل معرفا مكررا.
تسجيل التسلسل المرصود وما بقي غير محسوم
عند الفشل احتفظ بمعرف الوظيفة المختلق وتسلسل الحالات ومعرفات الأحداث والنتيجة المحمية النهائية. افصل الفشل النهائي المعلوم عن مهلة الرصد؛ فالأخيرة تترك النتيجة الفعلية غير محسومة. لا تحذف أو تعيد وظيفة مجهولة تلقائيا دون قاعدة مصالحة. أدرج انتهاء النتيجة وتغير الصلاحية وسباقات الإلغاء حيث تدعم. توضح النماذج المحلية القرارات والفئات، بينما يبقى تنفيذ العمال والتسليم الدائم وصلاحيات النتائج غير مختبر صراحة.
الأخطاء الشائعة وإصلاحها
تعد استجابة 202 نجاح تصدير
- لماذا يحدث؟
- يخلط القبول بالاكتمال النهائي.
- كيف تصلحه؟
- ارصد النهاية الموثقة وتحقق من النتيجة.
- كيف تتجنب تكراره؟
- افصل تأكيدات القبول والاكتمال.
يسبب النوم الثابت فشلا متقطعا
- لماذا يحدث؟
- يفترض الاختبار مدة جدولة.
- كيف تصلحه؟
- استخدم رصدا محدودا بنتائج نهاية ومهلة صريحة.
- كيف تتجنب تكراره؟
- اضبط الساعات محليا ووثق مواعيد التكامل المعتمدة.
يرسل التسليم المكرر إشعاري اكتمال
- لماذا يحدث؟
- يخلط عدد التسليم بعمل فريد.
- كيف تصلحه؟
- طبق حدود إزالة التكرار والأثر المعتمدة.
- كيف تتجنب تكراره؟
- اختبر أحداثا مختلقة مكررة وغير مرتبة.
اختبر فهمك
1. تنفد ميزانية الاستطلاع بعد running. هل ثبت فشل الوظيفة؟
اعرض الحل المشروح
لا. الرصد غير مكتمل والنتيجة مجهولة. أبلغ عن آخر حالة ونفاد الميزانية منفصلين عن الفشل النهائي. استخدم المصالحة أو الإلغاء الموثق في بيئة مصرح بها بدلا من افتراض أمان الإعادة.
2. صمم حالة حدث مكرر لتصدير فهرس عام مكتمل.
اعرض الحل المشروح
سلم معرف اكتمال مختلقا مرتين لنموذج مستهلك محلي. اشترط نتيجة محمية وإشعارا واحدا إذا نص العقد، مع السماح بتسجيل تسليمين. وضح أن إزالة التكرار الدائمة والتعافي من الانهيار تحتاج دليل تخزين مستقل.
أهم ما تعلمته
- يختلف القبول والتقدم والفشل النهائي والرصد الناقص.
- يحتاج اختبار العمل رصدا محدودا ومعيار حكم نهائيا.
- تسليم الرسالة المتكرر وأثر العمل المتكرر كميتان منفصلتان.