كتابة اختبارات pytest الأولى
افهم اكتشاف الاختبارات وعبارات assert وبنية الاختبار
كتابة اختبارات pytest الأولى درس مجاني في Python Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Python Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Python Academy 4 دروس في المجموع.
تثبيت pytest
ثبّتوا pytest باستخدام pip. لا يتطلب إعدادًا إلزاميًا، إذ يكتشف الاختبارات تلقائيًا.
# pip install pytest
# Run all tests
# pytest
# Run a specific file
# pytest test_math.pyدالة اختبار بسيطة
يجمع pytest أي دالة يبدأ اسمها بـ test_. استخدموا عبارات assert العادية — إذ يعيد pytest كتابتها لإظهار مخرجات تفصيلية.
# test_math.py
def add(a, b):
return a + b
def test_add():
assert add(2, 3) == 5
def test_add_negative():
assert add(-1, 1) == 0ملفات الاختبار واكتشافها
يكتشف pytest ملفات الاختبار المسماة test_*.py أو *_test.py، ويجمع الدوال المسماة test_* أو الأصناف المسماة Test*.
tests/
test_utils.py
test_models.py
conftest.py # shared fixturesتجميع الاختبارات في أصناف
اجمعوا الاختبارات المرتبطة في صنف يبدأ اسمه بـ Test. ولا حاجة إلى unittest.TestCase.
class TestCalculator:
def test_add(self):
assert 1 + 1 == 2
def test_multiply(self):
assert 3 * 4 == 12اختبار الاستثناءات
استخدموا pytest.raises بوصفه مدير سياق للتأكد من رفع استثناءات محددة.
import pytest
def divide(a, b):
if b == 0:
raise ZeroDivisionError("cannot divide by zero")
return a / b
def test_divide_by_zero():
with pytest.raises(ZeroDivisionError, match="cannot divide"):
divide(10, 0)العَلَم -v
شغّلوا pytest باستخدام -v (الوضع المطوّل) لرؤية اسم كل اختبار وحالة نجاحه أو فشله.
# pytest -v
# test_math.py::test_add PASSED
# test_math.py::test_add_negative PASSED
# Show print output too:
# pytest -v -sتخطّي الاختبارات
استخدموا @pytest.mark.skip أو @pytest.mark.skipif لتخطّي الاختبارات بشروط.
import pytest, sys
@pytest.mark.skip(reason="not implemented yet")
def test_future_feature():
assert False
@pytest.mark.skipif(sys.platform == "win32", reason="Unix only")
def test_unix_only():
assert Trueوضع علامة على الاختبارات المتوقَّع فشلها
تضع @pytest.mark.xfail علامة على اختبار تتوقعون فشله. وينجح الاختبار إذا فشل، ويصدر تحذيرًا إذا نجح على نحو غير متوقع.
import pytest
@pytest.mark.xfail(reason="known bug #42")
def test_buggy():
assert 1 == 2 # will fail, but that's expectedإعادة كتابة assert
يعيد pytest كتابة عبارات assert لعرض القيم التي تسببت في الفشل — وهذا أكثر فائدة بكثير من AssertionError مجرد.
def test_list_equal():
result = [1, 2, 4]
expected = [1, 2, 3]
assert result == expected
# AssertionError:
# assert [1, 2, 4] == [1, 2, 3]
# At index 2 diff: 4 != 3conftest.py
يحمّل pytest الملف conftest.py تلقائيًا. ضعوا التركيبات الإضافية والمكونات الإضافية المشتركة فيه من دون استيرادها صراحةً.
# conftest.py
import pytest
@pytest.fixture
def sample_data():
return {"key": "value"}
# Any test file in the same dir can use sample_data as a parameterتشغيل مجموعات فرعية من الاختبارات
استخدموا -k لتشغيل الاختبارات المطابقة لتعبير كلمات مفتاحية.
# Run tests containing "add"
# pytest -k "add"
# Run tests NOT containing "slow"
# pytest -k "not slow"
# Run a specific test
# pytest test_math.py::test_addتحقق سريع
بأي بادئة يجب أن يبدأ اسم دالة اختبار pytest لكي يكتشفها تلقائيًا؟
مراجعة
لا يتطلب pytest تعليمات تمهيدية: سمّوا الملفات test_*.py، وسمّوا الدوال test_*، واستخدموا assert العادي. استخدموا pytest.raises للاستثناءات، و-v لعرض التفاصيل، وconftest.py للتركيبات الإضافية المشتركة.
الأسئلة الشائعة
هل درس «كتابة اختبارات pytest الأولى» مجاني؟
نعم — نص درس «كتابة اختبارات pytest الأولى» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Python Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Python Academy 4 دروس في المجموع.
ماذا ستتعلم في «كتابة اختبارات pytest الأولى»؟
افهم اكتشاف الاختبارات وعبارات assert وبنية الاختبار تتمرن على Python Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Python Academy؟
لا تُشترط خبرة سابقة. Python Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «كتابة اختبارات pytest الأولى»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Python Academy هذا؟
نعم. كل درس في Python Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- كتابة اختبارات pytest الأولى
- التركيبات والإعداد/التنظيف
- تعدد المعاملات وتغطية الاختبارات
- المحاكاة باستخدام unittest.mock