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 Object колдонушу мүмкүн.
  • Тесттер: 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(), "Колдонуучу логинден өтүшү керек"