جودة DevOps / الأساسي: أدلة التسليم وتصميم الحزم / الدرس 3
حزم الوحدة والمكوّن والمتصفح في CI
اختر حد اختبار يكشف العيب المقصود ويعطي القائمين بالصيانة موقع فشل مفيداً.
في هذه الصفحة
أهداف الدرس
- طابق التحققات مع حدود الوحدة والمكوّن ورحلة المستخدم.
- ركز اختبارات المتصفح على السلوك المرئي والاعتماديات المضبوطة.
حدد ما هو حقيقي في كل حزمة
تعزل حزمة الوحدة قاعدة صغيرة، وتختبر المكونات حداً أكبر بخدمات أو اعتماديات حقيقية مختارة، ويقود المتصفح التطبيق المرئي. تختلف الأسماء بين الفرق فوثق الحد الفعلي وما يستبدل. لا تثبت قاعدة حجز مع بديل ذاكرة قفل قاعدة البيانات. ولا يشخص مسار متصفح ناجح كل حد عددي بكفاءة. اجمع الطبقات لتحدد إخفاقات القواعد تفصيلياً وتتحقق رحلات ممثلة قليلة من دعم النظام المركب لمهمة المستخدم.
افحص القاعدة بمدخلات تميز الخطأ
تميز حالة الوحدة المفيدة السلوك الصحيح من خطأ تنفيذ محتمل. تفيد الصفر والسعة المتبقية تماماً وما يزيدها بواحد أكثر من تكرار الحالة العادية بأسماء مختلفة. افحص النتائج لا عدد الاستدعاءات الخاصة إلا إذا كان التفاعل عقداً. أبعد الوقت والعشوائية والخدمات الخارجية عن القواعد الخالصة. يمثل المثال شرط سعة بسيطاً؛ ويحتاج التفويض والتزامن والتخزين اختبارات إضافية عند حدودها.
import unittest
def can_reserve(remaining, requested):
return requested > 0 and requested <= remaining
class CapacityTests(unittest.TestCase):
def test_boundaries(self):
self.assertFalse(can_reserve(4, 0))
self.assertTrue(can_reserve(4, 4))
self.assertFalse(can_reserve(4, 5))
if __name__ == "__main__":
unittest.main()
يستخدم مكتبة Python القياسية دون خدمة. يعرض كشيفرة دورة غير قابلة للتشغيل؛ يمكن للصيانة التحقق منه محلياً في مجلد مؤقت باستخدام python -m unittest. لا يدعي فرض السعة ذرياً تحت طلبات متزامنة.
اختبر التكامل دون امتداد غير لازم
يمكن لحزمة المكوّن استدعاء حد التطبيق بقاعدة مؤقتة حقيقية واستبدال البريد الخارجي. حدد الاستبدالات التي قد تخفي عيوباً وأضف أدلة مستقلة لها. ابنِ البيانات بواجهات مدعومة أو مساعدات اختبار صريحة لا ببيانات الإنتاج. أعد الحالة بنطاق يطابق العزل. لا يحتاج إثبات تعاون المستودع والمخطط شبكة عامة. افصل جاهزية البدء عن تحققات الأعمال لتصنف عدم توفر المكوّن بدقة بدلاً من عشرات الإخفاقات المضللة.
قد رحلة مرئية للمستخدم
استخدم محددات وصول ثابتة وتحققات تنتظر حالة مرئية بدلاً من تأخير ثابت. يعزل سياق المتصفح الكوكيز والتخزين المحلي لا حساب الخادم أو سجلات الحجز بالضرورة. أنشئ سجلاً مملوكاً ونظفه بهويته. احتفظ برحلة حاسمة صغيرة كالحجز وقراءة التأكيد وغطِّ التحقق التفصيلي بكلفة أقل أسفل الواجهة. يفترض المثال تطبيقاً تجريبياً محلياً مضبوطاً ويتجنب أي خدمة عامة. تشكل أسماء الأزرار عقد وصول ومحدد اختبار معاً.
import { test, expect } from "@playwright/test";
test("booking confirmation is visible", async ({ page }) => {
await page.goto("/workshops/demo-owned-session");
await page.getByLabel("Seats").fill("1");
await page.getByRole("button", { name: "Reserve" }).click();
await expect(page.getByRole("status")).toHaveText("Reservation confirmed");
});
يتطلب مشروع Playwright Test مثبتاً ومتوافقاً ومتصفحات مطابقة وbaseURL محلياً وورشة معزولة مزروعة. demo-owned-session معرّف اصطناعي. ليس إعداد تطبيق كاملاً ولا تشغّل الدورة متصفحاً أو خدمة.
اجعل خريطة الحزم قابلة للمراجعة
تحتاج كل حزمة مالكاً ومدى مدة متوقعاً وعقد بيئة وصيغة تقرير ومسار معالجة. تجنب تكرار كل سيناريو بكل طبقة؛ يزيد التكرار الصيانة ويضخم السبب الواحد إلى مهام حمراء كثيرة. راجع الإخفاق المتسرب لإيجاد حد مفقود بدلاً من إضافة متصفح تلقائياً. تضيف اللقطات والتغطية أدلة ولا تعوض تحققات السلوك. تمنح بنية الحزم المفيدة ثقة بالمهام المهمة وطريقاً قصيراً من الفشل إلى السلوك أو حالة البنية المسؤولة.
الأخطاء الشائعة وإصلاحها
تفوت الحزمة الوهمية عيب قفل
- لماذا يحدث؟
- لا يعيد البديل دلالات تزامن القاعدة.
- كيف تصلحه؟
- أضف اختبار تزامن مضبوطاً على المخزن المقصود.
- كيف تتجنب تكراره؟
- وثق الاعتماديات الحقيقية والمستبدلة لكل حزمة.
يفشل المتصفح على المشغلات البطيئة فقط
- لماذا يحدث؟
- حل نوم ثابت محل الجاهزية.
- كيف تصلحه؟
- انتظر الحالة المرئية أو التطبيقية المعنية.
- كيف تتجنب تكراره؟
- استخدم تحققات انتظار مدعومة ومهلات محدودة.
يولد تعطل واحد عشرات إخفاقات المنتج
- لماذا يحدث؟
- اختلطت الجاهزية بتحققات الأعمال.
- كيف تصلحه؟
- صنف فشل الإعداد واحفظ دليله الجذري.
- كيف تتجنب تكراره؟
- افصل بدء البيانات عن تقييم السيناريو.
اختبر فهمك
1. أي اختبار يثبت عدم بيع المقعد الأخير مرتين بطلبين متزامنين؟
اعرض الحل المشروح
استخدم اختبار تكامل تزامني مضبوطاً عبر حد الحجز والتخزين الفعلي. يبقى اختبار القاعدة مفيداً ولا يثبت الذرية. تحقق من القبول والرفض والسعة المخزنة واجعل الجدولة قابلة للتحقيق.
2. تكرر حزمة متصفح أربعين حالة تحقق عددي. اقترح بنية أصغر.
اعرض الحل المشروح
انقل التركيبات التفصيلية للوحدة أو API وأبقِ حالات واجهة ممثلة تثبت عرض الخطأ وضبط الإرسال. احتفظ برحلة ناجحة شاملة. تأكد من ملكية الطبقة الأدنى للقاعدة نفسها لا نسخة غير مرتبطة بالواجهة.
أهم ما تعلمته
- يثبت الاختبار السلوك ضمن حده الفعلي فقط.
- ينبغي للطبقات تحسين التشخيص لا تكرار الأعداد.
- لا يعزل المتصفح بيانات الخلفية تلقائياً.