Senior
რა არის Policy Model (PM)?
sobes.tech AI
პასუხი AI-სგან
პოლიტიკის მოდელი (PM) ავტომატიზებული ტესტირების კონტექსტში არის Page Object Model (POM)-ის გაფართოება. ძირითადი იდეა არის პოლიტიკების ან ბიზნეს-წესების გამიჯვნა გვერდის ელემენტებთან ურთიერთობისა და ამ პოლიტიკებთან დაკავშირებული ქცევებისგან, რომლებიც თავად გვერდის ობიექტებიდან არის გამიჯნული.
გადახედვის და რთული ლოგიკის პირდაპირი ჩართვის ნაცვლად, ეს წესები გამოყოფილია ცალკეულ კლასებად ან მოდულებად — Policy Objects.
ამ მიდგომის უპირატესობები:
- საკითხის უკეთ წაკითხვა: ტესტის სცენარები უფრო მარტივი და გასაგებია, რადგან ისინი ფოკუსირებულია აღწერილ მოქმედებაზე, არა მისი ვალიდაციაზე.
- გადავრცელება: პოლიტიკები შეიძლება გამოყენებულ იქნას სხვადასხვა Page ობიექტებისთვის ან სხვადასხვა ტესტის სცენარებისთვის.
- პასუხისმგებლობის განაწილება: Page ობიექტები პასუხისმგებელნი არიან მხოლოდ გვერდის ელემენტებთან ურთიერთობაზე, ხოლო Policy ობიექტები — წესებსა და ვალიდაციაზე.
- მოწყობის გამარტივება: ბიზნეს-წესის ცვლილება მოითხოვს ცვლილებას მხოლოდ Policy ობიექტში, არა ყველა Page ობიექტში, სადაც ეს წესია გამოყენებული.
- მოდულარობა და მასშტაბურობა: ადვილია მართვა დიდი რაოდენობის ტესტებისა და გვერდების, პროგრამის განვითარებასთან ერთად.
PM-ის სტრუქტურა შეიძლება იყოს ასე:
- Page ობიექტები: წარმოადგენს ცალკეულ გვერდებს ან UI მოდულებს. შეიცავს ელემენტების локატორებს და მეთოდებს მათთან ურთიერთობისთვის (მაგ.,
click_button(),enter_text()). არ შეიცავს ვალიდაციის ლოგიკას. - Policy ობიექტები: წარმოადგენს ბიზნეს-წესებს ან პოლიტიკებს. შეიცავს მეთოდებს UI-ის მდგომარეობის შემოწმებისა და მოქმედებების შესრულებისთვის, რომლებიც ეფუძნება ბიზნეს ლოგიკას (მაგ.,
is_user_logged_in(),can_submit_form(),perform_checkout()). შეიძლება გამოიყენოს ერთი ან რამდენიმე Page ობიექტი. - ტესტები: იყენებენ Policy ობიექტებს სცენარების შესრულებისთვის, რომლებიც მოიცავს შემოწმებებს და ბიზნეს ლოგიკას.
მაგალითი (პსევდოკოდი):
# Page ობიექტი
class LoginPage:
def enter_username(self, username):
# ურთიერთობა მომხმარებლის სახელის ველისთან
pass
def enter_password(self, password):
# ურთიერთობა პაროლის ველისთან
pass
def click_login_button(self):
# ურთიერთობა შესვლის ღილაკთან
pass
# Policy ობიექტი
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(), "მომხმარებელი უნდა იყოს შესული"