عندما يتعلق الأمر بتأتير الاختبارات الأمامية، فإن اختيار اللغة البرمجية المثالية يصبح أمرا حاسما للغاية. البايثون هي إحدى هذه اللغات التي تتصدر القائمة، بفضل سهولة الاستخدام والدعم المجتمعي الواسع.
وعلاوة على ذلك، تتيح لك اختبارات الأتمتة بلغة البايثون استغلال القدرات المقدمة من قبل المكتبات والأطر الشهيرة مثل السيلينيوم، بيبيتست، وروبوت، بين أمور أخرى. باستخدام السيلينيوم مع البايثون، يساعد في الاستفادة القصوى من قدرات السيلينيوم في أتمتة المتصفح ومن بساطة وقابلية التوسيع التي يتمتع بها البايثون. بشكل عام، تُستخدم اختبارات الأتمتة بلغة البايثون على نطاق واسع من قبل فرق ضمان الجودة في جميع أنحاء العالم، خصوصا مع سائق السيلينيوم.
في هذه المدونة، سنستكشف بعمق تفاصيل البايثون من منظور الواجهة الأمامية. ستكون دروس هذه المدونة مفيدة في استغلال قدرات البايثون لأتمتة السيناريوهات الأمامية البسيطة والمعقدة على حد سواء.
ما هو اختبار الأتمتة بلغة البايثون؟
كما يوحي الاسم، فإن اختبار الأتمتة بلغة البايثون هو عملية استخدام نصوص البايثون لأتمتة الاختبارات. إنها واحدة من أكثر لغات البرمجة المطلوبة لأتمتة المهام اليدوية والمتكررة.
مثال بسيط على اختبار الأتمتة باستخدام Python يتضمن استفادة من إطار عمل pytest مع Selenium لأتمتة اختبارات الواجهة الأمامية على منصة التجارة الإلكترونية. يمكنك التحقق من وظيفة التسجيل على موقع الكتروني للتجارة الإلكترونية واستخدام نفس الجلسة للتنقل عبر الموقع وإضافة العناصر المطلوبة إلى عربة التسوق. بنهاية هذا الاختبار، ستكون قد قمت بالتحقق من وظائف التسجيل، تسجيل الدخول، وسلة التسوق على موقع الكتروني للتجارة الإلكترونية.
أخيرًا، يمكنك أيضًا استخدام Python لأتمتة إدارة النظام، وأتمتة البريد الإلكتروني، ومهام معالجة البيانات. نظرًا لأن Python هو شرط أساسي للاختبارات الأتمتة، يرجى الرجوع إلى الفيديو أدناه الذي يعمق في تثبيت Python.
لماذا استخدام Python للاختبارات الأتمتة؟
الآن بعد أن نعرف لماذا يفضل مختبرو الاختبارات Selenium مع Python، دعونا نلقي نظرة على بعض الأسباب الأساسية لاختيار Python للاختبارات الأتمتة:
1. مجموعة واسعة من المكتبات والأطر العمل
PyUnit (أو unittest) هو إطار الاختبار الافتراضي لأداء اختبارات الوحدة مع Python. على الرغم من توفر PyUnit من البداية، يدعم Python أطر عمل شهيرة أخرى مثل pytest وBehave وRobot وLettuce وNose2.
يمكن استخدام جميعها بشكل شامل مع إطارات Selenium وPlaywright لأتمتة اختبارات متصفح الويب.
2. تنفيذ اختبار موازي بسهولة فائقة
يمكن استخدام الاختبار الموازي بشكل واسع في Selenium وPython لأداء اختبارات أتمتة متصفح الويب عبر مجموعات مختلفة من المتصفحات والمنصات. على الرغم من أن جميع لغات دعم Selenium تدعم تنفيذ الاختبارات الموازية، إلا أنه من السهل جدًا استخدامها مع Python.
3. لغة برمجة متعددة النماذج
البايثون هي لغة برمجة متعددة النماذج، وبالتالي توفر دعمًا كاملاً للبرمجة الشيئية والبرمجة المنظمة. وتدعم غالبية الميزات في البايثون البرمجة الوظيفية والبرمجة الموجهة نحو الجوانب. يمكن استخدام البايثون، جنبًا إلى جنب مع سيلينيوم، لاختبار المواقع الإلكترونية وتطبيقات الويب بشكل وظيفي أيضًا.
4. نوعية ديناميكية
تستخدم لغة البايثون النوعية الديناميكية والربط المتأخر (أو القرار الديناميكي للأسماء) الذي يربط بين الأساليب وأسماء المتغيرات أثناء التنفيذ. هذه الميزة مفيدة للغاية في اختبار البايثون التلقائي.
توفر البايثون أيضًا خيارات مثل Pyre (مدقق نوع فعال للبايثون 3) و Mypy، وهما مدققان شهيران للأنواع الثابتة. باستخدام هذه المدققات، يمكنك دمج قوة النوعية الديناميكية والنوعية الثابتة معًا.
5. جمع المعلومات من الويب
جمع المعلومات من الويب باستخدام البايثون هو عملية استخراج معلومات/بيانات معنوية ومفيدة من مواقع الويب. يُستخدم هذا النوع من البرمجة بشكل أساسي في الأبحاث الأكاديمية، وتحليل المنافسين، وتجميع المحتوى، وغير ذلك.
توفر البايثون عددًا من المكتبات والأطر العمل، وعلى رأسها BeautifulSoup (bs4)، سيلينيوم، ببتير، وبيبتير، التي تسهل مهمة جمع المحتوى من مواقع الويب.
6. تقارير قوية وخالية من المتاعب
تقديم التقارير في اختبار التلقائي يوفر رؤية أعمق في تفاصيل تنفيذ الاختبار (على سبيل المثال، نسبة الاختبارات المجتازة/الفاشلة، بيئة الاختبار، لقطات الشاشة، إلخ). يمكن إرسال تقارير قوية تقدم المعلومات الصحيحة بشكل موجز وفهم للأطراف المعنية الضرورية (في الفريق) بحيث يكونون على علم بالتقدم على جبهة الاختبارات.
كيفية أداء اختبار Python التلقائي؟
الآن بعد أن تحدثنا عن أهمية اختبار Python التلقائي، دعونا نبدأ بتشغيل بعض الاختبارات. سيكون حديثنا أساسا حول اختبار الواجهة الأمامية بواسطة Python.
قبل أن نبدأ بالاختبارات، دعونا نقوم بإعداد البيئة الافتراضية (venv
)، التي تساعد على إدارة البيئة والتبعيات بشكل أفضل. تلعب venv
دورًا حيويًا في توفير العزلة عن الحزم المثبتة في البيئة الأساسية.
قم بتشغيل الأوامر virtualenv venv
و source venv
/bin
/activate
على الطرفية لإنشاء البيئة الافتراضية. جميع التبعيات (أو حزم Python)، مثل pytest
, selenium
, إلخ، المطلوبة لتنفيذ المشروع متاحة في ملف requirements.txt.
pytest-selenium
pytest-xdist
selenium>=4.6.0
urllib3==1.26.12
requests
py
التبعيات
يمكن تثبيت التبعيات عن طريق تشغيل pip install -r requirements.txt
على الطرفية. يتم تثبيت Selenium v4.6.0 (أو أحدث) كجزء من إجراء التثبيت.
لأغراض العرض، سنقوم بتنفيذ اختبارات بسيطة باستخدام Selenium بلغة Python مع إطاري pytest وPyUnit (أو unittest). إذا كنت على دراية جيدة بأي من هذه الأطر، يُوصى باستخدام العناصر الثابتة في Python ونموذج صفحة الكائن في Selenium Python لتحسين صيانة الاختبارات. حزمة Selenium نفسها لا توفر أداة اختبار أو إطار عمل. لذلك، سنستخدم Selenium مع pytest وPyUnit لأتمتة التفاعلات مع العناصر على صفحة الويب.
سيناريو الاختبار
- انتقل إلى ملعب Selenium من LambdaTest.
- ابحث عن رابط تقديم نموذج الإدخال على الصفحة.
- أدخل المعلومات المطلوبة على الصفحة.
- قدّم التفاصيل، وتحقق مما إذا كانت المعلومات قد تم تقديمها بنجاح.
التنفيذ (إطار عمل pytest)
فيما يلي نص الاختبار لسيناريو الاختبار أعلاه:
import os
import pytest
from os import environ
import time
from selenium.webdriver import ChromeOptions
from selenium.webdriver.support.ui import WebDriverWait
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import Select
from selenium.webdriver.common.by import By
exec_platform = os.getenv('EXEC_PLATFORM')
time_sleep = 2
########################## Locators #########################
xSubmitForm = "//a[.='Input Form Submit']"
xInpName = "//input[@id='name']"
cInpName = "#name"
xInpEmail = "//form[@id='seleniumform']//input[@name='email']"
xInpPassword = "//input[@name='password']"
cssCompany = "#company"
cWebName = "#websitename"
xInpCountry = "//select[@name='country']"
xInpCity = "//input[@id='inputCity']"
cssAddress1 = "[placeholder='Address 1']"
cssAddress2 = "[placeholder='Address 2']"
cssInpState = "#inputState"
cssInpZip = "#inputZip"
cssInpButton = ".bg-lambda-900"
nameSearchBox = "search"
class TestFormInput:
def setup_method(self):
if exec_platform == 'cloud':
username = environ.get('LT_USERNAME', None)
access_key = environ.get('LT_ACCESS_KEY', None)
ch_options = webdriver.ChromeOptions()
lt_options = {}
lt_options["build"] = "Build: Getting Started with Selenium PyTest"
lt_options["project"] = "Project: Getting Started with Selenium PyTest"
lt_options["name"] = "Test: Getting Started with Selenium PyTest"
lt_options["browserName"] = "Chrome"
lt_options["browserVersion"] = "latest"
lt_options["platformName"] = "macOS Sonoma"
lt_options["geoLocation"] = "US"
lt_options["console"] = "error"
lt_options["w3c"] = True
lt_options["headless"] = False
ch_options.set_capability('LT:Options', lt_options)
gridURL = "https://{}:{}@hub.lambdatest.com/wd/hub".format(username, access_key)
self.driver = webdriver.Remote(
command_executor = gridURL,
options = ch_options
)
elif exec_platform == 'local':
ch_options = ChromeOptions()
self.driver = webdriver.Chrome(options=ch_options)
def test_enter_form_details(self):
resultant_str = "Thanks for contacting us, we will get back to you shortly."
driver = self.driver
driver.get("https://www.lambdatest.com/selenium-playground/")
# Commented once the tests are executed in non-headless mode
driver.maximize_window()
wait = WebDriverWait(driver, 5)
try:
element = driver.find_element(By.XPATH, xSubmitForm)
element.click()
elem_name = driver.find_element(By.XPATH, xInpName)
elem_name.send_keys("Testing")
time.sleep(time_sleep)
elem_email = driver.find_element(By.XPATH, xInpEmail)
elem_email.send_keys("[email protected]")
time.sleep(time_sleep)
elem_pass = driver.find_element(By.XPATH, xInpPassword)
elem_pass.send_keys("password")
time.sleep(time_sleep)
elem_comp = driver.find_element(By.CSS_SELECTOR, cssCompany)
elem_comp.send_keys("LambdaTest")
elem = driver.find_element(By.CSS_SELECTOR, cWebName)
elem.send_keys("https://wwww.lambdatest.com")
country_dropdown = Select(driver.find_element(By.XPATH, xInpCountry))
country_dropdown.select_by_visible_text("United States")
time.sleep(time_sleep)
elem = driver.find_element(By.XPATH, xInpCity)
elem.send_keys("San Jose")
time.sleep(time_sleep)
elem = driver.find_element(By.CSS_SELECTOR, cssAddress1)
elem.send_keys("Googleplex, 1600 Amphitheatre Pkwy")
time.sleep(time_sleep)
elem = driver.find_element(By.CSS_SELECTOR, cssAddress2)
elem.send_keys("Mountain View, CA 94043")
time.sleep(time_sleep)
elem = driver.find_element(By.CSS_SELECTOR, cssInpState)
elem.send_keys("California")
time.sleep(time_sleep)
elem = driver.find_element(By.CSS_SELECTOR, cssInpZip)
elem.send_keys("94088")
time.sleep(time_sleep)
# Click on the Submit button
submit_button = driver.find_element(By.CSS_SELECTOR, cssInpButton)
submit_button.click()
time.sleep(2)
try:
element = wait.until(
EC.presence_of_element_located((By.CSS_SELECTOR, ".success-msg"))
)
assert resultant_str in element.text, f"'{resultant_str}' not found in the specified element."
except Exception as e:
if exec_platform == 'cloud':
driver.execute_script("lambda-status=failed")
pytest.fail(f"Text '{resultant_str}' not found: {str(e)}")
time.sleep(2)
except Exception as e:
# Catch other exceptions
print(f"Failed: Input Form Demo, generic exception - {e}")
if exec_platform == 'cloud':
driver.execute_script("lambda-status=failed")
if exec_platform == 'cloud':
driver.execute_script("lambda-status=passed")
print(f"PyTest Demo: Test Passed")
def teardown_method(self):
if (self.driver != None):
# self.driver.close()
self.driver.quit()
if __name__ == "__main__":
pytest.main()
جولة في الكود
للشروع في العمل، نستورد أولاً الوحدات الضرورية اللازمة لتنفيذ الاختبارات. نظرًا لأننا نستخدم pytest، يتم أيضًا استيراد وحدة pytest
إلى الكود.
يتم استيراد فئة WebDriverWait
من وحدة selenium.webdriver.support.ui حتى نتمكن من استخدام الانتظارات الصريحة في السيناريوهات التي يتم فيها تحديد WebElements ديناميكيًا. توفر وحدة expected_conditions
مجموعة من الشروط المتوقعة المعرفة مسبقًا في Selenium التي يمكن استخدامها مع الانتظارات الصريحة.
كما يجب تحديد العناصر قبل أداء أي إجراء، نقوم أولاً بتحديد محددات العناصر المطلوبة. الهوية، الاسم، XPath، نص الرابط، جزء من نص الرابط، وما إلى ذلك، هي بعض من محددات الويب الأكثر استخدامًا التي تساعدك على العثور على العناصر داخل نموذج الكائنات المستندية (DOM).
يمكنك استخدام أدوات التفتيش المتاحة بشكل أساسي مع متصفح الويب أو إضافة (أو إضافة) مثل POM Builder التي تجعل من السهل العثور على محدد XPath/CSS Selector لعناصر الويب.
بمجرد تحديد محدد الويب، يتم تحديد العنصر(العناصر) ذو(ذات) الصلة عن طريق دمج المحدد مع طريقة find_element()
أو find_elements()
من Selenium Python. تعيد طريقة find_element()
عنصر ويب واحد، بينما تعيد find_elements()
قائمة من عناصر الويب التي تطابق معايير المحدد.
كما ذكر سابقًا، طريقة setup_method()
هي مرفق pytest الذي يعد جزءًا من التهيئة. يتم استدعاء الطريقة قبل تنفيذ كل وظيفة اختبار تحت فئة الاختبار المعنية.
يمكن تشغيل الاختبارات التي تم تنفيذها على Selenium المثبت على الجهاز المحلي بالإضافة إلى الشبكة Selenium عبر الإنترنت المقدمة من خلال اختبار السحابة. LambdaTest هي منصة تنفيذ اختبار مدعومة بالذكاء الاصطناعي تتيح لك تشغيل اختبارات Python التلقائية بمقياس كبير عبر متصفحات مختلفة وأنظمة تشغيل. تأتي بعدد من الفوائد، وأهمها الصيانة المقللة، والتكاليف المنخفضة، وتسريع تنفيذ الاختبارات.
فيما يتعلق بالتنفيذ، القرار الوحيد المتعلق بـ مشغل سيلينيوم هو استخدام Remote WebDriver في سيلينيوم عند تشغيل الاختبارات على شبكة سحابية. مولد إمكانيات الأتمتة يساعد في إنشاء القدرات لجمعية الاختبار المقصودة للاستخدام في الاختبارات.
في سيلينيوم 4، تُستخدم خيارات المتصفح بدلاً من القدرات المطلوبة. يمكنك الاطلاع على مدونة الفروق بين سيلينيوم 3 وسيلينيوم 4 لمعرفة المزيد حول ما هو منقوص الدعم وما هو منقوص الدعم في سيلينيوم 4.
يمكن الحصول على متغيري البيئة LT_USERNAME
و LT_ACCESS_KEY
من إعدادات حساب LambdaTest الخاص بك > كلمة المرور والأمان. يساعد التوافق، عند تمريره مع عنوان URL لشبكة LambdaTest، في تنفيذ الاختبارات على الشبكة السحابية. في طريقة test_enter_form_details()
، نتصفح أولاً إلى عنوان URL للاختبار عن طريق استدعاء طريقة driver.get()
.
ثم، يتم تكبير نافذة المتصفح المنشأة لأنها تعتبر واحدة من أفضل الممارسات في سيلينيوم.
ثم، يتم تحديد عنصر إرسال نموذج الإدخال باستخدام طريقة find_element()
مع محدد XPath في سيلينيوم. بمجرد تحديد الموقع، يتم استدعاء زر النقر في سيلينيوم لمحاكاة إجراء النقر على عنصر الزر الذي تم تحديده في الخطوة السابقة.
نظرًا لأن جميع خطوات الاختبار تنطوي على تحديد العناصر وأداء الإجراءات، نركز على عدد قليل من الطرق فقط. يُظهر النهج المستخدم لتحديد عنصر الشركة عبر محدد CSS في سيلينيوم أدناه. تساعد send_keys()
في مشغل سيلينيوم على إرسال إدخال نصي في العنصر المحدد.
القوائم المنسدلة تُستخدم على نطاق واسع على مواقع الويب؛ لذا، يصبح تأتير التفاعلات مع القوائم المنسدلة باستخدام Selenium أمرًا ضروريًا تمامًا لحالات الاختبار الخاصة بك. توفر فئة Select
في وحدة selenium.webdriver.support.ui أساليب تسمح لك بالتعامل مع القوائم المنسدلة باستخدام Selenium.
هنا، يتم إنشاء كائن (أي country_dropdown
) من فئة Select
بالمدخل الذي تم تعيينه لعنصر القائمة المنسدلة المحدد بمعرف XPath. تساعد طريقة select_by_visible_text()
في فئة Select
على تحديد العناصر باستخدام النص المرئي المطابق للسلسلة المعطاة (أي الولايات المتحدة).
عندما يتم إدخال جميع المعلومات في النموذج ويتم النقر على زر تقديم، ننتظر حتى يتم رؤية سلسلة الرسالة الناجحة (الافتراضي: مخفي) على الصفحة. يتم تنفيذ انتظار صريح مع الشرط المتوقع (أي وجود العنصر المحدد) حتى لا تكون رسالة النجاح على الصفحة.
يتم رفع استثناء إذا لم تكن السلسلة الناتجة موجودة على الصفحة. للتنفيذ على السحابة، يتم وضع علامة على المتغير lambda-status
كـ ناجح/فاشل اعتمادًا على حالة التنفيذ.
تحتوي إطارة teardown_method()
على تنفيذ لتنظيف الموارد أو الحالة بعد تنفيذ الاختبارات في الفصل. بنية if __name__ == "__main__":
تضمن أن تتم عملية التنفيذ الشفري فقط عند تشغيل النص مباشرة. يُطلق pytest.main()
إطار اختبار pytest الذي يكتشف وينفذ جميع الاختبارات الممكّنة (أي غير مُحدّدة كـ متخطية) في النص.
تنفيذ الاختبار (إطار العمل pytest)
بعد ضبط EXEC_PLATFORM
على السحابة، اسحب الأمر التالي في الطرفية لتشغيل اختبارات pytest على شبكة LambdaTest السحابية:
pytest --verbose --capture=no tests/pytest/pytest_selenium_demo.py
أدناه هو لقطة شاشة لوحة تحكم أتمتة الويب LambdaTest تشير إلى أن تنفيذ الاختبار كان ناجحًا:
التنفيذ (إطار العمل PyUnit)
يقع نص الاختبار لسيناريو الاختبار المذكور أعلاه باستخدام إطار العمل PyUnit في المسار tests/pyunit/pyunit_selenium_demo.py.
تظل اللوجيك الأساسية للاختبار دون تغيير عند التحويل من pytest إلى إطار العمل PyUnit (أو unittest). بدلاً من وحدة pytest
، يتم استيراد وحدة unittest
في الكود. تُورث فئة حالة الاختبار من unittest.TestCase
تُعلم وحدة unittest أن هذا هو حالة اختبار.
تشبه مرفقات pytest setup_method()
/teardown()
طرق setUp()
/tearDown()
في إطار PyUnit. تتكون طرق setUp()
و tearDown()
من تنفيذ مسؤول عن التهيئة والتهيئة النهائية على التوالي.
أدناه الرمز الأساسي لتنفيذ مجموعة الاختبار:
if __name__ == "__main__":
unittest.main()
تنفيذ الاختبار (إطار PyUnit)
بعد تعيين EXEC_PLATFORM
إلى السحابة، قم بتنفيذ الأمر التالي في الطرفية لتشغيل اختبارات PyUnit على شبكة السحابة:
python tests/pyunit/pyunit_selenium_demo.py
يظهر أدناه لقطة شاشة لوحة تحكم التلقائي على الويب LambdaTest تُشير إلى نجاح تنفيذ الاختبار:
في حال رغبت في تشغيل الاختبارات أعلاه على Selenium المثبت على الجهاز المحلي، قم بتعيين EXEC_PLATFORM
إلى local، وستكون جاهزًا للتنفيذ المحلي.
أفضل إطارات اختبار Python
نظرًا لدعم Python لعدد من إطارات اختبار الأتمتة، يصبح اختيار الإطار الصحيح أمرًا حاسمًا لمشروعك. الاختيار في الواقع يضع الأساس لاختبار فعال. بالإضافة إلى قدرات الإطار، يجب عليك أيضًا النظر في الخبرة الداخلية مع الإطار المعني. فيما يلي بعض أفضل إطارات اختبار Python:
PyUnit (unittest)
إنه الإطار الافتراضي المتاح في Python. كما يوحي الاسم، يُستخدم بشكل أساسي لاختبار الوحدات. يستلهم PyUnit من إطار JUnit لـ Java ويشترك في هيكل ووظائف مماثلة.
إطار الاختبار يدعم أيضًا تبادل الأتمتة لإعداد وإيقاف تشغيل رموز الاختبار، واستقلال الاختبارات عن إطار الإبلاغ، والمزيد. كما يدعم أيضًا مجموعات اختبار وحالات اختبار بطريقة توجيهية. كما يحتوي على مشغل اختبار وهو عنصر مسؤول عن تنسيق تنفيذ الاختبارات.
pytest
إنه أحد أكثر الأطر الشائعة لأتمتة الاختبارات في Python. يستخدم بناء جمل أقل إزعاجًا وصديق للمستخدم لتنفيذ الاختبارات. يمكن الاستفادة من pytest في تنفيذ اختبارات الوحدات بالإضافة إلى اختبارات الوظائف المعقدة لاختبار المواقع الإلكترونية وتطبيقات الويب.
الاختبارات المكتوبة باستخدام pytest أكثر انتظامًا، حيث لا يتطلب الإطار رمزًا منفصلاً. يحتوي pytest على ميزات مدمجة تساعد في العثور التلقائي على وحدات الاختبار والوظائف.
Robot
إنه إطار Python مفتوح المصدر مدعوم بالكلمات الرئيسية ويستخدم بشكل رئيسي لأتمتة عمليات الروبوت (RPA) واختبار الأتمتة. مثل إطار pytest، يمكن توسيع إطار Robot أيضًا. يقلل استخدام بنية جمل بسيطة وقابلة للقراءة من منحنى التعلم الذي يتضمن تعلم Robot.
يتم حفظ الاختبارات المكتوبة بـ Robot بامتداد .robot
. في حال كنت تخطط لاستخدام Robot لاختبارات الواجهة الأمامية، يمكنك فعل ذلك باستخدام SeleniumLibrary، وهو مكتبة اختبار الويب لإطار Robot. تدعم المكتبة مجموعة شاملة من الكلمات الرئيسية (انقر على الزر,انقر على الصورة, افتح المتصفح, سحب وإسقاط، وغيرها).
Nose2
إنه خليفة Nose وهو إطار اختبار Python يوسع قدرات إطار PyUnit (أو unittest). من السهل نسبيًا البدء مع Nose2 إذا كان لديك تجربة عمل سابقة مع unittest.
الجانب الأكبر لصالح Nose2 على PyUnit هو توفر عدد كبير من الإضافات المدمجة في Nose التي تجعل عملية الاختبار أسهل وأسرع. تساعد الإضافات في Nose2 في تعيين القيم للاختبار، وتنظيم أفضل للاختبارات، ودعم التثبيتات، واكتشاف الاختبار، والمزيد.
Behave
إنه إطار عمل Python يستخدم لتطوير السلوك (BDD). تعتمد الاختبارات على صيغة Gherkin، التي تعتمد على تنسيق Given-When-Then.
نظرًا لأن الاختبارات مُنفذة في ملفات سيناريو وميزة، يمكن للأفراد غير التقنيين أن يشاركوا في عملية ضمان الجودة. SpecFlow (C#) و Cucumber (Java، JS، Ruby) هي بعض الإطارات الشهيرة الأخرى لتطوير السلوك.
الاستنتاج
كما هو ملاحظ حتى الآن، يعتبر Python بوضوح أفضل لغة برمجة لأتمتة الاختبارات. من السهل نسبيًا البدء مع اختبارات Python للأتمتة. يمكن استخدام مجموعة واسعة من الأطر الاختبارية للاختبارات الوحدوية، واختبارات التصفح عبر المتصفحات، والمزيد. دعنا نعرف أدناه لغتك البرمجية المفضلة لاختبار Selenium وكيف تقيمها مقابل Python، الملك غير المنازع للاختبارات التلقائية. أتمنى لك اختبارًا سعيدًا!
Source:
https://dzone.com/articles/python-automation-testing-with-examples