"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > اختبار الوحدة في بايثون مع الأغنام

اختبار الوحدة في بايثون مع الأغنام

تم النشر بتاريخ 2024-11-08
تصفح:261

Unit testing in Python with sheepy

مرحبًا بالجميع، جئت اليوم لأقدم لكم مكتبة جديدة لاختبار الوحدات تسمى Sheepy، ولكن دعونا نتحدث أولاً عن أهمية اختبار الوحدات. هذه المكتبة ليست للمبتدئين، لإجراء اختبار الوحدة باستخدامها، ستحتاج إلى إيلاء القليل من الاهتمام الإضافي. لقد أكد فقط على اختبار واجهة برمجة التطبيقات (API) مع وحدات التحقق من أخطاء نقطة النهاية وhttp.

رابط جيثب: جيثب
رابط PyPi: pypi

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

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

طرق التوكيد

 ----------------------- ------------------------------------------------------- 
| Assertion Method       | Description                                           |
 ----------------------- ------------------------------------------------------- 
| assertEqual(a, b)      | Checks if two values are equal.                       |
| assertNotEqual(a, b)   | Checks if two values are not equal.                   |
| assertTrue(expr)       | Verifies that the expression is True.                 |
| assertFalse(expr)      | Verifies that the expression is False.                |
| assertRaises(exc, fn)  | Asserts that a function raises a specific exception.  |
| assertStatusCode(resp) | Verifies if the response has the expected status code.|
| assertJsonResponse(resp)| Confirms the response is in JSON format.             |
| assertResponseContains(resp, key) | Ensures the response contains a given key. |
 ----------------------- ------------------------------------------------------- 

تثبيت

تثبيته بسيط للغاية، ما عليك سوى فتح محطة من اختيارك، مع تثبيت النقطة واكتب pip install shehy

مثال الاستخدام

from sheepy.sheeptest import SheepyTestCase

class ExampleTest(SheepyTestCase):
    def test_success(self):
        self.assertTrue(True)

    def test_failure(self):
        self.assertEqual(1, 2)

    def test_error(self):
        raise Exception("Forced error")

    @SheepyTestCase.skip("Reason to ignore")
    def test_skipped(self):
        pass

    @SheepyTestCase.expectedFailure
    def test_expected_failure(self):
        self.assertEqual(1, 2)

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

ضمن فئة exampleTest، تم تحديد خمس طرق اختبار:

test_success: يتحقق هذا الاختبار مما إذا كان التعبير الذي تم تمريره إلى الأسلوب AcceptTrue صحيحًا. نظرًا لأنه تم تمرير القيمة الحقيقية بشكل صريح، سينجح هذا الاختبار.

test_failure: يتحقق هذا الاختبار من المساواة بين قيمتين باستخدام طريقة التأكيد. ومع ذلك، فإن القيم المقارنة، 1 و2، مختلفة، مما يؤدي إلى فشل الاختبار. وهذا يوضح حالة الفشل المتوقع، حيث يجب أن يكشف الاختبار عن عدم الاتساق.

test_error: تثير هذه الطريقة استثناءً هادفًا بالرسالة "خطأ إجباري". الهدف هو اختبار سلوك النظام عند التعامل مع الأخطاء التي تحدث أثناء تنفيذ الاختبار. بما أن الطريقة تطرح استثناء دون معالجته، فستكون النتيجة خطأ في الاختبار.

test_skipped: تم تزيين هذا الاختبار بطريقة التخطي الخاصة بفئة SheepyTestCase، مما يعني أنه سيتم تخطيه أثناء إجراء الاختبارات. تم تقديم سبب تخطي الاختبار على أنه "سبب للتجاهل"، ويمكن عرض هذا المبرر في تقرير الاختبار النهائي.

test_expected_failure: تستخدم هذه الطريقة مُزخرف توقع الفشل، للإشارة إلى توقع حدوث فشل. داخل الطريقة، يوجد فحص مساواة بين 1 و 2، والذي عادةً ما يؤدي إلى الفشل، ولكن عند تطبيق مصمم الديكور، يعتبر إطار العمل هذا الفشل جزءًا من السلوك المتوقع ولن يتم التعامل معه على أنه خطأ، ولكن باعتباره "فشلًا متوقعًا".

