אתחיל במשפט הסיכום של פוסט זה: Robot Framework היא סביבת האוטומציה המשתלמת ביותר בשוק. Value for Money היא מדורגת במעלה הרשימה של כלי האוטומציה המובחרים ביותר כשהאחרים מתחרים על המקומות השני והשלישי.

זהו, הוצאתי את זה החוצה. עכשיו מה שנשאר לי לעשות הוא להצדיק את המשפט הנחרץ הזה.

בשביל להסביר מהו Robot Framework , אצטרך להסביר קודם כל מהו Framework …

Framework בעולם התוכנה מתייחס לשלד בו אנו כותבים את הפרוייקט שלנו, השלד נבנה ע"י אוסף של כלים, טכניקות וחוקים אבסטרקטיים. אוקיי, זה לא אומר לנו הרבה, נכון ? אחזור למשפט הזה בעוד כמה רגעים… כעת אני מעוניין להראות דוגמא:

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

עכשיו נגיד שאבקש מכם לחזור על אותה הפעולה 1000 פעמים (לצייר לי 1000 משולשים על 1000 דפים שאספק לכם), אך הפעם תורשו להשתמש בכל כלי שעולה על דמיונכם. מה תעשו ? סביר להניח שלא תחזרו על אותה השיטה כמו מקודם, לבטח תרצו ליעל אותה, ועם כלים אחרים שתוכלו לקבל ניתן בהחלט לבצע זאת. דרך אחת למשל תהיה ליצור משולש שווה שוקיים מחתיכת קרטון ואז להעתיק אותה כתבנית 1000 פעם (מהיר יותר מ-1000 מדידות עם הסרגל) , דרך אחרת היא להשתמש באותה תבנית עם נייר copy באמצע, כך שה-1000 משולשים משורטטים יורדים ל-500 ,  דרך אפילו טובה עוד יותר היא להשתמש במכונת צילום , לשרטט משולש אחד ולצלם אותו 999 פעמים.

 

מה ראינו פה ?

דרך סדרה של כלים (סרגל, תבנית, מכונת צילום) , חוקים (מותר להשתמש בכל כלי אפשרי) וטכניקות (שרטוט לפי תבנית , צילום במכונה…) הצלחתם ליעל את העבודה שלכם בעשרות מונים. אז Framework בעולם התוכנה פועל על פי אותו העיקרון – אנו נשתמש באוסף של כלים, חוקים וטכניקות על מנת ליעל את עבודתינו, אוסף זה מיוצג כשלד או כ-Framework.

אז Robot Framework הוא סוג של Framework שחי בעולם התוכנה, חי בעולם הבדיקות. גם לו יש סט של כלים, טכניקות והנחות אבסטרקטיות. ותפקידו (מלבד לאפשר לנו לכתוב בדיקות אוטומטיות) הוא להקל עלינו את החיים.

בפועל , הרובוט יודע להתממשק לספריות חיצוניות ולקרוא לפונקציות הממומשות בהן, לדוגמא אוכל לחבר את הרובוט שלי לספריה מתמטית ולקרוא לפונקציית ADD תוך העברת 2 פרמטרים (2, 1) , לא אני אצטרך לממש את פונקציית החיבור הזו, מישהו אחר כבר מימש את זה ונותן לי להשתמש במימוש שלו, כך שקריאה לפונקציה הזו עם הפרמטרים 2,1 תחזיר לי את הערך 3

בהמשך לדוגמא, הרובוט מגיע עם פונקציונליות עשירה שאחרים כבר מימשו אותה ונותנים לנו להשתמש בה, כמו – כתיבה למערכת לוגים ו-Reports , צילומי מסך, התממשקות ל-CI , תמיכה ב-KDT, הרצה מקבילית, וכמובן התממשקות להרבה מאוד ספריות חיצוניות (כמו הספריה המתמטית שנתנו כדוגמא).

 

Robot Framework Vs. Selenium WebDriver

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

סלניום היא ספרייה ואילו הרובוט הוא Framework שמשתמש בספריות (כמו שעם הכיריים אוכל לבשל את תפוחי האדמה). עם הרובוט אוכל לבצע בדיקות אוטומטיות במגוון תחומים, אוכל לבצע בדיקה על פעולת החיבור בעזרת ספריית המתמטיקה ובדיקה האם אלמנט קיים על דף ה-HTML בעזרת ספריית הסלניום.

אז ניתן להגיד למעשה כי ספריית הסלניום מוכלת בתוך ה-Framework של הרובוט, כפי שניתן לראות בתמונה הבאה:

