דלג לתוכן
חזור

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

פורסם:

הקדמה

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

שפת תכנות: Java

כלי בנייה: Maven

סביבת בדיקות: TestNG

סביבת דיווח: Allure

הבעיה

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

הבעיה הראשונה נפתרת על ידי Allure, המספקת אנוטציה בשם Issues עבור מספר פגמים ואנוטציה בשם Issue לסימון פגם בודד.

זהו מימוש הקוד של מתודת בדיקה המכילה בעיות:

@Issues({
    @Issue("AUTO-50"),
    @Issue("AUTO-60")
})
@Test(description = "Response time assertion")
public void responseTimeAssertion() {
    // some test code
}

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

הפתרון – דילוג על מקרי בדיקה בהתבסס על אנוטציית ה-Issues

מהי רפלקציה (reflection)

לפי אורקל:

רפלקציה היא תכונה בשפת התכנות Java. היא מאפשרת לתוכנית Java רצה לבחון או “להתבונן פנימה” על עצמה, ולתפעל מאפיינים פנימיים של התוכנית. לדוגמה, אפשרי עבור מחלקת Java לקבל את שמות כל חבריה ולהציגם.

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

מימוש הפתרון

מימשנו test listener שבודק לפני כל בדיקה את התנאים הבאים:

במקרה שחלק / כל התנאים הללו אינם מתקיימים:

אנו מריצים את מתודת הבדיקה כרגיל.

במקרה שכל התנאים מתקיימים:

  1. אנו יוצרים רשימת מערך (array list) חדשה המכילה את ערכי הבעיות.
  2. אנו זורקים חריגת דילוג של TestNG (TestNG skip exception) הגורמת לדילוג על מתודת הבדיקה, ומציינים את ערכי הבעיות מתוך רשימת הבעיות למפתח האוטומציה שמריץ את הבדיקות הללו.

זהו מימוש הקוד של מחלקת ה-test listener:

public class ListenerClass extends TestListenerAdapter {

    @Override
    public void onTestStart(ITestResult result) {
        Method method = result.getMethod().getConstructorOrMethod().getMethod();
        if (method != null && method.isAnnotationPresent(Issues.class) &&
            !Arrays.asList(method.getAnnotation(Issues.class).value()).isEmpty()) {
            ArrayList<String> issues = new ArrayList<>();
            Arrays.asList(method.getAnnotation(Issues.class).value()).forEach(issue ->
                issues.add(issue.value()));
            throw new SkipException(
                String.format("Open Issues %s Skipping this test", issues));
        }
    }
}

תוצאת הריצה בדוח שנוצר היא:

allure report

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

לסיכום

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

בדיקות מהנות!


הציעו שינויים

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


הפוסט הקודם
אוטומציית בדיקות - כיצד להוסיף נתוני בקרת גרסאות Git לדוח Allure ב-Java
הפוסט הבא
אוטומציית בדיקות - הסתרת סודות באמצעות משתני סביבה מערכתיים