محتويات الدورة

Apache Airflow / المتوسط: عمل التشغيل والتحكم وميزانيات الموارد / الدرس 12

اختبار عقود DAG والمنطق المحلي الآمن

اختيار اختبارات تثبت خصائص عمل ومخطط محددة دون المبالغة في دليل الفحص المحلي.

وقت القراءة التقريبي: 4 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • فصل اختبارات الدوال وفحوص التعريف والتكامل.
  • كتابة بيانات حتمية للفترات والتكرار والمدخلات غير الصالحة.

تسمية الادعاء قبل الاختبار

يثبت اختبار دالة خالصة كيفية التحقق من صفوف معطاة أو تجميعها. وقد يثبت فحص تعريف DAG الهويات والحواف والاستيرادات المدعومة في بيئة متوافقة. أما التكامل فيختبر تنفيذ المهمة واتصالها وحدودها الخارجية. هذه ادعاءات مختلفة، ولا ينبغي اختصارها في عبارة اختبرنا الخط. ابدأ بفشل محدد يجب أن يكشفه الاختبار: صف حدود يعد مرتين، أو إضافة مكررة، أو متطلب سابق غائب. تجنب اختبار يكرر التنفيذ دون قاعدة مستقلة معلنة. غالباً تكشف بيانات صغيرة حتمية أكثر من عينة كبيرة غير مفسرة.

اختبار مرشح فترة ببيانات حدود

تختار الدالة المحلية سجلات داخل فترة أعداد صحيحة نصف مفتوحة. تشمل البيانات قيمة قبل البداية، وعندها، وقبل النهاية مباشرة، وعند النهاية بالضبط. تحدد النتيجة مستقلة بمعرفي السجلين المشمولين. الأزمنة الصحيحة تبسيط معلن، لا بديل لاختبار تقويم واع بالمناطق الزمنية. وللمدخل الفارغ نتيجة فارغة معرفة. إذا وجب رفض المدخل التالف، فاختبر ذلك مستقلاً ولا تسقطه بصمت. ينفذ المثال Python معزولاً دون استيراد Airflow أو اتصال قاعدة أو قراءة أثر بعيد.

python اختبار فترة محلي يركز على الحدود
def select_interval(rows, start, end):
    return [row['id'] for row in rows if start <= row['timestamp'] < end]

rows = [{'id': 'before', 'timestamp': 9}, {'id': 'start', 'timestamp': 10}, {'id': 'inside', 'timestamp': 19}, {'id': 'end', 'timestamp': 20}]
assert select_interval(rows, 10, 20) == ['start', 'inside']
assert select_interval([], 10, 20) == []
print(select_interval(rows, 10, 20))
الناتج المتوقع
['start', 'inside']

يشمل start وinside فقط وفق القاعدة نصف المفتوحة.

مراجعة الحواف دون ادعاء تحليل Airflow

يعلن JSON أسماء المهام والحواف المطلوبة لتقرير صغير. يمكن لفحص محلي مقارنة المواصفات بتمثيل مخطط مستقل معطى، لكنه لا يثبت تحميل ملف DAG فعلي ما لم تستخدم أداة تحميل إطار مناسبة. يعد Airflow 3 نماذج مثل DagBag واجهات داخلية للمؤلفين؛ فلا تبن ادعاء تعليمياً على وصول مباشر لنماذج البيانات الوصفية. ينبغي أن يتبع فحص التعريف الحقيقي أدوات الإصدار المدعومة في بيئة مصرح بها. أدرج الهويات وقواعد التشغيل المقصودة، لأن تغيير اسم عقدة أو جعل طرف متساهلاً قد يغير المعنى التشغيلي.

json مواصفات قبول مخطط اصطناعية
{"tasks":["validate","summarize","publish"],"required_edges":[["validate","summarize"],["summarize","publish"]],"publication_requires":"validated-complete-artifact"}

يحدد السلوك المطلوب ولا يثبت قبول محلل Airflow لتعريف.

إدراج الأعطال بين الأنظمة

