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

אוטומציית בדיקות - כיצד לעקוף התחברות מחדש עם Playwright Python ו-Pytest

פורסם:

מבוא

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

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

הפתרון המוצג במאמר זה מודגם בפיקסטורות של Pytest המשולבות בפרויקט הדוגמה שלי Playwright Python example project, שפותח בשיתוף עם אליאס שורוש. פיקסטורות אלו לא רק מציגות את פרטי המימוש, אלא גם משמשות כהתייחסות מעשית לשילוב אימות מתמשך בתהליכי הבדיקה שלכם, ומעצימות אתכם למקסם את פרודוקטיביות הבדיקות שלכם.

יישום הפתרון

ניתן למצוא את קוד הפתרון כאן.

@pytest.fixture(scope="function")
def browser_context_args(
    browser_context_args: Dict, base_url: str, request: SubRequest
):
    """This fixture allows setting browser context arguments for Playwright.

    Args:
        browser_context_args (dict): Base browser context arguments.
        request (SubRequest): Pytest request object to get the 'browser_context_args' fixture value.
        base_url (str): The base URL for the application under test.

    Returns:
        dict: Updated browser context arguments.

    See Also:
        https://playwright.dev/python/docs/api/class-browser#browser-new-context
    """
    context_args = {
        **browser_context_args,
        "no_viewport": True,
        "user_agent": Constants.AUTOMATION_USER_AGENT,
    }

    if hasattr(request, "param"):
        context_args["storage_state"] = {
            "cookies": [
                {
                    "name": "session-username",
                    "value": request.param,
                    "url": base_url,
                }
            ]
        }
    return context_args

פיקסטורה זו של Pytest נועדה להגדיר את הארגומנטים עבור קונטקסט דפדפן של Playwright. בואו נפרק את הקוד:

@pytest.fixture(scope=“function”):

פרמטרים:

ערך מוחזר:

פעולות מפתח:

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

נקודות עיקריות:

@pytest.fixture(scope="function", autouse=True)
def goto(page: Page, request: SubRequest):
    """Fixture to navigate to the base URL based on the user.

    If the 'storage_state' is set in 'browser_context_args', it navigates to the inventory page,
    otherwise, it navigates to the login page.

    Args:
        page (Page): Playwright page object.
        request (SubRequest): Pytest request object to get the 'browser_context_args' fixture value.
            If 'browser_context_args' is set to a user parameter (e.g., 'standard_user'),
            the navigation is determined based on the user.

    Example:
        @pytest.mark.parametrize('browser_context_args', ["standard_user"], indirect=True)
    """
    if request.getfixturevalue("browser_context_args").get("storage_state"):
        page.goto("/inventory.html")
    else:
        page.goto("")

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

@pytest.fixture(scope=“function”, autouse=True):

פרמטרים:

לוגיקת ניווט:

  1. בחירת URL מותנית: כדי לבדוק אם הפיקסטורה מכילה מפתח. מציין משתמש מחובר.
  2. ניווט מבוסס קונטקסט משתמש:
    • אם קיים (משתמש מחובר): מנווט את הדף אל , בהנחה שזהו דף המלאי עבור משתמשים מחוברים.
    • אחרת (אין , משתמש חדש): מנווט לדף ההתחברות.

נקודות עיקריות:

שימוש בבדיקה

ניתן למצוא את השימוש בבדיקה כאן.

@pytest.mark.parametrize("browser_context_args", ["standard_user"], indirect=True)
def test_inventory_page(self, browser_context_args, page: Page):
    assert page.inner_text("//span[@class='title']") == "Products"

דקורטור הבדיקה:

פרמטרים של פונקציית הבדיקה:

לסיכום

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

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


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

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


הפוסט הקודם
אוטומציית בדיקות - כיצד לערוך עוגיות ב-Selenium Python
הפוסט הבא
אוטומציית בדיקות - בחירת אלמנטים יעילה עם Playwright Python באמצעות מזהי בדיקה