Sobes.tech
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(), "მომხმარებელი უნდა იყოს შესული"