본 콘텐츠의 이미지 및 내용은 AI로 생성되었습니다.
본 콘텐츠의 이미지 및 내용을 무단으로 복제, 배포, 수정하여 사용할 경우 저작권법에 의해 법적 제재를 받을 수 있습니다.
이미지 로딩 중...
AI Generated
2025. 11. 3. · 62 Views
Selenium 성능 최적화 완벽 가이드
Selenium 자동화 테스트의 실행 속도를 극적으로 향상시키는 실전 최적화 기법들을 소개합니다. 초급 개발자도 쉽게 적용할 수 있는 헤드리스 모드, 암묵적 대기, 명시적 대기 등의 핵심 기법을 다룹니다.
들어가며
이 글에서는 Selenium 성능 최적화 완벽 가이드에 대해 상세히 알아보겠습니다. 총 10가지 주요 개념을 다루며, 각각의 개념에 대한 설명과 실제 코드 예제를 함께 제공합니다.
목차
- 헤드리스_모드_활성화
- 암묵적_대기_설정
- 명시적_대기_활용
- 이미지_로딩_비활성화
- CSS_선택자_우선_사용
- 불필요한_로깅_비활성화
- 페이지_로드_전략_최적화
- 브라우저_재사용
- 병렬_테스트_실행
- JavaScript_실행으로_스크롤_최적화
1. 헤드리스 모드 활성화
개요
브라우저 UI를 띄우지 않고 백그라운드에서 실행하여 30-40% 속도 향상을 달성할 수 있습니다.
코드 예제
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
driver = webdriver.Chrome(options=options)
driver.get('https://example.com')
설명
headless 모드는 브라우저 렌더링을 최소화하여 리소스를 절약하고, CI/CD 환경에서도 GUI 없이 테스트를 실행할 수 있게 합니다.
2. 암묵적 대기 설정
개요
요소를 찾을 때까지 자동으로 대기하는 시간을 설정하여 불필요한 예외를 방지합니다.
코드 예제
from selenium import webdriver
driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get('https://example.com')
element = driver.find_element('id', 'dynamic-content')
설명
implicitly_wait는 요소가 나타날 때까지 최대 10초 동안 자동으로 폴링하며, 요소가 발견되면 즉시 다음 코드를 실행합니다.
3. 명시적 대기 활용
개요
특정 조건이 만족될 때까지 효율적으로 대기하여 정확한 타이밍 제어가 가능합니다.
코드 예제
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
wait = WebDriverWait(driver, 10)
element = wait.until(
EC.presence_of_element_located((By.ID, 'myElement'))
)
설명
명시적 대기는 특정 요소나 조건에만 적용되어 암묵적 대기보다 더 정밀하고 효율적인 대기 전략을 제공합니다.
4. 이미지 로딩 비활성화
개요
테스트에 불필요한 이미지 로딩을 차단하여 페이지 로드 시간을 크게 단축합니다.
코드 예제
from selenium.webdriver.chrome.options import Options
options = Options()
prefs = {'profile.managed_default_content_settings.images': 2}
options.add_experimental_option('prefs', prefs)
driver = webdriver.Chrome(options=options)
driver.get('https://example.com')
설명
이미지 로딩을 비활성화하면 네트워크 트래픽과 렌더링 시간이 감소하여 전체 테스트 실행 속도가 향상됩니다.
5. CSS 선택자 우선 사용
개요
XPath보다 빠른 CSS 선택자를 사용하여 요소 검색 속도를 최적화합니다.
코드 예제
from selenium.webdriver.common.by import By
# 빠름: CSS 선택자
element = driver.find_element(By.CSS_SELECTOR, 'div.content > p#intro')
# 느림: XPath
element = driver.find_element(By.XPATH, '//div[@class="content"]/p[@id="intro"]')
설명
CSS 선택자는 브라우저 네이티브 엔진을 활용하여 XPath보다 평균 2-3배 빠른 요소 검색 성능을 제공합니다.
6. 불필요한 로깅 비활성화
개요
콘솔 로그와 경고 메시지를 비활성화하여 I/O 오버헤드를 줄입니다.
코드 예제
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument('--log-level=3')
options.add_experimental_option('excludeSwitches', ['enable-logging'])
driver = webdriver.Chrome(options=options)
설명
로깅을 최소화하면 디스크 I/O와 콘솔 출력으로 인한 성능 저하를 방지할 수 있습니다.
7. 페이지 로드 전략 최적화
개요
페이지가 완전히 로드될 때까지 기다리지 않고 필요한 시점에 상호작용을 시작합니다.
코드 예제
from selenium.webdriver.chrome.options import Options
options = Options()
options.page_load_strategy = 'eager'
driver = webdriver.Chrome(options=options)
driver.get('https://example.com')
설명
eager 전략은 DOM이 로드되면 즉시 진행하여 불필요한 리소스 로딩 대기 시간을 제거합니다.
8. 브라우저 재사용
개요
매 테스트마다 브라우저를 새로 시작하지 않고 세션을 재사용하여 초기화 시간을 절약합니다.
코드 예제
import pytest
from selenium import webdriver
@pytest.fixture(scope='session')
def browser():
driver = webdriver.Chrome()
yield driver
driver.quit()
설명
세션 스코프의 fixture를 사용하면 여러 테스트에서 동일한 브라우저 인스턴스를 공유하여 시작 시간을 크게 단축합니다.
9. 병렬 테스트 실행
개요
pytest-xdist를 활용하여 여러 테스트를 동시에 실행하여 전체 테스트 시간을 단축합니다.
코드 예제
# pytest 실행 시 커맨드라인
# pytest -n 4 tests/
from selenium import webdriver
def test_homepage():
driver = webdriver.Chrome()
driver.get('https://example.com')
assert 'Example' in driver.title
driver.quit()
설명
-n 옵션으로 워커 수를 지정하면 독립적인 테스트들이 병렬로 실행되어 전체 소요 시간이 대폭 감소합니다.
10. JavaScript 실행으로 스크롤 최적화
개요
Selenium의 스크롤 메서드 대신 JavaScript를 직접 실행하여 더 빠른 스크롤을 구현합니다.
코드 예제
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://example.com')
driver.execute_script('window.scrollTo(0, document.body.scrollHeight);')
설명
execute_script는 브라우저 엔진에서 직접 실행되어 Selenium의 액션 체인보다 훨씬 빠른 DOM 조작이 가능합니다.
마치며
이번 글에서는 Selenium 성능 최적화 완벽 가이드에 대해 알아보았습니다. 총 10가지 개념을 다루었으며, 각각의 사용법과 예제를 살펴보았습니다.
관련 태그
#Python #Selenium #WebDriver #Automation #Performance
이 카드뉴스가 포함된 코스
댓글 (0)
함께 보면 좋은 카드 뉴스
프레임워크 선택 LangGraph vs CrewAI vs AutoGen 완벽 가이드
AI 에이전트 개발을 위한 세 가지 핵심 프레임워크를 비교 분석합니다. 각 프레임워크의 특징, 장단점, 실무 선택 기준을 초급 개발자도 이해할 수 있도록 설명합니다.
Day 6 학습 루프 이해하기
LLM이 실제로 어떻게 학습하는지 학습 루프의 핵심 원리를 단계별로 살펴봅니다. Forward Pass, Loss 계산, Backward Pass, 파라미터 업데이트까지 한 사이클의 전 과정을 이해합니다.
Day 5 Baseline 모델 만들기
복잡한 모델에 앞서 가장 단순한 Baseline 모델을 직접 만들어봅니다. 아무런 기교 없이 순수하게 다음 토큰을 예측하는 모델을 구현하면서, 언어모델의 가장 기본 구조를 이해합니다.
Day 4 학습용 샘플 데이터 만들기
LLM을 학습시키기 위한 샘플 데이터를 직접 만들어봅니다. 작은 텍스트 말뭉치를 준비하고, 토크나이저로 변환한 뒤 PyTorch 텐서로 만드는 전체 과정을 단계별로 배웁니다.
Day 2 PyTorch 기본기 정리
LLM을 직접 만들기 위해 꼭 알아야 할 PyTorch의 핵심 개념을 정리합니다. 텐서, 자동 미분, 옵티마이저까지 모델 학습의 기초를 다집니다.