מבט לאחור בזמן: התפתחות האוטומציה של בדיקות

הולדת האוטומציה של בדיקות

נתחיל בשנות ה-90, התקופה שבה נולד דפדפן האינטרנט. האוטומציה של בדיקות הפכה למציאות רק בשנות ה-2000, עם הופעתם של הפרויקטים Selenium ו-WebDriver, שנועדו להתמודד עם האתגרים של בדיקות במספר דפדפנים ובמכשירים שונים.

שני הפרויקטים האלה מוזגו בשנת 2011 ל-Selenium WebDriver, והפכו לתקן W3C בשנת 2018. בדרך כלל אנחנו קוראים לה WebDriver או WebDriver 'קלאסי'.

האבולוציה של פרויקט Selenium WebDriver.
האבולוציה של פרויקט Selenium WebDriver

אוטומציית הבדיקות לפני WebDriver 'קלאסי' הייתה די מסובכת. היכולת לבצע אוטומציה של בדיקות הדפדפן שיפרה משמעותית את איכות החיים של המפתחים והבודקים.

עלייתה של JavaScript

ככל שפיתוח האינטרנט התפתח והסתמך יותר על JavaScript, הופיעו פתרונות אוטומציה חדשים כמו WebdriverIO,‏ Appium,‏ Nightwatch,‏ Protractor‏ (הווצא משימוש),‏ Testcafe,‏ Cypress,‏ Puppeteer ו-Playwright.

כלים לאוטומציה ב-JavaScript.
כלים לאוטומציה של JavaScript

גישות לאוטומציה

באופן כללי, אפשר לחלק את הכלים האלה לשתי קבוצות גדולות על סמך האופן שבו הם מבצעים אוטומציה של הדפדפנים:

  • ברמה גבוהה: כלים שמריצים JavaScript בתוך הדפדפן. לדוגמה, Cypress ו-TestCafe משתמשים בממשקי API לאינטרנט וב-Node.js כדי להריץ בדיקות ישירות בדפדפן. עובדה מעניינת: בגרסת Selenium הראשונה השתמשו באותה גישה.
  • רמה נמוכה: כלים שמפעילים פקודות מרחוק מחוץ לדפדפן. כשהכלים דורשים שליטה רבה יותר, כמו פתיחת כמה כרטיסיות או סימולציה של מצב המכשיר, הם צריכים לבצע פקודות מרחוק כדי לשלוט בדפדפן באמצעות פרוטוקולים. שני פרוטוקולי האוטומציה העיקריים הם WebDriver 'קלאסי' ו-Chrome DevTools Protocol‏ (CDP).

בקטע הבא נבחן את שני הפרוטוקולים האלה כדי להבין את נקודות החוזק והמגבלות שלהם.

WebDriver Classic ו-CDP.

WebDriver 'קלאסי' לעומת פרוטוקול Chrome DevTools‏ (CDP)

WebDriver 'קלאסי' הוא תקן אינטרנט שנתמך בכל הדפדפנים העיקריים. סקריפטים של אוטומציה שולחים פקודות באמצעות בקשות HTTP לשרת הנהג, שמתקשר לאחר מכן עם הדפדפנים באמצעות פרוטוקולים פנימיים ספציפיים לדפדפן.

יש לו תמיכה מצוינת בדפדפנים שונים וממשקי ה-API שלו מיועדים לבדיקה, אבל הוא יכול להיות איטי ולא תומך באמצעי בקרה מסוימים ברמה נמוכה.

WebDriver 'Classic'.
WebDriver 'קלאסי'

לדוגמה, נניח שיש לכם סקריפט בדיקה שלוחץ על רכיב await coffee.click();. הוא מתורגם לסדרה של בקשות HTTP.

# WebDriver: Click on a coffee element

curl -X POST http://127.0.0.1:4444/session/:element_id/element/click
   -H 'Content-Type: application/json'
   -d '{}'

לעומת זאת, פרוטוקול כלי הפיתוח של Chrome‏ (CDP) תוכנן במקור לכלי הפיתוח של Chrome ולניפוי באגים, אבל Puppeteer אימץ אותו לצורך אוטומציה. CDP מתקשר ישירות עם דפדפנים מבוססי Chromium באמצעות חיבורי WebSocket, ומספק ביצועים מהירים יותר ובקרה ברמה נמוכה.

עם זאת, הוא פועל רק בדפדפנים המבוססים על Chromium, והוא לא תקן פתוח. בנוסף, ממשקי ה-API של CDP מורכבים יחסית. במקרים מסוימים, העבודה עם CDP לא ארגונומית. לדוגמה, עבודה עם iframes מחוץ לתהליך דורשת הרבה מאמץ.

CDP.
פרוטוקול Chrome DevTools

לדוגמה, לחיצה על רכיב await coffee.click(); מתורגמת לסדרה של פקודות CDP.

// CDP: Click on a coffee element

// Mouse pressed
{ 
  command: 'Input.dispatchMouseEvent', 
  parameters: {
    type: 'mousePressed', x: 10.34, y: 27.1, clickCount: 1 }
}

// Mouse released
{ 
  command: 'Input.dispatchMouseEvent', 
  parameters: {
    type: 'mouseReleased', x: 10.34, y: 27.1, clickCount: 1 }
}

מהם אמצעי הבקרה ברמה הנמוכה?

בימים שבהם WebDriver "Classic" פותח, לא הייתה צורך בשליטה ברמה נמוכה. אבל הזמנים השתנו, האינטרנט הרבה יותר מתקדם עכשיו והבדיקה דורשת היום פעולות מפורטות יותר.

מאחר ש-CDP תוכנן כדי לכסות את כל הצרכים של ניפוי באגים, הוא תומך באמצעי בקרה ברמה נמוכה יותר בהשוואה ל-WebDriver 'קלאסי'. הוא מסוגל לטפל בתכונות כמו:

  • תיעוד הודעות במסוף
  • תיעוד של בקשות רשת
  • סימולציה של מצב המכשיר
  • סימולציה של מיקום גיאוגרפי
  • ועוד.

לא ניתן היה לבצע את הפעולות האלה ב-WebDriver 'קלאסי' בגלל הארכיטקטורה השונה – WebDriver 'קלאסי' מבוסס על HTTP, ולכן קשה להירשם לאירועים בדפדפן ולהאזין להם. לעומת זאת, CDP מבוסס על WebSocket ותומך בהעברת הודעות דו-כיוונית כברירת מחדל.

השלב הבא: WebDriver BiDi

לפניכם סיכום של נקודות החוזק של WebDriver 'קלאסי' ושל CDP:

WebDriver 'קלאסי' פרוטוקול Chrome DevTools‏ (CDP)
תמיכה בדפדפנים שונים שליחת הודעות מהירה דו-כיוונית
תקן W3C מספקת בקרה ברמה נמוכה
כלי לבדיקה

WebDriver BiDi שואף לשלב את ההיבטים הטובים ביותר של WebDriver 'קלאסי' ו-CDP. זהו פרוטוקול אוטומציה סטנדרטי חדש לדפדפנים שנמצא כרגע בפיתוח.

מידע נוסף על פרויקט WebDriver BiDi – איך הוא עובד, החזון ותהליך הסטנדרטיזציה.