Sobes.tech
Senior

Mi az a Policy Model (PM)?

sobes.tech MI

Válasz az MI-től

Politikai Modell (PM) az automatizált tesztelés kontextusában a Page Object Model (POM) kiterjesztése. A fő ötlet az, hogy elkülönítjük a politikákat vagy üzleti szabályokat, amelyek a oldal elemeivel való interakciókat (és ezekhez kapcsolódó viselkedést) irányítják, maguktól az oldal objektumoktól.

Ahelyett, hogy ellenőrzéseket és összetett logikát közvetlenül a Page Object-ekbe építenénk, ezeket a szabályokat külön osztályokba vagy modulokba helyezzük — Policy Object-ekbe.

Az ilyen megközelítés előnyei:

  • Javított olvashatóság: A tesztesetek egyszerűbbek és könnyebben érthetőek, mivel a végrehajtott műveletre összpontosítanak, nem pedig annak validálására.
  • Újrahasznosíthatóság: A politikák különböző Page Object-ekhez vagy különböző tesztesetekhez is felhasználhatók.
  • Felelősség megosztása: A Page Object-ek csak az oldal elemeivel való interakcióért felelősek, míg a Policy Object-ek a szabályokért és a validációért.
  • Karbantartás egyszerűsítése: Egy üzleti szabály módosítása csak a Policy Object-et érinti, nem pedig az összes Page Object-et, ahol ez a szabály alkalmazva van.
  • Jobb skálázhatóság: Könnyebb kezelni a nagyobb számú tesztet és oldalt az alkalmazás fejlődésével.

A PM szerkezete így nézhet ki:

  • Page Object-ek: Külön oldalakat vagy UI modulokat képviselnek. Tartalmazzák az elemek lokátorait és az azokkal való interakciós módszereket (pl. click_button(), enter_text()). Nem tartalmaznak ellenőrző logikát.
  • Policy Object-ek: Üzleti szabályokat vagy politikákat képviselnek. Tartalmazzák a UI állapotának ellenőrzésére vagy műveletek végrehajtására szolgáló módszereket, amelyek az üzleti logikán alapulnak (pl. is_user_logged_in(), can_submit_form(), perform_checkout()). Egy vagy több Page Object-et is használhatnak.
  • Tesztek: Policy Object-eket használnak a szcenáriók végrehajtásához, amelyek magukban foglalják az ellenőrzéseket és az üzleti logikát.

Példa (pseudokód):

# Page Object
class LoginPage:
    def enter_username(self, username):
        # interakció a felhasználónév mezővel
        pass

    def enter_password(self, password):
        # interakció a jelszó mezővel
        pass

    def click_login_button(self):
        # interakció a bejelentkezés gombbal
        pass

# Policy Object
class AuthPolicy:
    def __init__(self, driver):
        self.login_page = LoginPage(driver)
        self.dashboard_page = DashboardPage(driver) # Feltételezve, hogy a DashboardPage létezik

    def login_as_user(self, username, password):
        self.login_page.enter_username(username)
        self.login_page.enter_password(password)
        self.login_page.click_login_button()
        # Itt vagy külön módszerekben ellenőrizhetjük
        # return self.is_user_logged_in()

    def is_user_logged_in(self):
        # Ellenőrzi, hogy a dashboard elemek láthatóak-e
        return self.dashboard_page.is_dashboard_displayed()

# Teszt
class LoginTest:
    def test_successful_login(self, driver):
        auth_policy = AuthPolicy(driver)
        auth_policy.login_as_user("test_user", "password123")
        assert auth_policy.is_user_logged_in(), "A felhasználónak be kellene jelentkeznie"