شروحات الكمبيوتر والإنترنت والموبايل

إضافة التحقق من التجاوز لجميع اختبارات TestClass باستخدام المتغيرات

في عالم البرمجة واختبار البرمجيات، تعتبر مكتبة pytest واحدة من أشهر الأدوات المستخدمة لإجراء الاختبارات الأوتوماتيكية. واحدة من الميزات المهمة التي توفرها pytest هي القدرة على استخدام العلامة (mark) لعمل حالة تخطي (skip) للاختبارات. ولكن، قد يواجه المطورون تحديات عندما يحتاجون إلى تطبيق تخطي موحد لجميع الاختبارات داخل فئة معينة بناءً على متغيرات محددة. في هذا المقال، سنستعرض كيفية إضافة فحص تخطي موحد لجميع الاختبارات في TestClass باستخدام pytest، بناءً على متغيرات معلمة.

فهم مفهوم pytest.skip()

تتيح لك الدالة pytest.skip() تخطي اختبار معين بناءً على شروط معينة. هذا يمكن أن يكون مفيداً جداً في الحالات التي تعتمد فيها اختباراتك على بيئات أو موارد خارجية، مثل قاعدة بيانات أو واجهات برمجة التطبيقات (APIs). مثلاً، إذا كنت بحاجة إلى التحقق من وجود موفر محدد قبل إجراء اختبار معين، يمكنك استخدام pytest.skip() لتجاوز الاختبار في حال عدم تحقيق الشرط.

تخطي موحد لجميع الاختبارات

بدلاً من وضع كل شرط تخطي داخل كل اختبار، يمكننا إنشاء حالة تخطي مركزيّة تعمل على مستوى الفئة. لنفترض أن لدينا فئة اختبار تتضمن عدة اختبارات تختلف في ما يتعلق بالقيم الممررة. باستخدام pytest، يمكننا وضع شرط التخطي داخل دالة خاصة بالفئة، بحيث يتم تنفيذه قبل كل اختبار. عند استخدام pytest.mark.parametrize، يمكن أن نمرر القيم الضرورية لهذه الدالة.

الوصول إلى المتغيرات المطلوبة

في بعض الأحيان، قد تحتاج إلى الوصول إلى متغيرات معينة تم تعريفها في ملف conftest.py، مثل args.webhost و args.tenant. يمكن استخدام هذه المتغيرات لتحديد ما إذا كان يجب تخطي الاختبار أم لا. في حال كان أحد الموفرين غير متاح، يمكننا ببساطة استخدام pytest.skip() لتخطي الاختبارات المعنية.

تطبيق الشيفرة البرمجية

عندما نقوم بتعريف فئة TestClass، يجب أن نستخدم pytest.mark.parametrize لتحديد المتغيرات المطلوبة. داخل دالة الاختبار، يمكننا استخدام شرط للتحقق من وجود "idp-passport-authenticator". إذا كان غير متوفر، نقوم بتطبيق pytest.skip() مع رسالة توضح سبب التخطي. بهذه الطريقة، يمكننا تجنب تكرار الكود داخل كل اختبار.

مثال عملي قد يبدو على النحو التالي:

class TestClass:
    @pytest.mark.parametrize("webhost", args.webhost)
    @pytest.mark.parametrize("tenant", args.tenant)
    def test01_setup(self, webhost, tenant):
        """تسجيل المستخدم لاستخدامه كموفري"""
        providers = Tools.scrape.portalproviders(webhost, type='operator', Tenant=tenant)
        if "idp-passport-authenticator" not in providers:
            pytest.skip(f"تخطي لأنه لم يتم العثور على idp-passport-authenticator للمستأجر: {tenant}")
    @pytest.mark.parametrize("webhost", args.webhost)
    @pytest.mark.parametrize("tenant", args.tenant)
    def test02_passportreader(self, webhost, tenant):
        """اختبار المستخدم المسجل في الواجهة الأمامية لقارئ جواز السفر"""
        providers = Tools.scrape.portalproviders(webhost, type='operator', Tenant=tenant)
        if "idp-passport-authenticator" not in providers:
            pytest.skip(f"تخطي لأنه لم يتم العثور على idp-passport-authenticator للمستأجر: {tenant}")

فوائد استخدام فحص تخطي موحد

توفير وقت المطورين وتجنب تكرار الكود يعتبران من أهم فوائد تطبيق فحص تخطي موحد. بدلاً من كتابة شرط التخطي في كل دالة اختبار، يمكن تكراره في مكان واحد، مما يسهل الصيانة والقراءة. كما أن ذلك يقلل من فرص الأخطاء المحتملة في حالة تعديلات مستقبلية.

استنتاج

باستخدام pytest لإضافة فحص تخطي موحد لجميع الاختبارات بناءً على متغيرات معلمة، نسهم في تحسين كفاءة الاختبارات وتقليل التعقيد. إن النهج الذي يناسب معظم المطورين هو الاكتفاء بكتابة الشيفرة البرمجية بوضوح وبساطة، مما يسمح لهم بالتركيز على ما هو أهم – ضمان جودة البرمجيات المُنتجة.

إذا قمت بتطبيق هذا الأسلوب في مشاريعك القادمة، ستجد أن إدارة الاختبارات تصبح أسهل وأكثر فعالية في النهاية.

فهد السلال

خبير تقني متخصص في شروحات الكمبيوتر والإنترنت والموبايل، يتمتع بخبرة واسعة في تقديم حلول تقنية مبتكرة ومبسطة. يهدف فهد إلى مساعدة المستخدمين على تحسين تجربتهم التقنية من خلال مقالات وأدلة عملية واضحة وسهلة الفهم.
زر الذهاب إلى الأعلى
Don`t copy text!