تضم مصفوفة اختبار مفيدة مخططاً غير صالح ومدخلاً غير متاح ونشر أثر جزئي وفقد إقرار الوجهة وإعادة بعد اكتمال أثر. تختبر البيانات الخالصة قرارات التحويل، لكن سلامة التعطل عند حد بعيد تحتاج بروتوكول الوجهة الفعلي. استخدم هويات اصطناعية وموارد تجريبية مصرحاً بها عندما يسمح بالتكامل. لا توجه أمر اختبار DAG إلى بيئة مضبوطة لمجرد احتواء اسمه test؛ فقد ينفذ منطق المهمة ويتصل بأنظمة حقيقية. افحص ما سينفذ والاتصالات التي سيحلها قبل اختيار سطح الاختبار.

الإبلاغ الدقيق عما نفذ وما بقي

سجل أساس المفسر أو الإطار وهوية البيانات والنتيجة المتوقعة والمرصودة. ميز الترجمة وحدها أو المراجعة الساكنة من السلوك المنفذ. لا يعتمد نجاح تأكيد محلي توقيت المجدول أو إرسال المنفذ أو حل الأسرار أو توافق المزود. عند تغير التنفيذ، أعد الفحوص المرتبطة بالادعاء المتغير، لا خدمات غير مرتبطة مراراً. ينفذ المقرر برامج Python المستقلة في تخزين مؤقت معزول ويفحص JSON. تبقى أجزاء DAG والمشغل موسومة runnable:false، لقراءة صيغة حقيقية دون ادعاء اختبار مجدول أو قاعدة غير متاحة.

الأخطاء الشائعة وإصلاحها

وصف اختبار دالة بأنه تكامل خط كامل.

لماذا يحدث؟
عدم تحديد حدود الاختبار.
كيف تصلحه؟
أبلغ عن المدخلات والبيئة والخاصية الدقيقة.
كيف تتجنب تكراره؟
سم الأدلة المحلية وأدلة الإطار منفصلة.

اتصال مساعد اختبار بخدمة مضبوطة عرضاً.

لماذا يحدث؟
إغفال سلوك التنفيذ وحل الاتصال.
كيف تصلحه؟
أوقف التنفيذ التابع واستخدم بيانات معزولة حتى تتوفر بيئة مصرح بها.
كيف تتجنب تكراره؟
افحص آثار أمر الاختبار قبل تنفيذه.

إغفال الحدود الدقيقة من اختبار الفترة.

لماذا يحدث؟
تغطية سجل داخلي عادي فقط.
كيف تصلحه؟
أضف البداية والنهاية وما قبلها والفراغ.
كيف تتجنب تكراره؟
اشتق البيانات من قاعدة العمل.

اختبر فهمك

1. ماذا يثبت اختبار select_interval المحلي عن جدولة Airflow؟

اعرض الحل المشروح

لا يثبت شيئاً مباشراً عنها. إنه يثبت اختيار سجلات Python المعطاة ضمن حدود صحيحة معلنة. تبقى الجدولة وإتاحة السياق والتنفيذ ادعاءات منفصلة. تفيد عزل قاعدة العمل في تشخيص فشل تكامل لاحق دون خلط اختيار الصفوف بسلوك التنسيق.

2. لماذا تراجع اختباراً يستخدم اتصالاً خارجياً حتى إذا كان يقرأ البيانات فقط؟

اعرض الحل المشروح

قد يحل اعتماداً حقيقياً أو يتصل ببيئة مضبوطة أو يفرض عملاً غير مقصود. يجب أن يطابق التفويض والعزل نطاق المهمة. فضل بيانات اصطناعية محلية للمنطق الخالص، ولا تستخدم هدف تكامل تجريبياً مصرحاً به إلا عندما يتطلب الادعاء المطلوب ذلك النظام فعلاً.

أهم ما تعلمته

  • يثبت الاختبار المفيد قاعدة مسماة عند حد واضح.
  • تدعم الأدلة الساكنة والمحلية والتكاملية استنتاجات مختلفة.

المراجع الرسمية