ה-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 עם דפדפן ספארי וכו'.
ניתן לראות את האכיטקטורה כאן :
התמונה נלקחה מהאתר: http://grid.selenium.googlecode.com/git-history/22ed3ff910401af083bf06a4d13514f4c6a623ca/src/main/webapp/diagrams/Requesting%20a%20Specific%20Environment.png
ל-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
לשם כך עלינו תחילה להיכנס לדף ההורדות של פרוייקט סלניום (http://docs.seleniumhq.org/download) ומשם להוריד את ה- Selenium Server (לינק ישיר: http://selenium-release.storage.googleapis.com/2.44/selenium-server-standalone-2.44.0.jar) שהוא למעשה קובץ 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), כמו בדוגמא המתוארת בלינק הזה: https://code.google.com/p/selenium/source/browse/java/server/src/org/openqa/grid/common/defaults/DefaultHub.json
והקריאה להפעלת קובץ זה תהיה כך:
java -jar selenium-server-standalone-2.25.0.jar -role hub -hubConfig <File Name>.json
כעת ניתן להיכנס לדפדפן ולבדוק את הגדרת ה-Hub שלנו על ידי הכנסת הכתובת הבאה: http://localhost:4444/grid/console , הקלקה על View Config תציג לנו מידע מפורט יותר על ה-Server שהתקנו.
המסך שיופיע אמור להיראות כך:
נלקח מהאתר: http://i.stack.imgur.com/B2kS8.png
שלב 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), כמו בדוגמא המתוארת בלינק הזה: https://code.google.com/p/selenium/source/browse/java/server/src/org/openqa/grid/common/defaults/DefaultNode.json
והקריאה להפעלת קובץ זה תהיה כך:
java -jar selenium-server-standalone-2.25.0.jar -role node -nodeConfig <File Name>.json
בסיום הגדרת ה Nodes , ניכנס לדפדפן ונכניס את הכתובת: http://localhost:4444/grid/console
המסך שיופיע אמור להיראות כך:
נלקח מהאתר: http://www.ibm.com/developerworks/library/wa-selenium2/fig02.jpg
שלב 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
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 אותה ניתן להוריד כאן (http://www.codoid.com/products/view/2/30)
* ישנן כמה חברות מסחריות שמציעות את טכנולוגיית ה-Grid כשירות אצלם בענן, כך שאת כל נושא האינפלמנטציה הם מסדרים, אתם נחשפים מהם לדף dashboard configuration page , מגדירים את הנתונים שלכם ובלחיצת כפתור מתחיל להריץ. השירות אינו חינמי אך יכול לחסוך לכם זמן רב בהתעסקות עם תחזוקת השרתים, הגדרות והתקנות. הנה כמה מהן:
https://saucelabs.com/selenium/selenium-grid
--------------------------------------------------------------
לכתבות נוספות, טיפים וכל מה שקשור לבדיקות אוטומטיות
היכנסו לאתר שלי: http://atidcollege.co.il
יוני פלנר.