تطوير البرمجيات
اختبار شيفرة Python باستخدام pytest
وجود مجموعة اختبارات فعالة هو الفارق بين تغيير يُنشر وتغيير ينتظر. يبني هذا البرنامج تلك المجموعة باستخدام pytest: الـfixtures ونطاقاتها والحالات المُعامَلة وmonkeypatch والمحاكاة وحدود تغطية يصعب الالتفاف عليها وتشغيل سريع في التكامل المستمر ومنهج لتشخيص الاختبارات المتذبذبة.
نظرة عامة
تعلم عملي قابل للتطبيق في بيئة العمل.
نادراً ما ترفض الفرق الاختبار من حيث المبدأ، لكنها تتخلى عنه لأن المجموعة صارت بطيئة وهشة ومليئة باختبارات تفشل لأسباب لا علاقة لها بالتغيير قيد المراجعة. يبني هذا البرنامج مجموعة اختبارات تظل جديرة بالتشغيل. يكتب المشاركون اختبارات تركز على السلوك، ويستبدلون بيانات الاختبار المشتركة القابلة للتغيير بـfixtures ومصانع بيانات، ويغطون الحالات الحدية عبر parametrize وHypothesis، ويعزلون قواعد البيانات والساعات واستدعاءات HTTP. ويعالج اليوم الأخير التذبذب ونسبة التغطية المضللة والشيفرة القديمة بلا اختبارات.
المتطلبات المسبقة
القدرة على كتابة دوال وأصناف ووحدات Python بارتياح، مع إلمام بـGit وتشغيل الأوامر في الطرفية.
الأهداف
- كتابة اختبارات pytest مركزة تتحقق من السلوك لا من تفاصيل التنفيذ.
- تنظيم الـfixtures ونطاقاتها وملف conftest.py لإبقاء بيانات الاختبار معزولة وقابلة لإعادة الاستخدام.
- تغطية الحالات الحدية وحالات الخطأ عبر parametrize وpytest.raises وHypothesis.
- عزل قواعد البيانات والساعات وخدمات HTTP باستخدام monkeypatch والبدائل والمحاكاة المقيدة بالتوقيع.
- تحديد حد أدنى للتغطية وميزانية زمنية للمجموعة يفرضهما التكامل المستمر على كل طلب دمج.
- تشخيص السبب الجذري للاختبار المتذبذب واتخاذ قرار بإصلاحه أو عزله أو حذفه.
الفئة المستهدفة
- مطورو Python الذين يُدخلون الاختبارات إلى شيفرة غير مختبَرة
- مهندسو ضمان الجودة المنتقلون من الفحص اليدوي إلى مجموعات اختبار آلية
- مهندسو البيانات الذين يتحققون من منطق التحويل ومخرجات خطوط المعالجة
- مهندسو DevOps الذين يربطون بوابات الاختبار بخطوط البناء والنشر
- القادة التقنيون الذين يضعون تعريف الإنجاز لفرقهم
- المطورون الذين يصونون شيفرة Python قديمة لا يجرؤ أحد على إعادة هيكلتها
محاور البرنامج
هيكل واضح لرحلة التعلم.
محاور البرنامج
تظهر محاور البرنامج في صندوق واحد بدلاً من تحويل كل سطر إلى وحدة منفصلة.
الوحدة 1: مجموعة اختبارات تستحق كلفتها
تأكيدات pytest واكتشاف الاختبارات وقراءة مخرجات الفشل
التهيئة والتنفيذ والتحقق مع اقتصار كل اختبار على سلوك واحد
رسم حدود اختبارات الوحدة والتكامل والاختبار الشامل في مشروع Python
تحديد ما لا ينبغي اختباره وتجنب التحقق من التفاصيل الداخلية
الوحدة 2: الـfixtures وبيانات الاختبار
الـfixtures ونطاقات الدالة والجلسة والتنظيف باستخدام yield
ملف conftest.py ومشاركة الـfixtures عبر حزمة الاختبارات
استخدام tmp_path وtmp_path_factory لعزل نظام الملفات بين الاختبارات
مصانع البيانات والبنّاؤون بدل كتلة بيانات اختبار مشتركة ضخمة
الوحدة 3: التعميم بالمعاملات وتغطية الحالات الحدية
استخدام parametrize للحالات الجدولية والقيم الحدية وأمثلة الانحدار
التعميم المتراكب والمعرفات المخصصة وأسماء اختبارات مقروءة في التقارير
الاختبار القائم على الخصائص عبر Hypothesis لفضاءات إدخال يتعذر حصرها
التحقق من الاستثناءات والتحذيرات ورسائل الخطأ باستخدام pytest.raises
الوحدة 4: عزل الاعتماديات: المحاكاة والبدائل والكعوب
استخدام monkeypatch لمتغيرات البيئة والساعة وسمات الوحدات
unittest.mock مع autospec والتحقق من الاستدعاءات دون الإفراط في التقييد
محاكاة حركة HTTP عبر responses أو respx بدل الخدمات الحية
اختبارات قواعد البيانات بالمعاملات والتراجع والمخططات المؤقتة
الوحدة 5: التغطية والسرعة والتكامل المستمر
pytest-cov وتغطية الفروع ووضع حد أدنى يتعذر التحايل عليه
pytest-xdist واختيار الاختبارات والالتزام بميزانية زمنية للمجموعة
الوسوم وفصل الاختبارات البطيئة وتشغيل المجموعة الفرعية المناسبة محلياً
ربط pytest بالتكامل المستمر مع التقارير والمخرجات وفحوص الحالة الإلزامية
الوحدة 6: الاختبارات المتذبذبة والشيفرة القديمة وممارسة الفريق
تشخيص التذبذب: ترتيب الاختبارات والحالة المشتركة والوقت والتزامن
قواعد الحجر وسياسة إعادة المحاولة والحالات التي يكون فيها حذف الاختبار هو الصواب
إضافة اختبارات توصيفية حول الشيفرة القديمة قبل تعديلها
الاتفاق على معيار اختبار للفريق وتعريف مكتوب للإنجاز
المواد المقدمة
- دليل الدورة وأمثلة شيفرة موثّقة وملاحظات مرجعية
- بيئة معملية عملية ومستودعات بداية جاهزة
- تمارين وقوائم تحقق وقوالب شيفرة قابلة لإعادة الاستخدام
- شهادة إتمام من 4D
- دعم فني بعد انتهاء البرنامج
خيارات التدريب
يمكن تقديم البرامج داخل مقر المؤسسة، أو عن بُعد، أو بصيغة مدمجة بحسب جدول الفريق وموقعه وأهداف التعلم. عندما يتضمن البرنامج شهادة أو اختباراً من جهة خارجية، تبقى قواعد الشهادة ورسومها خاضعة لسياسات الجهة المانحة، بينما تقدم 4D التدريب ودعم التحضير.
لماذا البعد الرابع
تبدأ 4D من مجموعة الاختبارات الموجودة لديكم أو من غيابها، وتقيس زمن تشغيلها وموثوقيتها قبل كتابة أي اختبار جديد. ويضيف المشاركون اختبارات توصيفية حول وحدة يخشى الفريق المساس بها، ثم يتفقون على حد أدنى للتغطية وميزانية زمنية يفرضهما خط التكامل المستمر لديهم اعتباراً من الأسبوع التالي.
دورات ذات صلة
أساسيات البرمجة بلغة Python
مقدمة عملية إلى Python للمهندسين والمحللين الذين يحتاجون شيفرة تعمل فعلاً لا مقتطفات تعليمية. يكتسب المشاركون طلاقة في أنواع البيانات والمجموعات والدوال والملفات ومعالجة الأخطاء، ثم يبنون برنامجاً صغيراً يقرأ بيانات حقيقية وينتج تقريراً قابلاً للاستخدام.
View coursePython المتوسط وممارسات الشيفرة النظيفة
برنامج موجّه للمطورين الذين تعمل شيفرة Python لديهم لكن يصعب تغييرها. يغطي dataclasses والمولّدات والمزخرفات ومديري السياق وتلميحات الأنواع، ثم يطبّق خطوات إعادة الهيكلة التي تحوّل وحدة من تسعمئة سطر إلى وحدات صغيرة مختبَرة تحرسها أدوات black وruff وmypy.
View courseأتمتة المهام المكتبية والبرمجة النصية بلغة Python
برنامج موجّه للفرق التي تهدر ساعات أسبوعية في أعمال متكررة على الملفات والجداول والتقارير. يقوم المشاركون بأتمتة هذه المهام باستخدام Python: معالجة الملفات دفعياً وجداول Excel وCSV واستدعاء واجهات REST وتنبيهات البريد والمهام المجدولة التي تعمل دون إشراف وتبلّغ بوضوح عند الفشل.
View course