الإخراج


نتائج الاختبار:
exampleTest.test_error: فشل - خطأ قسري
exampleTest.test_expected_failure: الفشل المتوقع
exampleTest.test_failure: FAIL - 1 != 2
exampleTest.test_skipped: تم تخطيه -
مثالTest.test_success: موافق

حالة اختبار واجهة برمجة التطبيقات

تم تصميم اختبار واجهة برمجة التطبيقات في Sheepy Test Framework ليكون مباشرًا وقويًا، مما يسمح للمختبرين بالتفاعل مع واجهات برمجة التطبيقات باستخدام طرق HTTP الشائعة مثل GET وPOST وPUT وDELETE. يوفر إطار العمل فئة مخصصة، ApiRequests، لتبسيط إرسال الطلبات ومعالجة الاستجابات، مع إدارة الأخطاء المضمنة عبر فئة الاستثناء HttpError.

عند اختبار واجهة برمجة التطبيقات، ترث فئة الاختبار SheepyTestCase، المجهز بطرق تأكيد مختلفة للتحقق من سلوك واجهة برمجة التطبيقات. تتضمن هذه العناصر AssurerStatusCode للتحقق من صحة رموز حالة HTTP، وasserJsonResponse للتأكد من أن الاستجابة بتنسيق JSON، وasserResponseContains للتحقق من وجود مفاتيح محددة في نص الاستجابة.

على سبيل المثال، يسمح لك إطار العمل بإرسال طلب POST إلى واجهة برمجة التطبيقات (API)، والتحقق من تطابق رمز الحالة مع القيمة المتوقعة، والتأكد من أن استجابة JSON تحتوي على البيانات الصحيحة. تتم معالجة طلبات واجهة برمجة التطبيقات (API) من خلال فئة ApiRequests، التي تهتم بإنشاء الطلبات وإرسالها، بينما يتم تبسيط معالجة الأخطاء عن طريق رفع الأخطاء الخاصة بـ HTTP عندما يقوم الخادم بإرجاع رموز حالة غير متوقعة.

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

from sheepy.sheeptest import SheepyTestCase  

class TestHttpBinApi(SheepyTestCase):
    def __init__(self):

        super().__init__(base_url="https://httpbin.org")

    def test_get_status(self):

        response = self.api.get("/status/200")
        self.assertStatusCode(response, 200)  

    def test_get_json(self):

        response = self.api.get("/json")
        self.assertStatusCode(response, 200)  
        self.assertJsonResponse(response)  
        self.assertResponseContains(response, "slideshow")  

    def test_post_data(self):

        payload = {"name": "SheepyTest", "framework": "unittest"}
        response = self.api.post("/post", json=payload)
        self.assertStatusCode(response, 200)  
        self.assertJsonResponse(response)  
        self.assertResponseContains(response, "json") 
        self.assertEqual(response.json()["json"], payload)  

    def test_put_data(self):

        payload = {"key": "value"}
        response = self.api.put("/put", json=payload)
        self.assertStatusCode(response, 200)  
        self.assertJsonResponse(response)  
        self.assertResponseContains(response, "json")  
        self.assertEqual(response.json()["json"], payload)  

    def test_delete_resource(self):

        response = self.api.delete("/delete")
        self.assertStatusCode(response, 200)  
        self.assertJsonResponse(response)  

مثال الإخراج

Test Results:
TestHttpBinApi.test_delete_resource: OK
TestHttpBinApi.test_get_json: OK
TestHttpBinApi.test_get_status: OK
TestHttpBinApi.test_post_data: OK
TestHttpBinApi.test_put_data: OK

ملخص:

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

بيان الافراج تم إعادة نشر هذه المقالة على: https://dev.to/brunociccarino/unit-testing-in-python-with-sheepy-b93?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3