dbt / المتوسط: التاريخ والمسارات المضبوطة / الدرس 12
اختبارات الوحدة وحدود بيانات الاختبار
اعزل منطق حالة الإعارة بمدخلات صغيرة وافصل تكامل المستودع واختبارات البيانات ودمج incremental.
في هذه الصفحة
أهداف الدرس
- حدد المدخلات المعطاة والمخرج المتوقع للنموذج.
- اشرح حدود البيانات والمحوّل والتنفيذ لاختبار الوحدة الأصلي.
تعزل بيانات الوحدة سؤال تحويل واحداً
يمكن لاختبار الوحدة تقديم مدخلات مضبوطة للاعتماديات ومقارنة المخرج بعلاقة متوقعة. يختلف ذلك من اختبار بيانات يبحث في علاقة مبنية عن مخالفات. يسأل المثال فقط عن open لغياب إرجاع متحقق وreturned للمعلوم، لا تسليم المصدر أوكل أنواعه أومعاملة القاعدة. وضح المدخل كي لا يزيل تبسيط الاختبار العيب الحقيقي بصمت. ويعتمد الدعم والقيود على الجيل والمحوّل المسميين.
اجعل SQL المختبرة صغيرة وواضحة
يختار int_loan_state الهوية وحالة مشتقة فقط من stg_loans. يجب أن تميّز طبقة التجهيز NULL المشروعة من خطأ التحليل. يمكن للبيانات التركيز على الحقلين المشار إليهما وفق متطلبات مخطط وعلاقة المحوّل. لا يُترجم المقطع أوينفذ هنا. النتيجة المتوقعة بصفين بيانات اختبار منطقية، لا إثبات تقييم CASE أوتطابق الأنواع مع محلل محلي.
select loan_id,
case when returned_at is null then 'open' else 'returned' end as loan_state
from {{ ref('stg_loans') }}
نموذج توضيحي يفترض صحة معنى وجود وقت الإرجاع في التجهيز مسبقاً.
اكتب المدخلات والصفوف المتوقعة صراحة
يعرف YAML إعارة مفتوحة وأخرى معادة. النص الزمني بيانات اصطناعية يظل تحويلها تابعاً للهدف. تحوي الصفوف المتوقعة مخرج النموذج فقط. وقد تظل العلاقات الأبوية أومعلومات أنواعها لازمة في بيئة فعلية حتى مع استبدال الصفوف. لذلك لا تصبح اختبارات dbt الأصلية مجموعة Python خالصة بلا اتصال تلقائياً. لا تنشئ الدورة أمراً أوعلاقة مؤقتة أواستعلاماً؛ يراجع التكوين كنص فقط.
unit_tests:
- name: loan_state_from_return_presence
model: int_loan_state
given:
- input: ref('stg_loans')
rows:
- {loan_id: L1, returned_at: null}
- {loan_id: L2, returned_at: '2026-10-02 10:00:00'}
expect:
rows:
- {loan_id: L1, loan_state: open}
- {loan_id: L2, loan_state: returned}
بيانات وحدة بنمط v1.12؛ لا تثبت تنفيذ المحوّل أونوع الوقت أوتوفر العلاقة الأبوية.
اختبر فروع incremental والماكرو مستقلة
قد تحتاج وحدة incremental تجاوز is_incremental صراحة وبيانات this إذا قرأت الهدف. ويصف المتوقع عادة الصفوف التي ينتجها استعلام النموذج، لا الحالة بعد دمج المستودع. اختبر الأولي والتزايدي والتأخر ومفاتيح المرشحين المكررة كأسئلة مستقلة. يجب أن تعيد التجاوزات الفرع المقصود، لا تتجاوز القاعدة لإنجاح الاختبار. وتختلف صيغ SQL للاختبار ودعم Jinja من ملفات النماذج؛ فلا تفترض ترجمة كل مرجع مضمن.
اجمع منطق الوحدة وتأكيد البيانات ودليل التكامل
احفظ مصفوفة الصحيح والغائب والمعيب والمكرر والحدي واربطها بطبقة الاختبار. يمكن لنموذج مكتبة قياسية صغير التحقق من التصنيف والهويات المذكورة، لا ترجمة dbt أوأنواع SQL. تفحص اختبارات البيانات المجتمع المبني، ويتحقق تكامل مصرح من المحوّل والهدف. ويعالج التعافي النشر الجزئي والإعادة مستقلاً. تجري الدورة تفكير بيانات محلياً فقط، دون استيراد dbt أومشغل أوقاعدة أوادعاء تأكيد مستودع. تجنب اختبار يكرر التنفيذ بلا تحد لعقد مهم.
الأخطاء الشائعة وإصلاحها
تُعامل الصفوف المتوقعة كهدف incremental النهائي
- لماذا يحدث؟
- اختلط مخرج الاستعلام بنتيجة دمج المحوّل.
- كيف تصلحه؟
- اختبر المرشحين وانتقال الهدف كطبقتين.
- كيف تتجنب تكراره؟
- سمِّ نطاق البيانات صراحة في الاختبار والمراجعة.
يحذف المصدر المستبدل حد النوع المعيب
- لماذا يحدث؟
- افترض التبسيط نجاح التحليل دون اختباره بمكان آخر.
- كيف تصلحه؟
- احفظ اختبارات المحلل والتحويل بحالات مختلفة.
- كيف تتجنب تكراره؟
- وثق ما يفترض أن يضمنه كل حقل مستبدل.
تُوصف الوحدة الأصلية بأنها بلا مستودع بالتعريف
- لماذا يحدث؟
- اختلط عزل البيانات بمتطلبات تنفيذ الإطار.
- كيف تصلحه؟
- راجع الدعم وبيانات الآباء والوصول قبل التنفيذ المصرح.
- كيف تتجنب تكراره؟
- افصل النماذج المحلية من أدلة dbt الفعلية.
اختبر فهمك
1. ما الحالتان المتوقعتان لـL1 مع NULL وL2 مع إرجاع صالح معلوم؟
اعرض الحل المشروح
L1 مفتوحة وL2 معادة وفق عقد التجهيز. إذا جاءت NULL من فشل تحليل، انتُهك الافتراض ويحتاج اختبار رفض مستقلاً. يحدد المثال المنطق المقصود لا نجاح اختبار مستودع.
2. هل تثبت بيانات وحدة incremental وحدها إعادة آمنة بعد مهلة تثبيت؟
اعرض الحل المشروح
لا. تعزل مخرج الاستعلام، بينما تحتاج نتيجة التثبيت وتكرار الأثر بروتوكول الهدف ودليل التعافي. افصل هوية العملية وحد المعاملة والمطابقة عن بيانات التحويل.
أهم ما تعلمته
- تعزل بيانات الوحدة المنطق بافتراضات مدخل صريحة.
- تثبت اختبارات المحلي وdbt والقاعدة والتعافي حقائق مختلفة.