בפוסט הקודם, של אוטומציה עם מייבן, הסברנו על המושג: "בניית תוכנה" ועל הכלים שמאפשרים לנו לבנות תוכנה, אחד מהם הוא ה-מייבן (Maven). ראינו כי עם המייבן נוכל ליצור תלויות, ראינו דוגמא של מחזור חיים של מייבן וכן יצירת פרוייקט לדוגמא.
בפוסט המשך זה, אכוון יותר לעבודה עם מייבן בתחום הבדיקות האוטומטיות ואיך כלי כזה יכול לשרת אותנו בבואנו להטמיע פרוייקט אוטומציה.
בואו קודם כל נראה דוגמא של קוד (מחלקות) בפרוייקט מייבן, נכתוב פונקציונליות בסיסית ונבדוק אותה בצורה בסיסית גם כן כבדיקת יחידה. הדוגמא תתבסס על מחלקה שתיקרא CalculatorApp ותכיל 2 מתודות:
- האחת תחזיר את התוצאה של פעולת חיבור בין 2 מספרים
- השנייה תחזיר את התוצאה של פעולת חיסור בין 2 מספרים
כך תיראה המחלקה (צירפתי גם צילום מסך של המחלקה תחת ה-Package Explorer של הפרוייקט):
שימו לב כי מיקום המחלקה במייבן יהיה תחת: src/main/java שכן זהו חלק מהמוצר
מחלקת הבדיקות אמורה להכיל את הבדיקות שארצה לבצע על הפונקציות שכתבתי (ה-add וה-sub) , למשל ארצה לבדוק כי הערך המחוזר של הפרמטרים 3,2 שאשלח לפונקצית ה-add יהיה 5 (3+2=5) וכן אבדוק באותו האופן את פונקציית ה-sub, שימו לב כי הבדיקה אמורה להיכשל שכן בצילום המסך המופיע למטה התוצאה הצפוייה הינה: 2 (וכאמור 3-2=1)
מחלקת הבדיקות תיראה כך (צירפתי גם צילום מסך של המחלקה תחת ה-Package Explorer של הפרוייקט):
* אין באמת צורך לבצע את ההדפסה ל-Console , זה רק למטרות Debug…
פרוייקט אוטומציה עם Dependencies:
בפוסט הקודם הסברנו כי קיימת מערכת ניהול תלויות במייבן וכי שם אנחנו מנהלים את את ספריות הקוד החיצוניות של הפרוייקט, בואו נראה כיצד עובדים עם מערכת זו בפרוייקט אוטומציה, אז כאמור, את המערכת הזו אנו מנהלים בקובץ שנקרא: POM.xml (שהוא XML לכל דבר), במידה ונרצה להוסיף את ספריות הקוד של TestNG למשל לפרוייקט המייבן שלנו, נוסיף Dependency ל-POX.xml , קודם כל נחפש את העץ המתאים לכך ב-XML שלנו , זאת ניתן בקלות לראות באתר הריפוזיטורי של מייבן: https://mvnrepository.com
וכך נצרף אותו ל-POM.xml (ע"י copy-paste פשוט):
על ה-GroupID, ArtifactID ו-Version דיברנו בפוסט הקודם
נמשיך באותו אופן כשנרצה לשייך לספריות של פרוייקטים שונים, כמו סלניום , אפיום, REST וכו'…
פרוייקט אוטומציה עם Plugins של מייבן:
בפוסט הקודם דיברנו על כך שה-Plugins במייבן, הם אלו שבפועל מבצעים את הפעולות שאנו מעוניינים, במקרה שלנו באוטומציה, אנו נרצה לעבוד עם Plugins שמריצים לנו את הבדיקות, ישנם שני Plugins עיקריים שאנו עובדים עימם:
- Maven Surefire Plugin שנועד להרצה של בדיקות יחידה (Unit Testing) , ירוץ בשלב ה-test
- Maven Failsafe Plugin שנועד להרצה של בדיקות אינטגרציה, ירוץ בשלבי ה-integration-test וה-verify
ההבדל המרכזי בין שני ה-Plugins הללו מתבטא בזמן כישלון של מקרה בדיקה, כאשר הראשון יעצור את ה-Build בשלב ה-integration-test ואילו השני לא יעצור את ה-Build על כן יתאפשר לנו במקרה זה להריץ את השלב הבא: post-integration-test
דוגמא לעבודה עם Maven Surefire Plugin דרך TestNG (תוך קריאה להרצה מתוך testng.xml):
שליחת פרמטרים במייבן:
אחד מהדברים המתבקשים לכל שכבה שיושבת מעל בדיקות אוטומטיות הוא היכולת לשלוח אליהם פרמטרים ובכך להגמיש את הפרוייקט שלנו, במידה ונרצה להריץ את סט הבדיקות שלנו כמה פעמים כשבכל פעם על סביבה אחרת, למשל בפעם הראשונה על דפדפן הכרום, בפעם אחרת על דפדן הספארי וכו'…
אמנם צילום המסך הבא מראה דוגמא עם Maven Surefire Plugin , אך שני ה-Plugins הנזכרים למעלה תומכים בשליחת פרמטרים:
הרצה סלקטיבית של קבוצות:
בשני הפלגינים ניתן להריץ קבוצות מסויימות של טסטים, את הקבוצות הללו אנו נגדיר ברמת הטסטים בתוך אנוטציות ה- Test@ , כמו שניתן לעשות זאת דרך ה-Suite.xml של הפריימוורק, כך גם ניתן לעשות זאת רמה אחת מעל בפלאגין של מייבן , בדוגמא הבאה אני מגדיר להריץ את כל הטסטים שהוגדרו כ-Sanity ואת כל הטסטים שהוגדרו כ-FeatureA :
הרצת טסטים באופן מקבילי עם מייבן:
מייבן תומך בהרצת הטסטים שלנו באופן מקבילי, נשתמש באופציה זו בכדיי לחסוך בזמן ולבצע כיסוי מהיר יותר של הבדיקות, תחשבו על זה שקיימים לכם בריגרסיה 800 טסטים ואת ה-800 הללו תצטרכו להריץ על דפדפן הכרום, הפיירפוקס, הספרי והאינטרנט אקספלורר, במקום להריצם אחד אחרי השני, נוכל להריץ במקביל (בעדיפות על מכונות מרוחקות) עם הפלאגינים של מייבן:
מייבן ופרופילים:
במייבן אנו יכולים ליצור ולעבוד עם פרופילים.
פרופיל במייבן יתן לנו ליצור שכבה נוספת של בהירארכיה של הפרוייקט, שכבה מעל ה-Suite.xml ומתחת לג'וב שניצור אח"כ בכלי ה-CI שממנו נבצע את ההרצה בשופו של דבר. תחת הפרופיל נדע גם להגדיר את הסוויטות שנרצה להריץ למשל כך:
בדוגמא הנ"ל יצרנו 2 פרופילים – אותם שייכנו לחבילות ייעודיות (הראשון ל-Sanity.xml והשני ל-Regression.xml), כאשר ב-Jenkins למשל אח"כ נוכל להריץ Item מסויים שמשוייך לפרופיל מסויים
ישנם עוד דברים רבים שניתן לבצע עם מייבן, בפוסט זה הצגתי את הדברים העיקריים שאנו עובדים איתם באוטומציה. בסופו של דבר עבודה על כלי לבניית תוכנה בכלל ומייבן בפרט מאוד מאוד מומלצת לכל מי שחושב להשקיע ולהטמיע פרוייקט אוטומציה אצלו באירגון (כשעובדים ב-Java).