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

أتمتة مهامك باستخدام Pytest: دليل عملي مع الأمثلة

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

Automate your tasks Using Pytest: A practical guide with examples

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

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

لماذا بايتست؟
قبل التعمق في الأمثلة، دعنا نناقش سبب كون Pytest خيارًا رائعًا لأتمتة المهام:

البساطة: يحتوي Pytest على بناء جملة بسيط وموجز، مما يجعل من السهل كتابة وقراءة حالات الاختبار.
القابلية للتوسعة: مع مجموعة واسعة من المكونات الإضافية والخطافات، يمكن توسيع Pytest لدعم احتياجات الاختبار المختلفة.
التركيبات: توفر Pytest التركيبات، وهي ميزة قوية لإعداد الشروط المسبقة أو الحالات للاختبارات، مما يعزز إمكانية إعادة الاستخدام.
التكامل: يتكامل Pytest بشكل جيد مع الأدوات الأخرى، بما في ذلك منصات CI/CD، مما يتيح التشغيل الآلي الشامل.

مثال 1: أتمتة اختبار واجهة برمجة التطبيقات باستخدام Pytest
تمثل واجهات برمجة التطبيقات (APIs) العمود الفقري للعديد من التطبيقات، ويعد ضمان موثوقيتها أمرًا بالغ الأهمية. يسهّل Pytest، إلى جانب مكتبة الطلبات، أتمتة اختبار واجهة برمجة التطبيقات.

الخطوة 1: تثبيت المكتبات المطلوبة
أولاً، تأكد من تثبيت Pytest ومكتبة الطلبات:

طلبات تثبيت النقطة pytest
الخطوة 2: كتابة نص الاختبار
فلنقم بأتمتة طلب GET بسيط إلى واجهة برمجة تطبيقات عامة مثل JSONPlaceholder، وهي واجهة برمجة تطبيقات REST وهمية عبر الإنترنت للاختبار.

`طلبات الاستيراد
اختبار الاستيراد

تحديد عنوان URL الأساسي

BASE_URL = "https://jsonplaceholder.typicode.com"

@pytest.fixture
تعريف api_client():
# توفر هذه الوحدة كائن جلسة لتقديم طلبات واجهة برمجة التطبيقات
الجلسة = الطلبات. الجلسة ()
جلسة العائد
إغلاق الجلسة ()

def test_get_posts(api_client):
# أرسل طلب GET لجلب المشاركات
الاستجابة = api_client.get(f"{BASE_URL}/posts")
# التأكيدات
تأكيد رمز الاستجابة.status_code == 200
تأكيد len(response.json()) > 0، "لم يتم العثور على مشاركات"`

توضيح:
التثبيت (api_client): يقوم هذا التثبيت بإعداد جلسة قابلة لإعادة الاستخدام لتقديم طلبات HTTP، مما يضمن أننا لا نحتاج إلى إنشاء جلسة جديدة في كل مرة.
وظيفة الاختبار (test_get_posts): ترسل هذه الوظيفة طلب GET إلى نقطة النهاية /posts وتتحقق من:
رمز الحالة هو 200، يشير إلى النجاح.
يحتوي الرد على مشاركة واحدة على الأقل.
الخطوة 3: تشغيل الاختبار
لتنفيذ الاختبار، قم بتشغيل الأمر التالي:

سحق
نسخ الكود
pytest -v test_api.py
لماذا ينجح هذا
الاختبار موجز وقابل لإعادة الاستخدام، مع الاستفادة من تركيبات Pytest للتعامل مع الإعداد والتفكيك.
تُظهر نتائج Pytest الاختبارات التي تم اجتيازها أو فشلها، مما يجعل من السهل تتبع موثوقية واجهة برمجة التطبيقات بمرور الوقت.

مثال 2: أتمتة اختبار واجهة مستخدم الويب باستخدام Pytest وSelenium
يضمن اختبار واجهة مستخدم الويب أن تعمل الواجهة الأمامية للتطبيق كما هو متوقع. يمكن دمج Pytest مع السيلينيوم لأتمتة هذه المهام بكفاءة.

الخطوة 1: تثبيت المكتبات المطلوبة
تثبيت Pytest وSelenium وWebDriver Manager:

تثبيت النقطة pytest السيلينيوم webdriver-manager
الخطوة 2: كتابة نص الاختبار
إليك كيفية إجراء اختبار بسيط لواجهة مستخدم الويب للتحقق من وظيفة البحث على Google:

`استيراد pytest
من برنامج تشغيل الويب الخاص باستيراد السيلينيوم
من selenium.webdriver.common.by استيراد بواسطة
من selenium.webdriver.common.keys استيراد المفاتيح
من webdriver_manager.chrome استيراد ChromeDriverManager

@pytest.fixture
تعريف المتصفح ():
# إعداد Chrome WebDriver
برنامج التشغيل = webdriver.Chrome(ChromeDriverManager().install())
سائق العائد
driver.quit()

def test_google_search(المتصفح):
# انتقل إلى جوجل
browser.get("https://www.google.com")`{% إندراو %}

# Find the search box and enter a query
search_box = browser.find_element(By.NAME, "q")
search_box.send_keys("Pytest Automation")
search_box.send_keys(Keys.RETURN)

# Assert that results are shown
results = browser.find_elements(By.CSS_SELECTOR, "div.g")
assert len(results) > 0, "No search results found"

