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

עם ה-Grid נוכל בלחיצת כפתור להריץ את אותם סטים של בדיקות בו זמנית על מערכות שנות כמו למשל Chrome/Win 7 , IE/Win XP , Safari/iOS , Firefox/Linux , Chrome/Android ועוד ועוד ועוד …

כך השימושים העיקריים של ה-Grid נעשים בעיקר בכיסוי רחב יותר של סביבות, חיסכון בזמן הכללי של הריצה וכן בדיקות עומסים.

הארכיטקטורה מבוססת על שרת לקוח או בשפה המקומית: Hub – Nodes, כך שהפעלת הטסטים יתבצעו על ה-Hub והרצתם בפועל תתבצע על כל ה-Nodes שהוגדרו במערכת, למשל Node 1 יותקן על סביבת לינוקס עם דפדפן FireFox , Node 2 יותקן על סביבת iOS עם דפדפן ספארי וכו'.

ניתן לראות את האכיטקטורה כך :

[מתוך האתר: grid.selenium.googlecode.com]

 

ל-Grid יש 2 גרסאות נכון להיום, אתמקד בגרסה השנייה המעודכנת יותר – Grid 2, ההבדלים ביניהם גדולים, בין היתר Grid 2:

  • יכול לתמוך בעד 5 דפדפנים לכל Remote Control (Grid 1 – רק דפדפן אחד)
  • תומך בטסטים הכתובים ב-WebDriver (Grid 1 – רק ב-RC)
  • מכיל את ה-Selenium Server

 

 

שלב 1 – התקנת Java

וודאו כי על מחשבכם מותקן Java (כל מחשב שיריץ הן Hub והן Nodes), לבדיקה האם מותקן או לא, פתחו את ה-Command Line והקישו : Java -Version . במידה ולא מותקן, היכנסו לאתר של Oracle , הורידו והתקינו את ה-JDK (הגרסה האחרונה)

* שימו לב, גם אם אינכם עובדים עם JAVA , הפלטפורמה ומערך הבדיקות שלכם כתובים בטכנולוגיה אחרת אין זה אומר כי אתם יכולים לדלג על שלב זה, ללא התקנת JAVA לא תוכלו להתקין את ה-Grid.

 

 

שלב 2 – התקנת ה-Selenium Grid Server (Hub)

