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"