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