לשם כך עלינו תחילה להיכנס לדף ההורדות של פרוייקט Selenium (http://docs.seleniumhq.org/download) ומשם להוריד את ה- Selenium Server (לינק ישיר: כאן) שהוא למעשה קובץ jar.

פתחו את ה-Command Line והכניסו את הפקודה הבאה:

java -jar selenium-server-standalone-2.44.0.jar -role hub -port 4444 -nodeTimeout 600

מה עשינו פה ?

ביקשנו להתקין את קובץ ה-Jar שהורדנו (במקרה שלנו הגרסה היא 2.44.0), הגדרת ה-Role מבדילה בין התקנת Hub או Node , פה אנחנו מגדירים לו להתקין Hub , עם Port 4444 שהוא ה-Port ברירת המחדל (כשמפעילים את ה-Hub הוא מתחיל אוטומטית להאזין לPort זה. הגדרנו לו עוד שדה (רשות) של TimeOut ל-600 שניות (10 דקות).

* אופציה נוספת: את ה Hub אוכל להגדיר דרך קובץ חיצוני, (בד"כ JSON או YAML), כמו בדוגמא המתוארת בלינק הזה:

והקריאה להפעלת קובץ זה תהיה כך:

java -jar selenium-server-standalone-2.25.0.jar -role hub -hubConfig <File Name>.json

כעת ניתן להיכנס לדפדפן ולבדוק את הגדרת ה-Hub שלנו על ידי הכנסת הכתובת הבאה: http://localhost:4444/grid/console , הקלקה על View Config תציג לנו מידע מפורט יותר על ה-Server שהתקנו.

המסך שיופיע אמור להיראות כך:

שלב 3 – התקנת ה- Selenium Grid Nodes

* על כל סביבת הרצה בה נרצה לעבוד עם ה-Grid נצטרך לבצע את השלב הזה.

בשביל לחבר את ה-Node ל-Hub כאשר הNode יוגדר לוקאלית על המכונה (Node + Hub יושבים על אותה מכונה) נפתח את ה-Command Line ונכניס את הפקודה הבאה:

java -jar selenium-server-standalone-2.44.0.jar -role node –hub http://localhost:4444/grid/register

ואילו Node היושב במכונה מרוחקת יוגדר כך:

java -jar selenium-server-standalone-2.44.0.jar -role node -hub http:// <IP Address>:4444/grid/register

<IP Address> = כתובת ה-IP שבו יושב ה-Hub תוגדר פה

חיבור Node עם הגדרה ספציפית של פרמטרים:

java -jar selenium-server-standalone-2.44.0.jar -role node -hub http:// <IP Address>:4444/grid/register 
-browser browserName="internet explorer",version=11,maxInstances=4,platform=WINDOWS -port 5556

בדוגמא זו הראתי חיבור של Node מעל מכונה בעלת מערכת הפעלה Windows , בעלת דפדפן מסוג IE , גרסה 11 , ניתן להריץ עד 4 דפדפנים לחיבור זה שיושב על Port 5556 ומאזין לו.

* שימו לב כי ערך ה-Role בספרות יופיע פעם כ-Node , פעם כ- WebDriver ופעם כ-RemoteControl וזה למה ? סיבה היסטורית לתמיכה לאחור. כשיצא Grid 1 עבדו עם החיבור של RC בלבד , Grid 2 הביא איתו גם את התמיכה ב-WD ואילו ה-Node מכיל את שניהם. כך שאם אני משתמש ב-Grid 1 אוכל להשתמש ב -role remotecontrol או ב –role node ואם אני מריץ את Grid 2 אוכל להשתמש ב –role webdriver או –role node

* אופציה נוספת: גם את ה Nodes אוכל להגדיר דרך קובץ חיצוני, (בד"כ JSON או YAML), כמו בדוגמא המתוארת בלינק הזה.

והקריאה להפעלת קובץ זה תהיה כך:

java -jar selenium-server-standalone-2.25.0.jar -role node -nodeConfig <File Name>.json

בסיום הגדרת ה Nodes , ניכנס לדפדפן ונכניס את הכתובת: http://localhost:4444/grid/console

המסך שיופיע אמור להיראות כך:

שלב 4 – הרצת הטסטים אל מול ה-Grid

עכשיו, אחרי שהגדרנו את ה-Hub וה Nodes נותר לנו להריץ את הבדיקות, אך רגע לפני ההרצה, נצטרך להגדיר עוד 2 דברים: קובץ קונפיגורציה ומתודת Setup בקוד שלנו .

יצירת קובץ הקונפיגורציה:

הקובץ יוצג כ-XML והוא למעשה יכיל את הטסטים של ה Grid (לא הטסטים שלנו ב-QA) , שיורכבו מהגדרות של משתני סביבה בעיקר. פה נגדיר איפה נריץ בהרצה מקבילית בפרוייקט שלנו.

תחילה נגדיר את ה-Suite :

<suite name="Parallel Tests" verbose="1" thread-count="3" parallel="tests">
</suite>

 

(הגדרנו פה הרצה מקבילית על 3 Threads שונים)

ואח"כ את ה tests וה parameters שלהם:

<tests>
    <test name="Windows+IE11 Test">
    <parameters>
    <parameter name="platform" value="Windows" />
    <parameter name="browser" value="Internet Explorer" />
    <parameter name="version" value="11" />
    <parameter name="url" value="http://www.Google.com"/>
    </parameters>
    <classes>
    <class name="GridTest" />
    </classes>
</test>
    <test name="Adroid Test">
    <parameters>
    <parameter name="platform" value=" Android " />
    <parameter name="browser" value="Chrome" />
    <parameter name="version" value="39.0.2171.71" />
    <parameter name="url" value="http://www.google.com"/>
    </parameters>
    <classes>
    <class name="GridTest" />
    </classes>
</test>
</tests>

 

בדוגמא זו ראינו הגדרת 2 סביבות , הראשונה על Windows עם IE 11 והשניה על Android עם Chrome, בשני המקרים אני מאתחל את הדפדפן עם אתר הבית של Google , שימו לב כי הגדרנו את שם הclass כ- GridTest (נחזור אליו אח"כ).

הוספת מתודת Setup:

הוספת המתודה הזו ל-Class שלנו תיתן לנו את היכולת להתממשק עם ה Grid (כתוב ב-C#):

public void SetupTest()
       {
           DesiredCapabilities capabilities = new DesiredCapabilities();
           capabilities = DesiredCapabilities.Firefox();
           capabilities.SetCapability(CapabilityType.BrowserName, "firefox");
           capabilities.SetCapability(CapabilityType.Platform, new Platform(PlatformType.Windows));
           capabilities.SetCapability(CapabilityType.Version, "21.0");
           driver = new RemoteWebDriver(new URL ("http://<Machine IP>:5556/wd/hub"), capabilities);
//<Machine IP> belongs to the second machine IP Address
           //driver = new FirefoxDriver();
           baseURL = "https://www.google.com";
           verificationErrors = new StringBuilder();
       }

 

* שימו לב – מכיוון שבקובץ הקונפיגורציה הגדרנו כי <class name="GridTest” /> , לכן את המתודה שלנו נכתוב תחת אותו שם class (או לחילופין נשנה את השם בקובץ הקונפיגורציה).

כתיבת הטסט:

זהו, כמעט סיימנו, כל מה שנותר הוא לכתוב את הטסט עצמו ב-Selenium , הנה דוגמא לכניסה למנוע החיפוש של גוגל וחיפוש המילה Test:

[Test]
public void GoogleTest()
{
     driver.Navigate().GoToUrl(baseURL + "/");
     driver.FindElement(By.Id("gbqfq")).Clear();
     driver.FindElement(By.Id("gbqfq")).SendKeys("Test");
     driver.FindElement(By.Id("gbqfb")).Click();
}

* שימו לב כי ה- baseURL מוגדר אצלינו תחת ה- SetupTest()

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

 

תוספת:

* באה חברת Codoid , הגדילה לעשות ושיחררה כלי GUI להתקנה והגדרה של Selenium Grid , אז לאלו מכם שלא אוהבים את החלון השחור של ה  Command Line, יש לכם אלטרנטיבה שנקראת VisGrid אותה ניתן להורידה כאן.

 

* ישנן כמה חברות מסחריות שמציעות את טכנולוגיית ה-Grid כשירות אצלם בענן, כך שאת כל נושא האינפלמנטציה הם מסדרים, אתם נחשפים מהם לדף dashboard configuration page , מגדירים את הנתונים שלכם ובלחיצת כפתור מתחיל להריץ. השירות אינו חינמי אך יכול לחסוך לכם זמן רב בהתעסקות עם תחזוקת השרתים, הגדרות והתקנות. הנה כמה מהן:

https://saucelabs.com/selenium/selenium-grid

http://www.perfectomobile.com

https://testingbot.com

https://gridlastic.com

http://www.browserstack.com

השאר הערה\הודעה