Senior
Mis on Policy Model (PM)?
sobes.tech AI
Vastus AI-lt
Poliitikamudeli (PM) automatiseeritud testimise kontekstis on Page Object Model (POM) laiendus. Põhitegevus on poliitikate või ärireeglite eraldamine, mis on seotud lehekülje elementidega suhtlemisega (ja sellega seotud käitumisega), ning nende eraldamine lehekülje objektidest.
Selle asemel, et otse Page Object'idesse lisada kontrollid ja keeruline loogika, need reeglid eraldatakse eraldi klassidesse või moodulitesse — Policy Objects.
Selle lähenemise eelised:
- Lugemise parandamine: Teststsenaariumid muutuvad lihtsamaks ja arusaadavamaks, kuna need keskenduvad kirjeldatud tegevusele, mitte selle valideerimisele.
- Taaskasutus: Poliitikad võivad olla kasutatavad erinevate Page Object'ide või erinevate teststsenaariumide puhul.
- Vastutuse jagamine: Page Object'id vastutavad ainult lehekülje elementidega suhtlemise eest, samas kui Policy Objects vastutavad reeglite ja valideerimise eest.
- Hoolduse lihtsustamine: Ärisätte muutmine nõuab muutust ainult Policy Object'is, mitte kõigis Page Object'ides, kus see reegel kehtib.
- Parema skaleeritavuse võimalus: Suurema arvu testide ja lehekülgede haldamine on lihtsam arengu käigus.
PM struktuur võiks välja näha järgmiselt:
- Page Object'id: Esindavad üksikuid lehekülgi või UI mooduleid. Nad sisaldavad elementide lokalisaatoreid ja meetodeid nende kasutamiseks (näiteks,
click_button(),enter_text()). Nad ei sisalda kontrolli loogikat. - Policy Object'id: Esindavad ärireegleid või poliitikaid. Nad sisaldavad meetodeid UI oleku kontrollimiseks või tegevuste sooritamiseks, mis põhinevad äriloogikal (näiteks,
is_user_logged_in(),can_submit_form(),perform_checkout()). Nad võivad kasutada ühte või mitut Page Object'i. - Testid: Kasutavad Policy Object'e stsenaariumite täitmiseks, mis hõlmavad kontrollimisi ja äriloogikat.
Näide (pseudokood):
# Page Object
class LoginPage:
def enter_username(self, username):
# suhtlus kasutajanime väljal
pass
def enter_password(self, password):
# suhtlus parooli väljal
pass
def click_login_button(self):
# suhtlus sisselogimisnupuga
pass
# Policy Object
class AuthPolicy:
def __init__(self, driver):
self.login_page = LoginPage(driver)
self.dashboard_page = DashboardPage(driver) # Oletame, et DashboardPage eksisteerib
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()
# Siia või teistesse meetoditesse saab lisada kontrollid
# return self.is_user_logged_in()
def is_user_logged_in(self):
# Kontroll, kas juhtpaneeli elemendid on nähtavad
return self.dashboard_page.is_dashboard_displayed()
# Test
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(), "Kasutaja peaks olema sisse loginud"