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