Selenium 이란?

소만이·2024년 4월 12일
post-thumbnail

Selenium

-웹 애플리케이션 테스트 자동화를 위해 개발된 오픈 소스 도구다. 웹 브라우저를 자동으로 제어하고 테스트 스크립트를 실행하여 웹 애플리케이션의 다양한 기능을 테스트할 있도록 해준다.
Python, Java, C# 등의 언어를 지원하고 브라우저는 Chrome, Firefox, Safari 등을 지원한다.

Selenium WebDriver:
웹 브라우저를 제어하고 테스트 스크립트를 실행하는 역할을 한다. 각 브라우저에 대한 특정 드라이버(예: chromedriver 또는 geckodriver)를 사용하여 브라우저를 제어한다.
WebDriver를 사용하면 웹 페이지에 대한 작업(클릭, 입력, 스크롤 등)을 자동화할 수 있다.

pytest 로 Selenium WebDriver 를 이용해 테스트를 해보려고 한다.

일단 Selenium 모듈을 설치해야하는데

pip3 install selenium

으로 설치했다.

여러 테스트 함수에서 같은 driver를 사용해야하기 때문에 conftest.py 라는 파일에 @pytest.fixture 데코레이터를 사용해 작성하려고 한다.

@pytest.fixture(scope="session")
def browser():
    chrome_options = webdriver.ChromeOptions()
    chrome_options.add_argument("--no-sandbox")
    chrome_options.add_argument("--disable-dev-shm-usage")
    chrome_options.add_argument("--disable-extensions")
    chrome_options.add_argument("--disable-gpu")
    chrome_options.add_argument("--start-maximized")
    driver = webdriver.Chrome(options=chrome_options)
    yield driver
    driver.quit()

session scope 로 설정한 이유는 해당 테스트 실행 세션 전체에 걸쳐 해당 드라이버를 유지해야하기 때문이다. session scope는 해당 테스트 실행 세션 전체에 걸쳐 fixture가 단 한 번만 생성되어 재사용을 할 수 있다.

chrome_options = webdriver.ChromeOptions()는 webdriver.ChromeOptions()를 사용하여 Chrome 브라우저의 옵션을 설정하는 객체를 생성한다.
이어서 chrome_options.add_argument(...)를 사용하여 여러 브라우저 옵션을 추가한다:
"--no-sandbox": 보안 샌드박스 기능을 비활성화. (테스트 환경에서 사용합니다.)
"--disable-dev-shm-usage": 개발자 공유 메모리 사용을 비활성화.
"--disable-extensions": 브라우저 확장 기능을 비활성화.
"--disable-gpu": GPU 가속을 비활성화.
"--start-maximized": 브라우저를 최대화된 상태로 시작.

웹 브라우저 인스턴스 생성:
driver = webdriver.Chrome(options=chrome_options)는 위에서 설정한 옵션을 사용하여 Chrome 브라우저 인스턴스를 생성

yield driver:
이 fixture는 yield를 사용하여 생성된 driver 객체를 반환한다. 이 반환된 driver 객체는 browser fixture를 사용하는 테스트 함수에서 사용 가능하다.

브라우저 종료:
yield 이후의 코드는 browser fixture가 더 이상 사용되지 않게 되었을 때 실행된다. 즉, 모든 테스트가 완료된 후에 실행된다.
driver.quit()는 브라우저를 종료하는 코드 -> 이 부분에서 브라우저 인스턴스가 정리된다.
이렇게 @pytest.fixture(scope="session")를 사용하여 브라우저를 관리하면 테스트 실행 세션 전체에서 동일한 브라우저 인스턴스를 재사용할 수 있으므로, 테스트의 효율성을 높일 수 있다.

0개의 댓글