Senior
Ի՞նչ է Policy Model (PM)-ը։
sobes.tech AI
Պատասխան AI-ից
Անվտանգության մոդելը (PM) ավտոմատացված թեստավորման համատեքստում ընդլայնում է Page Object Model (POM)-ը: Հիմնական գաղափարը այն է, որ քաղաքականությունները կամ բիզնես կանոնները, որոնք կապված են էջի տարրերի հետ փոխազդեցության և դրանց հետ կապված վարքագծի հետ, առանձնացվեն էջերի օբյեկտներից:
Նույնիսկ, երբ ստուգումները և բարդ տրամաբանությունը ներառվում են Page Objects-ների մեջ, այդ կանոնները առանձնացվում են առանձին դասարանների կամ մոդուլների մեջ՝ Policy Objects:
Այս մոտեցման առավելությունները՝
- Կարդալության բարելավում: Թեստային սցենարները դառնում են պարզ և հեշտ հասկանալ, քանի որ կենտրոնացած են գործողության նկարագրության վրա, ոչ թե դրա վավերացման վրա:
- Կրկնվող օգտագործում: Քաղաքականությունները կարող են օգտագործվել տարբեր Page Objects-ների կամ տարբեր թեստային սցենարների համար:
- Պատասխանատվության բաժանում: Page Objects-ները պատասխանատու են միայն էջի տարրերի հետ փոխազդեցության համար, իսկ Policy Objects-ները՝ կանոնների և վավերացման համար:
- Անհատականացման հեշտացում: Բիզնես կանոնի փոփոխությունը պահանջում է միայն Policy Object-ի փոփոխություն, ոչ թե բոլոր Page Objects-ների:
- Բարձրացրած ընդլայնելիություն: Հեշտ է կառավարել մեծ քանակությամբ թեստեր և էջեր՝ հավելվածի զարգացման ընթացքում:
PM-ի կառուցվածքը կարող է լինել հետևյալը՝
- Page Objects: Ներկայացնում են առանձին էջեր կամ UI մոդուլներ: Ունեն տարրերի локատորներ և մեթոդներ նրանց հետ փոխազդեցության համար (օրինակ,
click_button(),enter_text())։ Չեն պարունակում ստուգումների տրամաբանություն: - Policy Objects: Ներկայացնում են բիզնես կանոններ կամ քաղաքականություններ: Ունեն մեթոդներ UI-ի վիճակի ստուգման կամ գործողությունների կատարելու համար՝ հիմնված բիզնես տրամաբանության վրա (օրինակ,
is_user_logged_in(),can_submit_form(),perform_checkout())։ Կարող են օգտագործել մեկ կամ մի քանի Page Objects: - Թեստեր: Օգտագործում են Policy Objects՝ սցենարների իրականացման համար, որոնք ներառում են ստուգումներ և բիզնես տրամաբանություն:
Նմուշ (պսևդոկոդ):
# Page Object
class LoginPage:
def enter_username(self, username):
# փոխազդեցություն օգտվողի անունի դաշտի հետ
pass
def enter_password(self, password):
# փոխազդեցություն գաղտնաբառի դաշտի հետ
pass
def click_login_button(self):
# փոխազդեցություն մուտք գործելու կոճակի հետ
pass
# Policy Object
class AuthPolicy:
def __init__(self, driver):
self.login_page = LoginPage(driver)
self.dashboard_page = DashboardPage(driver) # Կան, որ DashboardPage-ը գոյություն ունի
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()
# Կարող եք ավելացնել ստուգումներ այստեղ կամ առանձին մեթոդներում
# return self.is_user_logged_in()
def is_user_logged_in(self):
# Ստուգում, արդյոք ցուցադրված են տաբլոյի տարրերը
return self.dashboard_page.is_dashboard_displayed()
# Թեստ
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(), "Օգտագործողը պետք է մուտք գործի"