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

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

פורסם:

מבוא

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

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

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

מימוש הפתרון

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

@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

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

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

פרמטרים:

ערך מוחזר:

פעולות מפתח:

  1. מקסום חלון הדפדפן: הוסבר במאמר קודם
  2. טיפול מותנה בcookies:
    • בודק אם לאובייקט יש תכונה (מה שמצביע על פרמטריזציה של בדיקה).
    • אם קיים, בונה מבנה פנימי להגדרת עוגייה: שם העוגייה: ערך העוגייה: (ערך הפרמטר מהבדיקה) דומיין העוגייה: (כתובת ה-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("")

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

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

פרמטרים:

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

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

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

שימוש בבדיקה

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

@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"

Decorator הבדיקה:

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

לסיכום

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

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


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

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


הפוסט הקודם
אוטומציית בדיקות - מקסום חלון הדפדפן עם Playwright Python ו-Pytest
הפוסט הבא
אוטומציית בדיקות - כיצד לבצע בדיקות נגישות אוטומטיות באמצעות Playwright Python ו-Axe