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

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

רבים מתבלבלים וחושבים כי עצם זה שהם למדו כמה פקודות ב-Selenium זה כבר הופך אותם למפתחי אוטומציה, אז יכול להיות שבזמן העבודה נתנו להם פרוייקט לחקור ולנסות להכניס איזשהו מנגנון אוטומטי לתהליכי הבדיקות או שיכול להיות כי הם למדו זאת בעצמם ע"י חיפוש וחקירות דרך האינטרנט, אני מעוניין להבהיר נקודה זו באופן חד משמעי – לדעת להשתמש בפקודות Selenium לא אומר לדעת לכתוב תשתית אוטומציה!

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

המימוש הזה הולך כך:

String firstResult = "1";
driver.get("http://www.google.com");
driver.findElement(By.id("lst-ib")).sendKeys("קורס סלניום");
driver.findElement(By.name("btnK")).click();
String site = driver.findElement(By.xpath("//*[@id='rso']/div/div/div[" + firstResult + "]/div/div/div/div/cite/span")).getText();
assertTrue(site.contains("blog.yoniflenner.net"));

 

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

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

 

 

התשובות לכל השאלות הללו הן לא, לא, לא ולא.

כפי שרשמתי בהתחלה – לדעת לקרוא לפקודות ב-Selenium לא הופך את הקוד שלנו לתשתית.

אז מהי למעשה תשתית ? מהי מכילה ?

להלן רשימה של תהליכים אותם יש לממש בכדיי לכתוב פרוייקט אוטומציה תשתיתי , כאשר מעליו נוכל לכתוב את הפונקציונליות ב-Selenium , ב-Appium , ב-Winium או בכל ספריית קוד המאפשרת לנו לאטמט פעולות:
1. נזהה את כל האלמנטים של הדף (שדות טקסט , כפתורים, קישורים…) ונגדיר אותם במחלקה מסויימת, במחלקה זו נוכל גם לממש פונקציות שעושות כמה פעולות – למשל הכנסת טקסט ולחיצה על כפתור – עפ"י הזיהויים שביצענו מקודם (מה שנקרא – Page Objects)

2. נכתוב מנגנון שידע להיות מופעל ברגע כישלון בבדיקה

3. נכתוב עוד מנגנון שידע להחזיר את הדף שלנו לנקודה מסויימת (נגיד הדף הראשי) בשביל ליצור חוסר תלויות בין טסט אחד לשני

4. נכתוב ונממש מערכת ליצירה ודיווח לדוחות (Reporting) של ריצת האוטומציה

5. נדע גם להכניס לדוחות האלו צילומי מסך (וידאו ?) בזמן כשלון

6. נדע לממש את הפרוייקט שלנו כך שאת כל הפרמטרים נקרא מתוך קבצי קונפיגורציה חיצוניים (כמו למשל להיכן אנו נשמור את קובץ ה-report שלנו)

7. נרצה אולי גם לתמוך בטכניקת ה-Visual Testing בה אנחנו נבצע השוואת תמונות (בדיקה שהאתר שלנו נראה כפי שהוא אמור להיראות – ואם למשל שדה החיפוש זז 6 פיקסלים ימינה – הטסט יכשל)

8. נתמוך בכמה דפדפנים שונים להרצה

9. נממש גם כתיבה לקבצי לוג (בניגוד לדוחות – כאן נשמור מידע עבור המפתחים הכולל גם stack trace ופרטים נוספים מה-exceptions שיזרקו לנו במקרה של כשלון הבדיקה)

10. נרצה אולי לממש גם מקום מרכזי אחד בו נזהה את כל המאפיינים של אלמנטים שלנו באפליקציה (מה שנקרא – Object Repository)

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

12. נרצה לממש גם את שיטת ה-Data Driven Testing לקרוא מתוך קבצי CSV / Excel …

13. רצה לממש גם את שיטת ה-Keyword Driven Testing או ה-BDD עם שפת ה-Gherkin

14. נתמוך בהרצה מקבילית של הרצות על סביבות שונות

15. התממשקויות לספריות חיצוניות אחרות (סתם לדוגמא – ניתן לקחת API של שירותי ענן ולהתחבר אליהם – למשל יוטיוב)

16. נתמוך בתיזמוני ריצות ובהתממשקות למערכת CI (ניתן להתקין ג'נקינס לדוגמא על המחשב ולעבוד מולו)

17. נתמוך בפלטפורמות של Mobile Device ולא רק Web

18. אפשר גם להרחיב עוד את התמיכה לפלטפורמות Desktop Apps

19. את כל הבלאגן הזה כמובן נכתוב לפי Design Patterns מוכרים , לפי שיטות של Clean Code , קונבנציות תכנותיות אשר הוגדרו מבעוד מועד בשלב ה-Design ונתעד כל דבר קטן

קורסים דיגיטליים בעתיד האוטומציה

 

על פי הרשימה , ניתן להבחין כי החלק של Selenium הוא שבריר ממה שייכתב בפרויקט אוטומציה הכולל תשתיות הכתובות כהלכה. וכך לפי דעתי ניתן למדוד (בין היתר) פרוייקט אוטומציה איכותי.

כלל האצבע שלי הוא: אם יותר מ-15 אחוז מהקוד שלנו משתמש בספריות של Selenium – זה אומר שלא כתבנו את הפרוייקט שלנו כמו שצריך !

 

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

עכשיו , שימו לב לחץ הזה שנקרא Execution , זהו החץ שמקשר בין פרוייקט האוטומציה שלנו לבין המערכת הנבדקת (Application Under Test) – או במילים אחרות: זה למעשה Selenium ורק זה.

 

 

4 תגובות נוספו

  1. ליאור 03/10/2018 הגב

    שלום יוני,
    נראה שבזכות המאמר הבנתי יותר את משמעות המושג "תשתיות אוטומציה" – והסתבר שהוא די מוכר לי;
    במהלך כמעט 9 השנים בהן עבדתי באוטומציה, השתמשתי למעשה בתשתית קיימת (באמצעות יוזמות פיתוחיות פרי פיתוח שלי ב – #C, דאגתי לכך שתהליכים שגרתיים באוטומציה יתקצרו – חלקם הם בגדר "אוטומציה לאוטומציה". אם הנך מעוניין, אתה מוזמן לשלוח לי הודעה ואשלח לך קישור ללינקדאין המעודכן שלי, שם פירטתי על היוזמות הללו).
    אני מודה לך מאוד על המאמר 🙂
    ליאור.

  2. אלכס 09/07/2020 הגב

    שלום יוני
    האם אפשר לפרט יותר על כל קוביה שבדיאגרמה
    ומה המשמעות היבור בינהם
    רצוי להביא דוגמאות
    תודה

    • היי אלכס, הפוסט הזה מכיל בתוכו *המון* חומר.
      אירגנתי וקיטלגתי אותו כך שהוא יציג ב-High Level את הנושאים.
      זה לא אפשרי להרחיב על הכל בפלטפורמה הזו. בשביל זה קיימים קורסים ברשת להרחבת הדעת

      בהצלחה

  3. Alex 22/04/2021 הגב

    Hi Yoni
    Can you please show an example project for all the boxes that you used
    to understand the connectivity between all the components in project
    Thanks in advance

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