אוטומציה זה אחלה, אבל מה עם לוגים?



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

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

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

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

במילים אחרות - כתיבה ללוג משלנו תקל עלינו מאוד בתחקור התרחיש או המערכת הנבדקת.

אבל קודם כל...

מה זה לוג?

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

את הלוג אפשר לכתוב לתוך ה-Console, לקובץ, ל-event viewer, לבסיס נתונים, בעצם לכל מקום שרק רוצים ושיהיה נוח למשתמש הקצה לקרוא ממנו.

לוגים ב C# באמצעות log4net

ישנם 3 שלבים פשוטים לשימוש ב log4net, הקונפיגורציה - בדרך כלל תעשה ב app.config/web.config או בקובץ קונפיגורציה נפרד, שם נכניס את כל ההוראות ללוג, על צורת הכתיבה שלו (מיד תבוא דוגמה), הסט-אפ - שורת יצירת הלוג, והשימוש עצמו - קריאה לאובייקט הלוג שיצרנו על מנת לכתוב ללוג.

הרמות השונות בלוג

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

הרמות הן:

1. Fatal
2. Error
3. Warn
4. Info
5. Debug

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

דוגמה בקוד

כעת נכסה את שלושת השלבים עליהם דיברנו למעלה וניצור דוגמה של כתיבה ללוג בפחות מ5 דקות!
הדוגמה תהיה על שימוש בלוג באמצעות כתיבה לקובץ.

הקונפיגורציה

נכתוב לתוך קובץ הקונפיגורציה שלנו את הפרטים הבאים: (אני ממליץ ליצור קובץ קונפיגורציה נפרד בשם log4net.config)


ניתן לראות בין הפרטים את הפרמטרים הניתנים לקונפיגורציה, כמו, שם הקובץ, רמות הלוג המקסימלית אותה ניתן לכתוב, גודל מקסימלי של קובץ הלוג, סדר הופעת הפרטים בלוג (תאריך, שעה, רמת לוג, פעולה...) וכו'..

Setup

ב Scope בו נרצה שמערכת שלנו תכיר את הLogger, נקרא לשורה הבאה על מנת להשתמש בו:

private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

כעת יצרנו Logger לפי הקונפיגרציה ועכשיו אפשר לעבור לחלק הקל והכיף ביותר.

השימוש

כמתבקש, אני חוזר ל Test שנכתב במדריך הקודם על Appium (ה-Test כבר מניח שה-Setup של המכשיר, ה-PageObject וה-Logger הוקמו).


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

כעת נריץ את ה-Test ונוכל לפתוח את תיקיית ההרצה (לרוב /bin/debug), ולראות הלוג שנוצר לנו.

הרצת ה-Test

פתיחת תיקיית ההרצה

פתיחת קובץ הלוג שנוצר

צפייה בקובץ הלוג

סיכום

בפוסט של היום עשינו צעד נוסף אל עבר תשתית אוטומציה טובה יותר, הכרנו את ה-Logger.

הבנו למה וכמה חשוב לכתוב לוגים לתרחישי הבדיקות שלנו, דיברנו על הרמות השונות של לוגים, ולבסוף ראינו מדריך פרקטי שמדבר על יצירת לוג באמצעות השימוש בספריית log4net ב-C#.

נתראה בפוסט הבא :)


תגובות

  1. בjava זה אותו דבר?

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

      מחק

הוסף רשומת תגובה

פוסטים פופולריים מהבלוג הזה

מהם קבצי DLL ואיך להשתמש בהם?

מדריך C# | שימוש ב LINQ

תכנות מונחה עצמים | Dependency Inversion Principle