기능 테스트 자동화 라이브러리에 대한 비교 및 사내에 맞는 라이브러리를 선정하기 위한 자료 조사의 결과를 기술합니다! 비슷한 환경이거나 라이브러리마다 장단점이 있기 때문에 무조건 Playwright가 좋다기보단, 참고용으로 생각해주시면 좋을 것 같아요 :)
기능 테스트 라이브러리를 선정하기 위한 과정
사내에는 기능 자동화 테스트 관련 작업이 진행된 적이 없었습니다. 그래서 처음부터 하나씩 알아가야하는 상황이었고, 가벼운 경험이라면, Selenium을 사용하여 로그인정도 해본 경험, 웹 화면 동작 레코딩 방식을 사용하여 코드를 얻어와서 수행하는 작업, 유료 툴인 Katalon 도구를 이용한 자동화 수행 경험을 가지고 있었지만, 자동화 프로젝트를 진행할 만큼 지식 수준은 아니었어서, 이번 자동화 프로젝트를 수행할 때 확실하게 조사를 하고 가야겠다는 생각을 했습니다.
우선 가장 쉽게 선정할 수 있는 방법!
가장 많이 쓰고있고 유행하는 라이브러리를 찾아보자!!
그래서 바로 npm Trends 사이트로 접속하여 현재 대중적으로 알려져있는 Selenium 외 Cypress, Puppeteer, Playwright 라이브러리의 다운로드 현황을 조사해봤습니다.
(2024.06 기준 npm trend 자료)
자료 조사했을 때는 Jan 2024 기간에 확인하고 기술조사를 했었는데, 현재 다운로드 순위가 일부 바뀐 모습이 보이네요
이때 예상했던 그래프가 현재까지도 이어가고 있었네요. 심상치 않았던 Playwright의 우상향 그래프가 Cypress까지 넘어선 모습입니다.
다음은 각 테스트 도구의 특징을 간략하게 알아보겠습니다.
자동화 테스트 도구 별 간략한 소개
Selenium
가장 대중적으로 알려져있는 Selenium-webdriver는 가장 낮은 점유율을 가지고 있었습니다.
원인은 명확하게 파악하긴 어렵지만, 자료 조사한 결과는 구현의 복잡성이나, 속도, 경쟁 도구의 성장 등으로 낮은 지표를 점유하는 것 같습니다.
물론 가장 오래된 도구로, 커뮤니티와 참고 자료를 많이 찾을 수 있습니다. 현재 많은 업체에서도 Selenium을 활용하여 자동화 환경을 구성한 것으로 알고 있습니다.
Selenium의 장점은 Chrome, Edge 뿐만아니라 Firefox, Safari 심지어 IE11까지 브라우저 테스트가 가능하다는 장점을 가지고 있고, Java, C#, Python 등 정말 다양한 언어로 구현이 가능하다라는 점 입니다.
단점은 다른 도구에 비해 테스트 수행 속도가 느리다는 점이 가장 많이 나오네요.
Cypress
다음은 Cypress입니다. Selenium과 마찬가지로 많이 알려진 자동화 도구입니다.
Selenium의 불편함을 해결하기 위해서 2014년에 출시 된 테스트 도구로, 확실히 테스트 속도가 빠르다는 장점이 있습니다. Selenium과 다르게 설치 및 설정이 간단하고, 디버깅이 수월하다는 장점을 가지고 있습니다.
단점으로는 크로스브라우저의 제한이 많이 보이는데, Chrome, Firefox, Edge만 지원하고 있으며 Safari는 제한적으로 제공하고 있다고 합니다.
Puppeteer
다음은 Puppeteer입니다. 2017년 구글에 의해 개발된 Node.js 라이브러리입니다.
헤드리스 즉, 화면에 브라우저가 보이지 않는 상태에서도 테스트를 지원하고 빠르고 안정적인 테스트 환경을 제공하기 위해 출시된 테스트 도구입니다.
헤드리스 모드를 활용하여 보다 빠른 테스트 처리 속도를 가질 수 있게 되었으며, Javascript로 테스트 스크립트를 작성할 수 있어서 웹 개발자들이 친숙하게 사용할 수 있다는 장점도 가지고 있습니다.
(현재는 다른 테스트 도구들도 헤드리스를 어느정도 지원하는 것으로 알고 있습니다)
하지만 장점이자 단점으로는 JavaScript / TypeScript로만 테스트를 작성할 수 있으며, 기본적으로 Chrome 브라우저 테스트만 지원하기 때문에 크로스 브라우저 테스트도 어려운 단점을 가지고 있습니다.
현재는 브라우저 테스트 지원을 조금씩 넓혀가고 있다곤 하네요!
Playwirght
마지막으로 Playwirght 라이브러리입니다. 2020년 MS 사에서 Puppeteer 테스트 도구의 약점을 보완하여 출시된 도구이며, Puppeteer의 장점을 흡수하고, 단점은 보완하여 출시되었으며, 가장 최근에 나온 테스트 도구인 만큼 다양한 기능이 많습니다. Chrome, Edge, Firefox, WebKit 등 주요 브라우저 엔진을 지원하여 크로스 브라우저 테스트를 지원하고 있으며,
Seleinum처럼 다양한 언어로 개발할 수 있습니다.
단점으로는 가장 최근에 나온 테스트 도구로 참고할만한 리소스가 매우 부족하다는 점이 있습니다.
마지막으로 Selenium, Puppeteer, Cypress, Playwright 도구의 주요 기능을 비교한 표입니다
(*GPT를 활용한 자료입니다)
기능 | Selenium | Puppeteer | Cypress | Playwright |
브라우저 지원 | Chrome, Firefox, Safari, Edge, IE | Chrome, Chromium | Chrome, Firefox, Edge | Chrome, Firefox, WebKit |
프로그래밍 언어 지원 | Java, C#, Python, Ruby, JavaScript | JavaScript, TypeScript | JavaScript | JavaScript, TypeScript, Python, C# |
헤드리스 모드 | 지원 | 기본 지원 | 지원 (단, 주로 유저 인터페이스에서 사용) | 기본 지원 |
자동 대기 | 제한적(수동 설정 필요) | 기본 제공 | 기본 제공 | 기본 제공 |
디버깅 도구 | 외부 도구 사용(Firebug, Chrome DevTools 등) | Chrome DevTools | 자체 디버깅 도구 제공 | Chrome DevTools, VS Code 등 |
모바일 디바이스 테스트 | Appium과 함께 사용 | 모바일 에뮬레이션 지원 | 모바일 웹 브라우저 테스트 가능 | 모바일 에뮬레이션 및 실기기 테스트 지원 |
스크린샷 및 비디오 녹화 | 제한적(외부 라이브러리 필요) | 기본 제공 | 기본 제공 | 기본 제공 |
프레임워크 통합 | 다양한 테스트 프레임워크와 통합 (JUnit, TestNG 등) | Jest, Mocha 등과 통합 | 내장된 테스트 러너 사용 | Jest, Jasmine, Mocha 등과 통합 |
병렬 테스트 실행 | Selenium Grid 필요 | 자체 지원은 없으나 Node.js로 가능 | 기본 제공 | 기본 제공 |
커뮤니티 및 문서 | 매우 풍부 | 상대적으로 적음 | 풍부하지만 Selenium보다는 적음 | 빠르게 성장 중 |
설정 및 사용의 용이성 | 설정 복잡 | 비교적 쉬움 | 매우 쉬움 | 비교적 쉬움 |
실시간 DOM 조작 | 제한적 (JavaScriptExecutor 사용) | 지원 | 지원 | 지원 |
다중탭 및 다중 페이지 지원 | 제한적 (브라우저 인스턴스 추가 필요) | 지원 | 지원하지 않음 | 지원 |
기능 테스트 자동화를 위해 4가지 테스트 도구에 대한 기술조사를 해봤고, 제가 선정한 테스트 도구는 Playwright 였습니다.
간략한 이유는 npm 다운로드 트랜드, 가장 최신의 자동화 도구인 점이 크게 작용하였으며, 단점으로 작성했던 커뮤니티나 참고할 리소스가 부족한 부분은 GPT를 통해 해결하였습니다. 운 좋게도 Playwright GPT가 개발되어 있었으며 현재까지도 사용할 기술들에 대한 자료 조사는 모두 GPT 내에서 해결 가능했습니다.
단순히 위 이유만으로 선정한 것은 아니라서 다음 장에서 선정한 이유를 더 상세하게 다뤄보도록 하겠습니다.
2024.06.09 - [QA/기능 자동화] - 기능 테스트 자동화, 왜 Playwright를 선정했을까? (2)
'QA > 기능 자동화' 카테고리의 다른 글
기능 자동화, POM(Page Object Model) 구조 만들기 (1) | 2024.09.08 |
---|---|
기능 자동화를 만들면 살충제 패러독스에 걸리지 않나요? (0) | 2024.07.04 |
Playwright를 활용한 자동화 연습 (1) | 2024.06.16 |
기능 자동화 동작 방식과 식별자 (0) | 2024.06.15 |
기능 테스트 자동화, 왜 Playwright를 선정했을까? (2) (2) | 2024.06.09 |