توضيح:
التثبيت (المتصفح): تقوم هذه التركيبة بإعداد مثيل Chrome WebDriver باستخدام webdriver-manager وتضمن إغلاقه بشكل صحيح بعد كل اختبار.
وظيفة الاختبار (test_google_search): هذه الوظيفة:
يفتح صفحة جوجل الرئيسية.
عمليات البحث عن “أتمتة Pytest”.
التأكد من أن البحث يعرض نتيجة واحدة على الأقل.
الخطوة 3: تشغيل الاختبار
تنفيذ الاختبار باستخدام:

{% خام %}pytest -v test_ui.py
لماذا ينجح هذا
تدير أداة Pytest مثيل المتصفح، مما يجعل إعداد الاختبار والتفكيك نظيفًا وفعالاً.
باستخدام السيلينيوم، يتفاعل البرنامج النصي مع صفحة الويب كمستخدم حقيقي، مما يضمن وظائف واجهة المستخدم كما هو متوقع.
مثال 3: أتمتة التحقق من صحة البيانات باستخدام Pytest وPandas
يعد التحقق من صحة البيانات أمرًا بالغ الأهمية في هندسة البيانات والتحليلات وعمليات ETL. يمكن لـ Pytest أتمتة مهام التحقق من صحة البيانات باستخدام مكتبة الباندا.

الخطوة 1: تثبيت المكتبات المطلوبة
تأكد من تثبيت Pytest وPandas:

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

`استيراد pytest
استيراد الباندا كـ pd

@pytest.fixture
تعريف Sample_data():
# إنشاء نموذج DataFrame
البيانات = {
"اسم": ["أليس"، "بوب"، "تشارلي"، "ديفيد"]،
"العمر": [25، 30، 35، 40]،
"البريد الإلكتروني": ["[email protected]"، "[email protected]"، لا شيء، "[email protected]"]

df = pd.DataFrame(data)
عودة مدافع

def test_data_not_null(sample_data):
# التحقق من وجود أي قيم فارغة في DataFrame
تأكيد Sample_data.isnull().sum().sum() == 0، "تحتوي البيانات على قيم فارغة"

def test_age_column_type(sample_data):
# التحقق من أن عمود "العمر" من النوع الصحيح
تأكيد Sample_data['age'].dtype == 'int64'، "عمود العمر ليس من النوع الصحيح"`
توضيح:
التركيبة (sample_data): تقوم هذه التركيبة بإعداد نموذج DataFrame، لمحاكاة مجموعة بيانات يمكن إعادة استخدامها في اختبارات متعددة.
وظيفة الاختبار (test_data_not_null): يتحقق هذا الاختبار من وجود أي قيم فارغة في DataFrame ويفشل في حالة العثور على أي منها.
وظيفة الاختبار (test_age_column_type): يتحقق هذا الاختبار من أن عمود العمر من النوع الصحيح، مما يضمن اتساق البيانات.
الخطوة 3: تشغيل الاختبار
تنفيذ الاختبار باستخدام:

pytest -v test_data.py
لماذا ينجح هذا
تتيح مرونة Pytest إجراء اختبارات تتمحور حول البيانات، مما يضمن تلبية مجموعات البيانات للمعايير المتوقعة.
تسهل الأداة إعداد بيانات الاختبار وتعديلها دون تكرار التعليمات البرمجية.
أفضل الممارسات لأتمتة المهام باستخدام Pytest
استخدام التركيبات للإعداد والتفكيك: تساعد التركيبات في إدارة الإعداد والتفكيك بكفاءة، مما يجعل اختباراتك معيارية وقابلة لإعادة الاستخدام.
الاستفادة من المكونات الإضافية: يحتوي Pytest على مجموعة متنوعة من المكونات الإضافية (على سبيل المثال، pytest-html لتقارير HTML، وpytest-xdist للتنفيذ المتوازي) لتعزيز جهود الأتمتة الخاصة بك.
اختبارات تحديد المعلمات: استخدم @pytest.mark.parametrize لاختبار مجموعات متعددة من البيانات أو المدخلات، مما يقلل من تكرار التعليمات البرمجية.
التكامل مع خطوط أنابيب CI/CD: دمج اختبارات Pytest مع أدوات CI/CD مثل Jenkins أو GitHub Actions للاختبار المستمر.

خاتمة
Pytest هي أداة قوية لأتمتة مجموعة متنوعة من المهام، بدءًا من اختبار واجهة برمجة التطبيقات (API) وواجهة مستخدم الويب وحتى التحقق من صحة البيانات. إن بساطته، إلى جانب المرونة والدعم الشامل للمكونات الإضافية، تجعله خيارًا ممتازًا للمطورين ومهندسي ضمان الجودة على حدٍ سواء. من خلال الاستفادة من ميزات Pytest مثل التركيبات، وتحديد المعلمات، والتكامل مع خطوط أنابيب CI/CD، يمكنك إنشاء أطر عمل أتمتة قوية وقابلة للصيانة وقابلة للتطوير.

إذا كنت تتطلع إلى أتمتة سير عملك أو تحسين عملية الاختبار، فإن Pytest يعد نقطة انطلاق رائعة. اختبار سعيد!

بيان الافراج تم إعادة إنتاج هذه المقالة على: https://dev.to/mahmad321/automate-your-tasks-using-pytest-a-practical-guide-with-examples-5g1l?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ Study_golang@163 .com لحذفه
أحدث البرنامج التعليمي أكثر>

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

Copyright© 2022 湘ICP备2022001581号-3