כאשר מדובר באוטומציה של בדיקות קדמיות, בחירת שפת תכנות אידיאלית הופכת להיות קריטית ביותר. פייתון היא אחת מהשפות שמובילה ברשימה, בגלל קלות השימוש ותמיכה נרחבת מקהילה.
בנוסף, בדיקות אוטומציה בפייתון מאפשרות לך למצות את היכולות שמציעות הספריות והפריימוורקים הפופולריים כמו Selenium, pytest ו-Robot, בין השאר. שימוש ב-Selenium עם פייתון עוזר במיטול תועלת מירבית מיכולות האוטומציה של הדפדפן של Selenium ומפשטות ומרחיבות את פייתון. בכלל, בדיקות אוטומציה בפייתון משמשות בקרב QAs ברחבי העולם, במיוחד עם Selenium WebDriver.
בבלוג הזה, נחקור בעומק את התהליכים של פייתון מנקודת מבט קדמית. הלמידה מהבלוג הזה תהיה שימושית בשיפור היכולות של פייתון לאוטומציה של תרחישים קדמיים פשוטים ומורכבים כאחד.
מהו בדיקות אוטומציה בפייתון?
כפי שהשם מרמז, בדיקות אוטומציה בפייתון הן התהליך של שימוש בתסריטים בפייתון לאוטומציה של בדיקות. זו אחת השפות הפופולריות ביותר לאוטומציה של משימות ידניות וחוזרות.
דוגמה פשוטה של בדיקות אוטומטיות בפייתון כוללת ניצול של מסגרת pytest עם סלניום כדי לאוטומט בדיקות צד קדמי על פלטפורמת מסחר אלקטרוני. ניתן לאמת את פונקציית ההרשמה של אתר מסחר אלקטרוני ולהשתמש באותה הסשן כדי לגלוש באתר ולהוסיף פריטים דרושים לסל הקניות. בסוף הבדיקה הזו, תאמת את פונקציות ההרשמה, הכניסה והסל של אתר המסחר האלקטרוני.
לבסוף, ניתן גם לנצל את פייתון לאוטומציה של ניהול מערכת, אוטומציה של מיילים ומשימות עיבוד נתונים. מכיוון שפייתון הוא דרישה מוקדמת לבדיקות אוטומטיות, אנא הפנה את תשומת הלב לסרטון למטה, אשר עוסק בהתקנה של פייתון.
למה פייתון לבדיקה אוטומטית?
עכשיו כשאנחנו יודעים למה בודקים מעדיפים סלניום עם פייתון, בואו נסתכל על כמה מהסיבות החשובות לבחור בפייתון לבדיקה אוטומטית:
1. מגוון רחב של ספריות ומסגרות
PyUnit (או unittest) היא המסגרת הבדיקה ברירת המחדל לביצוע בדיקות יחידה עם פייתון. למרות ש-PyUnit זמינה מהקופסה, פייתון תומכת במסגרות פופולריות אחרות כמו pytest, Behave, Robot, Lettuce ו-Nose2.
כל המסגרות הללו יכולות לשמש באופן מקיף עם סלניום ומסגרות Playwright לאוטומציה של בדיקות דפדפן אינטרנט.
2. ביצוע בדיקות במקביל בצורה קלה מאוד
בדיקות מקבילות בסלניום ובפייתון יכולות לשמש באופן נרחב כדי לבצע בדיקות אוטומטיות של דפדפן אינטרנט על פני שילובים שונים של דפדפנים ופלטפורמות. למרות שכל השפות הנתמכות על ידי סלניום תומכות בביצוע בדיקות במקביל, זה קל מאוד לשימוש עם פייתון.
3. שפת תכנות מרובת פרדיגמות
פייתון היא שפת תכנות מרובת פרדיגמות. לכן, יש תמיכה מלאה בתכנות מונחה עצמים ובתכנות מבני. רוב התכונות בפייתון תומכות בתכנות פונקציונלי ובתכנות ממוקד היבטים. פייתון, יחד עם סלניום, יכולה גם לשמש לבדוק אתרי אינטרנט ויישומי אינטרנט באופן פונקציונלי.
4. טיפוס דינמי
שפת פייתון משתמשת בטיפוס דינמי ובקישור מאוחר (או פתרון שם דינמי) הקושר את השיטות ושמות המשתנים במהלך הביצוע. תכונה זו מאוד מועילה לאוטומציה של בדיקות פייתון.
פייתון מציעה גם אפשרויות כמו Pyre (בודק טיפוס מהיר לפייתון 3) ו-Mypy, שהם בודקי טיפוס סטטיים פופולריים. עם הבודקים הללו, פייתון מאפשרת לך לשלב את כוח הטיפוס הדינמי והסטטי.
5. חציית אתרים
חציית אתרים עם פייתון היא תהליך של חילוץ מידע/נתונים משמעותיים ושימושיים מאתרי אינטרנט. זה משמש בעיקר למטרות מחקר אקדמי, ניתוח מתחרים, אגירת תוכן ועוד.
פייתון מציעה מספר ספריות ומסגרות, namely BeautifulSoup (bs4), Selenium, Puppeteer, ו-Pyppeteer, שמקלות על משימת חציית תוכן מאתרי אינטרנט.
6. דיווח חזק וללא טרחה
דיווח באוטומציה של בדיקות מספק ראות טובה יותר על הדקויות של ביצוע הבדיקות (כלומר, אחוז הבדיקות שעברו/נכשלו, סביבה לבדיקה, צילומי מסך וכו'). דוחות חזקים שמספקים את המידע הנכון בצורה תמציתית וברורה יכולים להישלח לבעלי העניין הנדרשים (בצוות) כך שהם יהיו מודעים להתקדמות בתחום הבדיקות.
איך לבצע בדיקות אוטומטיות בפייתון?
עכשיו כשבדקנו את החשיבות של בדיקות אוטומטיות בפייתון, הבה נתחיל להיכנס לפרטים על ידי הרצת כמה בדיקות. הדיון שלנו יתמקד בעיקר בבדיקות אוטומטיות בחזית עם פייתון.
לפני שנתחיל עם הבדיקות, בואו נקים את הסביבה הווירטואלית (venv
), שעוזרת לנהל את הסביבה והתלותים בצורה טובה יותר. venv
ממלא תפקיד מרכזי בהענקת בידוד מהחבילות המותקנות בסביבה הבסיסית.
הריצו את הפקודות virtualenv venv
ו-source venv
/bin
/activate
בממשק השורת פקודה כדי ליצור את הסביבה הווירטואלית. כל התלותים (או חבילות פייתון), כמו 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). אם אתה בקיא באחת מהמסגרות הללו, מומלץ להשתמש ב-fixures ב-Python ובמודל Page Object ב-Selenium Python כדי לשפר את התחזוקה של הבדיקות. חבילת Selenium עצמה אינה מספקת כלי או מסגרת בדיקות. לכן, נשתמש ב-Selenium עם pytest ו-PyUnit כדי לאוטומט אינטראקציות עם האלמנטים בדף האינטרנט.
תסריט בדיקה
- נווט ל-LambdaTest Selenium Playground.
- מצא את הקישור להגשת טופס הקלט בדף.
- הזן את המידע הנדרש בדף.
- שלח את הפרטים, והקפד לבדוק אם המידע לא הוגש בהצלחה.
יישום (מסגרת 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
מספק סט של ExpectedConditions מוגדרות מראש ב-Selenium שניתן להשתמש בהן עם המתנות מפורשות.
כאשר הרכיבים צריכים להיות מאותרים לפני שאנו מבצעים כל פעולה, אנו מגדירים תחילה את מאתרי הרכיבים הנדרשים. ID, Name, XPath, Link Text, Partial Link Text ועוד, הם כמה ממאתרי הרשת הנפוצים שמסייעים לך למצוא רכיבים בתוך מודל אובייקט המסמך (DOM).
ניתן להשתמש בכלי הבדיקה הזמינים באופן טבעי עם דפדפן האינטרנט או בתוסף (או תוספת) כמו POM Builder שמקל על מציאת XPath/CSS Selector של WebElements.
פעם שאתה מזהה מאתר הרכיב, ה-WebElement(s) הרלוונטיים נמצאים על ידי שילוב של המאתר עם שיטת find_element()
או find_elements()
של Selenium Python. שיטת find_element()
מחזירה WebElement יחיד, בעוד ש-find_elements()
מחזיר רשימת WebElements שמתאימים לקריטריון המאתר.
כפי שצוין למעלה, ה-setup_method()
הוא תבנית pytest שהיא חלק מהאתחול. השיטה נקראת לפני כל פונקציית בדיקה מיושמת תחת המחלקת הבדיקה המסוימת.
הבדיקות שמיושמות יכולות להיות מורצות ב-Selenium המותקן על המחשב המקומי וגם על ה-רשת ה-Selenium המקוונת שמוצעת על ידי בדיקה בענן. LambdaTest הוא פלטפורמת ביצועי בדיקות מונעת על ידי AI שמאפשרת לך להריץ בדיקות אוטומטיות ב-Python בקנה מידה במגוון דפדפנים שונים ומערכות הפעלה. היא מגיעה עם מספר יתרונות, העיקריים מהם הם תחזוקה ממוזערת, עלויות נמוכות, וביצוע בדיקות מהיר.
ככל שהמימוש מתייחס, השינוי היחיד הוא הקשור ל- WebDriver של Selenium, איפה Remote WebDriver ב- Selenium מופעל כאשר מריצים בדיקות על רשת ענן. מחולל יכולות אוטומציה מסייע ליצירת יכולות עבור השילוב הנדרש לשימוש בבדיקות.
ב- Selenium 4, אפשרויות דפדפן משמשות במקום יכולות הרצויות. ניתן לבדוק את ההבדלים בין Selenium 3 ל- Selenium 4 בבלוג כדי לדעת עוד על מה שהופך לא מומלץ ומה שהופך לא מומלץ ב- Selenium 4.
משתני הסביבה LT_USERNAME
ו־ LT_ACCESS_KEY
ניתן לקבל מהגדרות החשבון שלך ב- LambdaTest Account Settings > Password & Security. השילוב, כאשר מועבר יחד עם כתובת ה- URL של רשת LambdaTest, מסייע בביצוע בדיקות על הרשת הענן. בשיטת test_enter_form_details()
, אנו מנווטים תחילה לכתובת ה- URL של הבדיקה על ידי קריאה לשיטת driver.get()
.
לאחר מכן, חלון הדפדפן המופעל מוגדל כיוון שזה נחשב לאחת השיטות הטובות ביותר של Selenium.
לאחר מכן, מיקום אלמנט הגשת הטופס מתבצע באמצעות השיטה find_element()
יחד עם מאתר ה- XPath ב- Selenium. לאחר שנמצא, לוחצים על הכפתור ב- Selenium כדי להדמות פעולת לחיצה על אלמנט הכפתור שנמצא בשלב הקודם.
מאחר שכל שלבי הבדיקה מעורבים באיתור אלמנטים ובביצוע פעולות, אנו מתמקדים רק במספר שיטות. הגישה המשמשת לאיתור אלמנט החברה דרך בורר ה־ CSS ב- Selenium מוצגת להלן. השיטה send_keys()
ב- WebDriver של Selenium מסייעת בשליחת קלט טקסט באלמנט שנמצא.
Dropdowns משמשים בצורה נרחבת באתרים; לכן, אוטומציה של אינטראקציות עם dropdowns באמצעות Selenium הופך לחובה מוחלטת עבור מקרי הבדיקה שלך. המחלקה Select
של מודול ה־selenium.webdriver.support.ui מספקת שיטות שמאפשרות לך לעסוק בdropdowns עם Selenium.
כאן, אובייקט (כלומר, country_dropdown
) של מחלקת ה־Select
נוצר עם הקלט שהוגדר לאלמנט ה־dropdown שנמצא עם XPath. שיטת select_by_visible_text()
של מחלקת ה־Select
עוזרת לבחור פריטים עם טקסט גלוי שתואם למחרוזת שניתנה (כלומר, ארצות הברית).
ברגע שכל המידע בטופס מוזן והלחצן Submit נלחץ, אנו ממתינים עד שמחרוזת ההצלחה (ברירת מחדל: מוסתר) תהיה גלויה בעמוד. ממתין ספציפי עם התנאי המצפה (כלומר, הופעת אלמנט שנמצא) מבוצע עד שמחרוזת ההצלחה לא תהיה על העמוד.
אם המחרוזת התוצאתית אינה קיימת על העמוד, assert נגרם. לביצוע בענן, המשתנה lambda-status
מסומן כ passed/failed בהתאם למצב הביצוע.
ה־fixture teardown_method()
מכיל ביצוע לניקוי משאבים או מצב לאחר ביצוע הבדיקות במחלקה. ה־if __name__ == "__main__":
מבטיח שביצוע הקוד יתבצע רק כאשר התסריט מופעל ישירות. הקריאה pytest.main()
מפעילה את הפריימורק pytest שגם מגלה ומבצע את כל הבדיקות שמופעלות (כלומר, לא מסומנות כ־skipped) בתסריט.
ביצוע המבחן (פריימוורק pytest)
לאחר שהגדרת EXEC_PLATFORM
לענן, יש לקרוא את הפקודה הבאה בטרמינל כדי להפעיל מבחני pytest על רשת ה-Cloud של LambdaTest:
pytest --verbose --capture=no tests/pytest/pytest_selenium_demo.py
להלן תמונת לוח המחוונים של אוטומציה ברשת של LambdaTest המעידה על הצלחת ביצוע המבחן:
יישום (פריימוורק PyUnit)
הסקריפט למבחן המצוין לעיל באמצעות פריימוורק PyUnit נמצא בנתיב tests/pyunit/pyunit_selenium_demo.py.
הלוגיקה הבסיסית של המבחן נשמרת בעת המעבר מ- pytest ל-PyUnit (או unittest) framework. במקום מודול pytest
, מיובא מודול unittest
לקוד. המחלקת מבחן מורשתת מ- unittest.TestCase
מודיעה למודול unittest כי זו מחלקת מבחן.
קבוצות נתונים ב- pytest setup_method()
/teardown()
דומים לשיטות setUp()
/tearDown()
של פריימוורק PyUnit. השיטות setUp()
ו- tearDown()
מכילות ביצועים שאחריותם השקה וסיום תהליך, בהתאמה.
מוצג להלן הקוד הבסיסי לביצוע אוסף המבחנים:
if __name__ == "__main__":
unittest.main()
ביצוע בדיקות (פייתון פיייוניט)
לאחר שהגדרת את EXEC_PLATFORM
לענן, יש להפעיל את הפקודה הבאה בטרמינל כדי להפעיל בדיקות PyUnit על גריד ענן:
python tests/pyunit/pyunit_selenium_demo.py
בתמונה למטה תוכל לראות צילום מסך של לוח הבקרה לאוטומציה של אתר LambdaTest המציין כי בדיקת הבדיקה הייתה מוצלחת:
במידה ותרצה להריץ את הבדיקות הנ״ל על Selenium שמותקן על המחשב המקומי, מספיק רק להגדיר את EXEC_PLATFORM
ל-local, ואז אתה מוכן לביצוע מקומי.
מסגרות בדיקה מובילות ב-Python
כיוון ש-Python תומך במספר מסגרות אוטומציה לבדיקות, בחירת המסגרת הנכונה היא קריטית לפרוייקט שלך. הבחירה בעצם מקימה את היסוד לבדיקה יעילה. בנוסף ליכולות המסגרת, יש להתחשב גם בידע הפנימי עם המסגרת הנ"ל. להלן כמה מהמסגרות המובילות ב-Pythonמסגרות בדיקת Python:
PyUnit (unittest)
זו המסגרת הברירת מחדל הזמינה ב-Python. כפי שהשם מרמז, היא משמשת בעיקר לבדיקות יחידה. PyUnit מושפעת מהמסגרת JUnit ל-Java ומשתפת מבנה ותפקוד דומים.
הגישת הבדיקות באמצעות מרכז הבדיקות תומך גם בשיתוף קודי הגדרה וסגירה של בדיקות, באודות הבדיקות ממסגרת הדיווח, ועוד. הוא תומך גם באוסף בדיקות ובמקרים באופן מונחה-עצמים. יש לו גם רץ בדיקות שהוא רכיב אחראי על אורכסטרצית ביצוע הבדיקות.
pytest
זהו אחד מסגנונות הבדיקות האוטומטיים הפופולריים ביותר עבור Python. הוא משתמש בתחביר פחות ארוך וידידותי למשתמש עבור המימוש של בדיקות. pytest יכול להיות מושך למימוש בדיקות יחידה כמו גם בדיקות פונקציונליות מורכבות לבדיקת אתרי אינטרנט ויישומי אינטרנט.
בדיקות שנכתבו בעזרת pytest הן הרבה יותר קומפקטיות, מכיוון שהסגנון לא דורש קוד רגיל. pytest כולל תכונות מובנות שעוזרות בגילוי האוטומטי של מודולי בדיקות ופונקציות.
Robot
זהו מסגרת פייתונית קודמת בתום מילה המבוססת על מילות מפתח ונמצאת בשימוש רב עבור אוטומציה של תהליכי רובוט ובדיקות. כדומה למרכז הבדיקות pytest, Robot גם היא מורחבת. שימוש בתחביר הקריא על הלמידה הקשורה בלמידת Robot.
בדיקות שנכתבו ב-Robot נשמרות עם סיומת .robot
. במקרה שתתכננו להשתמש ב-Robot עבור בדיקות חזית, תוכלו לעשות זאת עם ה-SeleniumLibrary, שהיא ספריית בדיקות אינטרנט עבור מסגרת Robot. הספרייה תומכת במגוון רחב של מילות מפתח (לחצן לחיצה, לחצן תמונה, פתח דפדפן, גרור ושחרור, בין השאר).
Nose2
זהו המחליף של Nose והוא מסגרת בדיקות Python המרחיבה את היכולות של מסגרת PyUnit (או unittest). יחסית קל להתחיל עם Nose2 אם יש לך ניסיון עבודה קודם עם unittest.
היתרון המרכזי של Nose2 על פני PyUnit הוא זמינותם של מספר גדול של תוספי Nose מובנים שהופכים את הבדיקות לקלות ומהירות יותר. תוספים ב-Nose2 עוזרים בפרמטריזציה של בדיקות, בארגון טוב יותר של בדיקות, תמיכה במתקנים, גילוי בדיקות ועוד.
Behave
זו מסגרת Python שמשתמשים בה עבור פיתוח מונחה התנהגות (BDD). הבדיקות מבוססות על תחביר גרקין, המבוסס על פורמט Given-When-Then.
מאחר שהבדיקות מיועדות בקבצי תרחישים ותכונות, גם אנשי צוות לא טכניים יכולים להיות חלק מתהליך הבדיקה. SpecFlow (C#) ו-Cucumber (Java, JS, Ruby) הם חלק מהמסגרות הפופולריות האחרות של BDD.
סיכום
כפי שנראה עד כה, Python היא ללא ספק שפת הסקריפטינג הטובה ביותר עבור אוטומציה של בדיקות. יחסית קל להתחיל עם בדיקות אוטומטיות ב-Python. מגוון רחב של מסגרות בדיקה יכול לשמש לבדיקות יחידה, בדיקות בין-דפדפן ועוד. ידעו אותנו למטה מה שפת התכנות המועדפת עליכם עבור בדיקות Selenium ואיך אתם מדרגים אותה מול Python, המלך הבלתי מעורער של בדיקות אוטומטיות. בדיקות מהנות!
Source:
https://dzone.com/articles/python-automation-testing-with-examples