Step 1 ~ 6 까지 정말로 먼길을 달려왔다.

실은 .... 정리하는 것 그 자체가 힘들고, 아직도 필자가 Python 이 많이 부족하기에 항상 공부를 해야한다.

( 그러한 점에 의해서 조금 부족한 지식은 이해를 부탁드린다.)*

pytest의 conftest.py의 쓰임과 fixture의 쓰임을 알게되면, 좀 더 쉽게 UI Test파일을 만들 수 있고, 점차 다양하게 확장을 할 수 있을 것이다.

전체적인 구조를 설명하기 전에 Framework와 그리고 POM Pattern에 대해서 간략하게 설명하겠다.

Framework란?

말 그래도 짜여진 틀을 가지고 다양한 형태의 결과물을 만드는 것을 "프레임워크"라고 합니다.

pytest 라는 것은 말그대로 python이라는 틀을 가지고 test 결과물을 만드는 프레임 워크의 일종인 것입니다.

그럼 이전 코드를 보면 다음과 같이 설명을 할 수 있다.

import pytest
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait

# python이라는 틀로 driver_init라는 함수를 만들어라 그리고 이것은 자주쓰는 함수로 pytest.fixture라는 도구로 정의하자.
@pytest.fixture()
def driver_init(request):
    print("driver init")
    # request 변수는 테스트 세션을 가르킴
    web_driver = webdriver.Chrome(ChromeDriverManager().install())
    request.cls.driver = web_driver
    web_driver.get("<https://www.naver.com>")
    yield web_driver
    web_driver.close()

# 앞써 만들어진 driver_init의 도구로 test_naver_login이라는 테스트 결과물을 만들자
@pytest.mark.usefixtures("driver_init")
class TestBooking():

    def test_naver_login(self):
        # classname으로 element로 찾기
        login_btn = self.driver.find_element_by_class_name("link_login")
        login_btn.click()
	

이것이 바로 Framework라는 것이다. 여기서 발전한 방식으로는 Data-Driven, behavior-Data-Driven, keyword-Driven, Hybrid-Data-Driven 라는 것들은 하나의 방식이다.

필자는 여기서 Data-Driven 방식을사용할 것이다.

(* hybrid, keyword, behavior 방식을 보았을 때 Data-driven이 가장 기본이기에 이것만 잘 알아두면 나머지는 금방 이해할 수 있다.)

POM이란?

Page of model로서 Selenium 특성 상 모든 엘리먼트를 직접 호출을 해야하고, 그리고 각 엘리먼트에 대해서 설명이 없으면, 찾기도 어렵고, 그리고 구조적인 특성 상 엘리먼트나 항목들이 변경되다면 수정작업이 매우 힘듭니다.