Sobes.tech
Senior

Kas ir Policy Model (PM)?

sobes.tech AI

Atbilde no AI

Politikas modeļa (PM) automatizētās testēšanas kontekstā ir Page Object Model (POM) paplašinājums. Galvenā ideja ir atdalīt politikas vai biznesa noteikumus, kas saistīti ar lapas elementu mijiedarbību (un ar šo politiku saistīto uzvedību), no pašu lapas objektiem.

Tā vietā, lai tieši iekļautu pārbaudes un sarežģītu loģiku Page Objectos, šie noteikumi tiek izdalīti atsevišķās klasēs vai moduļos — Policy Objects.

Šāda pieeja sniedz šādus ieguvumus:

  • Labāka lasāmība: Testa scenāriji kļūst vienkāršāki un vieglāk saprotami, jo tie koncentrējas uz aprakstīto darbību, nevis uz tās validāciju.
  • Atkārtota izmantošana: Politikas var tikt izmantotas dažādiem Page Objectiem vai dažādos testu scenārijos.
  • Atbildības sadalījums: Page Objecti ir atbildīgi tikai par mijiedarbību ar lapas elementiem, bet Policy Objects — par noteikumiem un validāciju.
  • Uzturēšanas vienkāršošana: Izmaiņas biznesa noteikumā prasa izmaiņas tikai Policy Object, nevis visos Page Objectos, kuros šis noteikums tiek piemērots.
  • Labāka mērogojamība: Ir vieglāk pārvaldīt lielu skaitu testu un lapu, attīstoties lietotnei.

PM struktūra varētu izskatīties šādi:

  • Page Objecti: Attēlo atsevišķas lapas vai UI moduļus. Satur elementu lokalizatorus un metodes to ar tiem mijiedarboties (piem., click_button(), enter_text()). Nav iekļauta pārbaudes loģika.
  • Policy Objecti: Attēlo biznesa noteikumus vai politikas. Satur metodes UI stāvokļa pārbaudei vai darbību veikšanai, balstoties uz biznesa loģiku (piem., is_user_logged_in(), can_submit_form(), perform_checkout()). Var izmantot vienu vai vairākus Page Objectus.
  • Testi: Izmanto Policy Objectus scenāriju īstenošanai, kas ietver pārbaudes un biznesa loģiku.

Piemērs (pseidonods):

# Page Object
class LoginPage:
    def enter_username(self, username):
        # mijiedarbība ar lietotāja vārda lauku
        pass

    def enter_password(self, password):
        # mijiedarbība ar paroles lauku
        pass

    def click_login_button(self):
        # mijiedarbība ar pieslēgšanās pogu
        pass

# Policy Object
class AuthPolicy:
    def __init__(self, driver):
        self.login_page = LoginPage(driver)
        self.dashboard_page = DashboardPage(driver) # Pieņem, ka DashboardPage pastāv

    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()
        # Šeit vai citur var pievienot pārbaudes
        # return self.is_user_logged_in()

    def is_user_logged_in(self):
        # Pārbaude, vai ir redzami dashboard elementi
        return self.dashboard_page.is_dashboard_displayed()

# Tests
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(), "Lietotājs ir jābūt pieslēgtam"