جودة DevOps / الأساسي: أدلة التسليم وتصميم الحزم / الدرس 5
حتمية البيانات والساعات والبيئات
اجعل حالة CI الفاشلة قابلة للتكرار بامتلاك كل مدخل يغير نتيجتها.
في هذه الصفحة
أهداف الدرس
- اضبط الوقت والعشوائية وملكية البيانات.
- ميّز قابلية التكرار عن الإفراط غير الواقعي في المحاكاة.
احصر المدخلات الخفية
قد يعطي المصدر نفسه نتائج مختلفة بتغير اللغة والمنطقة الزمنية والساعة والبذرة وإصدار الاعتماد والاستجابة والقاعدة والترتيب. سجل المدخلات قبل لوم سرعة CI. تضبط الاختبارات الحتمية أو تسجل ما يخص ادعاءها. لا يعني ذلك استبدال كل اعتماد حقيقي؛ تحفظ اختبارات التكامل السلوك المراد فحصه. المهم قدرة الصيانة على إعادة الشرط دون تخمين الحساب المشترك أو حد منتصف الليل الذي صادف الحالة.
احقن ساعة الأعمال
تفشل قواعد الانتهاء قرب الحدود لأن الاختبار يقرأ الساعة بلحظات عدة. مرر ساعة أو لحظة للقاعدة ليختار قبل الانتهاء وعنده وبعده. عرّف هل المساواة انتهاء والمنطقة عند تحليل تواريخ المستخدم. استخدم ساعة رتيبة للمدد لا التقويم. يعزل المثال قرار الانتهاء؛ وما زالت اختبارات التكامل تتحقق من حفظ معنى الطوابع ونقلها بين المكونات.
from datetime import datetime, timezone
def hold_expired(expires_at, now):
return now >= expires_at
expiry = datetime(2030, 1, 1, 12, 0, tzinfo=timezone.utc)
assert hold_expired(expiry, expiry) is True
assert hold_expired(expiry, expiry.replace(second=1)) is True
يستخدم تواريخ Python الواعية بالمنطقة ومواعيد مستقبلية اصطناعية. أضف حالة قبل الانتهاء في الحزمة الفعلية. يجب رفض التواريخ الغامضة بلا منطقة أو تطبيعها قبل مقارنتها بالقيم الواعية.
امنح البيانات ملكية ونطاقاً واضحين
ينبغي للبيانات تحديد من يعدلها ومتى تزال. يولد حساب حجز عام مشترك ترابطاً حتى مع عزل المتصفح. خصص نطاق تشغيل وهوية حالة وأنشئ المطلوب فقط ونظف بالهوية الدقيقة. يجب أن يتحمل التنظيف التكرار وألا يحذف بيانات تشغيل آخر. تفيد معاملة اختبار عندما يبقى كل العمل داخلها؛ وقد يخرج عامل خلفي أو اتصال آخر عن الحد. اختر العزل وفق البنية لا افتراض احتواء التراجع كل كتابة.
استخدم التنويع دون فقد الإعادة
تستكشف المدخلات المولدة تركيبات أكثر من أمثلة قليلة. سجل البذرة والإدخال الفاشل المصغر لتكرار الاكتشاف. تجعل البذرة تسلسلاً قابلاً للإعادة ضمن المولد والإصدار المختارين ولا تضمن كل التنفيذات. احتفظ بحالة ارتداد ثابتة للاكتشاف المهم وأضف تنويع البذور منفصلاً. لا تجعل العشوائية دفاع التصادم الوحيد بين العمال الموزعين؛ فالملكية والقيود الفريدة أقوى من الأمل بعدم التقاء بذرتين.
import random
def generated_requests(seed):
rng = random.Random(seed)
return [rng.randint(0, 6) for _ in range(8)]
seed = 417
requests = generated_requests(seed)
assert requests == generated_requests(seed)
تمنع نسخة Random المحلية تعديل حالة عامة تستخدمها اختبارات أخرى. يسجل التقرير البذرة وإصدار المولد والإدخال الفاشل. يفحص المثال تكرار التوليد لا صحة الحجز.
سجل عقد البيئة
سجل إصدارات التشغيل والاعتماديات والمخطط والبذور والميزات واللغة والمنطقة والبدائل في وصف بيئة صغير بلا أسرار. استخدم اعتماديات مقفلة ومتصفحات مطابقة عند الحاجة. عامل المخابئ مسرعات لا مصدراً معتمداً للبيانات. يكشف النجاح بمخبأ دافئ فقط مدخلاً أو خطوة إعداد مفقودة. أعد الحالة في بيئة جديدة مضبوطة قبل إعلان الإصلاح، ثم تحقق من أن الواقعية المختارة ما زالت تفحص الخطر المقصود.
الأخطاء الشائعة وإصلاحها
يفشل الاختبار قرب منتصف الليل فقط
- لماذا يحدث؟
- تقرأ القاعدة وقتاً أو منطقة غير مضبوطين.
- كيف تصلحه؟
- احقن لحظات صريحة وحدد معنى الحد.
- كيف تتجنب تكراره؟
- اختبر قبل الحد وعنده وبعده.
يحذف التنظيف حجز تشغيل آخر
- لماذا يحدث؟
- تحذف السجلات بوسم مشترك واسع.
- كيف تصلحه؟
- احذف معرّفات التشغيل والحالة الحاليين فقط.
- كيف تتجنب تكراره؟
- افرض ملكية النطاق في مساعدات البيانات.
يتعذر تكرار فشل مولد
- لماذا يحدث؟
- سُجل اسم الاختبار العشوائي فقط.
- كيف تصلحه؟
- سجل البذرة والبيانات الفاشلة المصغرة.
- كيف تتجنب تكراره؟
- حوّل الاكتشافات المهمة لحالات ارتداد ثابتة.
اختبر فهمك
1. يتشارك اختباران حساباً مع سياقي متصفح مستقلين. ما الترابط المتبقي؟
اعرض الحل المشروح
قد تتصادم بيانات الملف والصلاحيات والحجوزات والحصص بالخادم. خصص حسابات مستقلة أو قسم الموارد الخلفية القابلة للتعديل صراحة. يعزل المتصفح جانبه فقط؛ تحقق بالتوازي المضبوط.
2. تعمل بيانات معاملة متراجعة للطلبات لا للمهام المؤجلة. ما الحد المفقود؟
اعرض الحل المشروح
قد تستخدم المهمة اتصالاً آخر أو تعمل بعد المعاملة. امنحها قاعدة أو مخططاً مستقلاً أو نطاقاً مملوكاً وانتظر اكتمالاً محدوداً قبل التنظيف. لا تفترض احتواء المعاملة الخارجية العمل غير المتزامن.
أهم ما تعلمته
- تحتاج الحتمية ضبط المدخلات المناسبة أو تسجيلها.
- يتبع العزل حدود الكتابة الفعلية.
- ينبغي أن يدعم التكامل الواقعي والإعداد المتكرر بعضهما.