טסטים מונעי נתונים (Data-Driven Testing, DDT) היא גישה לבדיקות תוכנה שבה הבדיקות מתבצעות על סמך נתונים משתנים. DDT הפך לפופולרי בזכות יכולתו לשפר את האיכות והיעילות של תהליכי הבדיקות על ידי התמודדות עם מגוון רחב של מצבים ותרחישים. במאמר זה, נחקור את העקרונות המרכזיים של טסטים מונעי נתונים, מתי להשתמש בטכניקה הזו, וסוגי היישום השונים עם דוגמאות קוד בשפת Python.
עקרונות מרכזיים של טסטים מונעי נתונים
הפרדת נתונים מהלוגיקה: הנתונים המוזנים לטסטים מופרדים מהטסט עצמו. הם יכולים להישמר בקובץ של הטסט, בקבצים חיצוניים או מאגרי נתונים, והלוגיקה של הטסטים מתבססת על אותם נתונים.
יכולת תחזוקה: שינויים בנתונים לא מחייבים שינוי בקוד הטסט עצמו.
גמישות ושימוש חוזר: אותו טסט יכול להתבצע על מערכות נתונים שונות ללא שינוי בלוגיקה.
יעילות: מאפשר לזהות בעיות על ידי שימוש במגוון רחב של נתונים.
מתי נשתמש בטכניקה של Data-Driven Testing
טסטים מונעי נתונים מתאימים בעיקר במקרים הבאים:
כאשר יש צורך לבדוק את אותה הפונקציונליות עם קלטים שונים.
כשנדרשת בדיקה על קבוצות נתונים גדולות ומגוונות.
במקרים שבהם תהליכי העבודה חייבים לוודא התנהגות תקינה תחת מגוון מצבים.
סוגי היישום של טסטים מונעי נתונים
לופים על נתונים: שימוש בלולאות כדי לעבור על נתונים שונים ולבצע את אותו הטסט מספר פעמים כאשר כל איטרציה בודקת סט נתונים שונה ונפרד. לדוגמה הקוד למטה עובר בלופ על שני סטים של נתונים ליצירת משתמש. הנתונים כוללים שם משתמש, אימייל והתוצאה הצפויה (האם יצירת המשתמש עברה בהצלחה). שים לב שבסט הנתונים של user2 אנו מצפים לכישלון ביצירת המשתמש בגלל אימייל לא תקין, ולכן התוצאה הצפויה היא False.
# test_users.py
# Parameterize decorator to pass different datasets to the test function
@pytest.mark.parametrize("username, email, expected_result", [
("user1", "user1@example.com", True),
("user2", "invalid-email", False)
])
def test_create_user(username, email, expected_result):
assert create_user(username, email) == expected_result
שימוש בתבניות נתונים גמישות: בגישה זו, נתונים נכנסים ממלאים תבניות בקרה המותאמות לצרכים ספציפיים של כל בדיקה. כל תבנית יכולה להכיל מערכות נתונים שונות המוזנות לפעולות רק אם הן קיימות. גישה זו נחוצה בעיקר כאשר נדרש להזין נתונים רבים לטופס (למשל טופס יצירת משתמש כמו בדוגמה שלמטה), נתונים אלה יכולים להשתנות בין בדיקה לבדיקה בהתאם להקשר, בעוד שתהליך ההזנה עצמו מתבצע על ידי אותו קוד. בגישה זו, ניתן לבדוק תרחישים רבים עם שדות אופציונליים וערכים שונים. בדוגמה הבאה אנו משתמשים במתודה create_user בשני טסטים שונים (UI) על מנת למלא טופס יצירת משתמש עם נתונים בעלי הרכב שונה. שים לב שהמתודה מטפלת רק בנתונים שקיימים בטסט תוך שימוש בתנאי if.
# test_users_heterogeneous.py
from user_page_objet import create_user
user_data1 = {
first_name: ”Sniff”,
email: ”sniff@yahoo.com”,
address: ”Moomin valley”
}
user_data2 = {
first_name: “Moomin”,
last_name: ”Troll”,
email: ”moomin@msn.com”
phone: ”+888-544578764”,
address: ”moomin valley 1”
}
def test_create_user1():
create_user(user_data1)
def test_create_user2():
create_user(user_data2)
# user_page_objet.py
def create_user(user_data):
if user_data.get("first_name"):
enter_first_name(user_data["first_name"])
if user_data.get("last_name"):
enter_last_name(user_data["last_name"])
if user_data.get("email"):
enter_email(user_data["email"])
if user_data.get("phone"):
enter_phone(user_data["phone"])
if user_data.get("address"):
enter_address(user_data["address"])
submit_form()
סיכום ומסקנות
טסטים מונעי נתונים מציעים גישה יעילה וגמישה לבדיקת תוכנה, שמאפשרת להשתמש במערכות נתונים מגוונות כדי לכסות את מרבית המצבים האפשריים. הפרדת הנתונים מהלוגיקה משפרת את יכולת התחזוקה ומאפשרת התאמה קלה לשינויים. על ידי השימוש ב DDT ניתן להפחית את המאמץ בבדיקות ולשפר את איכות התוכנה באופן כללי. זהו כלי חשוב בארגז הכלים של מפתחי הבדיקות, התורם לשיפור היעילות והאפקטיביות של תהליך הבדיקות.
Comments