* מכיוון שסלניום היא בסך הכל רק ספרייה, לא ניתן להריץ את הבדיקות שכתבנו עימה מתוך עצמה, צריך איזשהו Test Runner שיבצע את הפעולה הזאת, לכן אנחנו תמיד עובדים עם סלניום ושכבה נוספת, כמו ה-Junit , Nunit, TestNG, MSTest וכו'…

 

 איך הרובוט עובד ?

כמו שכבר נכתב, הרובוט משתמש בספריות, התרשים הבא מתאר את הארכיטקטורה של הסביבה, המלבנים הכתומים מייצגים את ההתממשקות לספריות (במקרה הזה לסלניום ול-Data Base):

 

אלו הן רשימות הספריות הנתמכות ברובוט (צילומי מסך שנלקחו מהאתר הרישמי):

 

 

 

הרובוט עצמו כתוב בשפת Python – מה שמאפשר לתמוך בכמות ספריות כל כך גדולה , אך יש לו הרחבות גם ל-Java (עם Jython) , וגם ל-NET. (עם IronPython).

 

מודל השכבות ב-Robot Framework

ה-Robot Framework מאפשר לכתוב פרוייקטים (כמו הסלניום) בכמה שכבות:

1. השכבה הראשונה היא API שיושב מעל שכבת ה-API של סלניום, בשכבה זו הקוד יראה כך:
שימו לב לפשטות של הקוד, פקודת ה-open browser שמיוצגת כשורת קוד אחת, מקבלת 2 פרמטרים: שם האתר לנווט אליו ושם הדפדפן. זהו. כמה שורות קוד היינו צריכים לכתוב ב-Selenium WebDriver טהור בשביל לבצע את אותה הפעולה ? אני סופר לפחות חמש
2. השכבה השנייה נקראת Keywords ובה אנו יכולים לאגד כמה סטפים לפונקציה (Keyword) אחת ואז לקרוא לפונקציה הזו, לדוגמא : אני יכול לאגד 3 סטפים של 1- הכנסת ערך לשדה המשתמש , 2- הכנסת ערך לשדה הסיסמא, 3 – לחיצה על כפתור ה-login. לפונקציה (Keyword) הזאת אקרא נגיד בשם Login To Site עם הפרמטרים הרלוונטים (ערכי שם משתמש וסיסמא)
3. שכבה שלישית שאוכל לכתוב היא שכבת ה-Page Objects – דרכה אמפה את האתר שלי ואחלק את הפרוייקט שלי לקבצים בהתאמה למיפוי.  ה-Page Objects היא טכניקה עיצובית (Design Pattern) , אינה קשורה לרובוט, אך כמובן שניתן ואף מומלץ להכיל אותה גם כאן.
4. בשכבה הרביעית נוכל להשתמש בתמיכה של הרובוט ב- Gherkin (כמו ש-Cucumber ו-SpecFlow משתמשים בו) ואז לכתוב את הבדיקות שלנו בסגנון :
כמובן שניתן לכתוב את השכבה הזו בצורה של KDT או כל צורה שתהיה לנו מספיק ברורה ויפה לעין הבודק.

במידה ונחלק את הפרוייקט שלנו לקבוצת כותבי התשתית וקבוצת הבודקים שאחראים על ה-Business Scenarios , אז כותבי התשתית יטפלו בשכבות 1+2+3 ואילו הבודקים יטפלו בשכבה 4.

 

מערכת ה-Reporting

אני חייב לציין את מערכת ה-Reporting של הסביבה הזו, היא אמנם לא הכי מרשימה ויזואלית שראיתי , אך היא ברורה, היא נוחה, היא נותנת את כל המידע שאני זקוק לו (כולל צילמי מסך) ובעיקר בעיקר – היא דורשת אפס מאמץ להטמיע אותה.

הנה ארבע צילומי מסך שלקחתי אחרי הרצה של בדיקה (של צילום מסך של לוג וצילום מסך של דוח):

במקרה של טסט שעבר:

 

 

במקרה של טסט שנכשל:

 

 

לסיכום

מערכת ה-Reporting שהצגתי מסמלת לטעמי את הרובוט, באופן הקלות והפשטות בהקמתה. כמו שראינו בדוגמא לעיל כי לפתוח דפדפן ברובוט מצריך ממני כתיבה של שורת קוד אחת בסה"כ (לעומת 5 בסלניום) , כמו שראינו לוגים ודוחות שמיוצרים לי אוטומטית עם הרצה של בדיקות מבלי שנדרשתי לכתוב שורת קוד אחת למימושן וקיימות עוד דוגמאות רבות שלא הצגתי כאן, זה מביא אותי לחזור על משפט הפתיחה שלי כאן בפוסט – Robot Framework היא סביבת האוטומציה המשתלמת ביותר בשוק.

 

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