Sobes.tech
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(), "Օգտագործողը պետք է մուտք գործի"