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