requests
라이브러리는 주로 HTTP 요청을 보내고 응답을 받는 데 사용되는 반면, Playwright는 웹 브라우저 자동화 도구로서 웹 페이지와의 상호 작용을 시뮬레이션하고 E2E (End-to-End) 테스트를 수행하는 데 더 적합하다. 따라서 두 도구는 목적과 사용 사례가 다르며, 특정 상황에 따라 더 적합한 도구를 선택해야 한다.



Playwright의 주요 장점
- 동적 콘텐츠 처리: Playwright는 실제 브라우저를 사용하여 페이지를 렌더링하므로 JavaScript를 실행하여 동적으로 생성되는 콘텐츠를 처리할 수 있다.
requests
는 정적인 HTML 콘텐츠만 가져올 수 있으며, JavaScript 실행이 필요한 경우에는 사용할 수 없다. - E2E 테스트 용이성: Playwright는 웹 애플리케이션의 전체적인 흐름을 테스트하는 데 최적화되어 있다. 실제 사용자와 유사하게 웹 페이지를 탐색하고, 요소를 클릭하고, 폼을 입력하는 등의 상호 작용을 자동화할 수 있다.
- 다양한 브라우저 지원: Playwright는 Chromium, Firefox, WebKit 등 다양한 브라우저를 지원하므로, 웹 애플리케이션이 여러 브라우저에서 일관되게 작동하는지 확인하는 데 유용하다.
- 자동 대기(Auto-waiting) 기능: Playwright는 요소가 특정 상태가 될 때까지 자동으로 대기하는 기능을 제공하여, 비동기적인 웹 애플리케이션에서 테스트의 안정성을 높인다.
- 강력한 디버깅 도구: Playwright는 테스트 실행 과정을 추적하고, 스크린샷과 비디오를 캡처하는 기능을 제공하여 디버깅을 용이하게 한다.
- 코드 자동 생성: Playwright는 사용자의 브라우저 상호 작용을 기록하여 테스트 코드를 자동으로 생성해주는 기능을 제공하므로, 테스트 코드 작성의 효율성을 높일 수 있다.



Requests의 한계
- JavaScript 처리 불가:
requests
는 웹 페이지의 HTML 소스 코드만 가져오기 때문에 JavaScript로 동적으로 생성되는 콘텐츠에는 접근할 수 없다. - 브라우저 환경 시뮬레이션 불가:
requests
는 실제 브라우저 환경을 시뮬레이션하지 않으므로, 사용자 에이전트, 쿠키, 세션 등의 설정을 직접 관리해야 한다. - UI 테스트 자동화에 부적합:
requests
는 HTTP 요청을 보내는 기능에 특화되어 있으므로, 웹 페이지의 UI 요소를 제어하고 상호 작용을 시뮬레이션하는 데는 적합하지 않다.



Playwright 사용 예시
다음은 Playwright를 사용하여 로그인 페이지에서 아이디와 비밀번호를 입력하고 로그인 버튼을 클릭하는 E2E 테스트 코드의 예시이다.
from playwright.sync_api import sync_playwright
def run(playwright):
browser = playwright.chromium.launch(headless=False)
context = browser.new_context()
page = context.new_page()
page.goto("https://example.com/login")
page.fill("input#username", "test_user")
page.fill("input#password", "test_password")
page.click("button#login")
page.wait_for_selector("div#success-message")
browser.close()
with sync_playwright() as playwright:
run(playwright)
결론
웹 스크래핑이나 API 테스트와 같이 단순한 HTTP 요청 및 응답 처리가 필요한 경우에는 requests
가 적합할 수 있다. 하지만 웹 애플리케이션의 UI 동작을 테스트하거나, 동적 콘텐츠를 처리해야 하는 경우에는 Playwright를 사용하는 것이 더 효과적이다. Playwright는 실제 브라우저 환경을 자동화하여 다양한 테스트 시나리오를 구현할 수 있도록 지원하며, 웹 애플리케이션의 품질을 높이는 데 기여할 수 있다.