Chrome for Testing: 브라우저 자동화를 위한 안정적인 다운로드

마티아스 바인스
마티아스 바인스

오늘 Google은 웹 앱 테스트 및 자동화 사용 사례를 대상으로 하는 새로운 Chrome 버전인 Chrome for Testing을 발표하게 되어 기쁘게 생각합니다. 이 도움말에서는 Chrome팀에서 이러한 변경이 필요하다고 생각한 이유를 설명하고 Chrome for Testing이 개발자에게 도움이 될 수 있는 구체적인 예를 살펴봅니다.

배경

브라우저 테스트는 수동이든 자동이든 관계없이 고품질 웹 환경을 만드는 데 필수적인 구성요소입니다. 동시에 적절한 브라우저 테스트 환경을 설정하는 것은 매우 어려우므로, 웹 개발자의 주요 고충사항으로 일관적으로 보고되고 있습니다. 오늘 Google은 이러한 고충을 조금이나마 완화해 줄 변경사항을 발표하고자 합니다.

자동 업데이트: 사용자에게는 좋고 개발자에게는 쉽지 않음

Chrome의 가장 주목할 만한 기능 중 하나는 자동 업데이트 기능입니다. 사용자는 최신 웹 플랫폼 기능, 브라우저 기능 및 버그 수정을 비롯한 최신의 안전한 브라우저 버전을 실행하고 있다는 사실에 기뻐합니다.

그러나 일련의 엔드 투 엔드 테스트를 실행하는 개발자는 완전히 다른 관점을 가지고 있을 수 있습니다.

  • 반복되는 테스트 실행에서 일관되고 재현 가능한 결과를 얻어야 하지만, 브라우저 실행 파일 또는 바이너리가 두 실행 사이에 자체적으로 업데이트되기로 결정한 경우에는 이 결과가 나타나지 않을 수도 있습니다.
  • 특정 브라우저 버전을 고정하고 해당 버전 번호를 소스 코드 저장소에 확인하여, 이전 커밋과 브랜치를 확인하고 그 시점에 브라우저 바이너리에 대해 테스트를 다시 실행할 수 있습니다.

자동 업데이트되는 브라우저 바이너리로는 이 작업을 수행할 수 없습니다. 따라서 자동 테스트에 일반 Chrome 설치를 사용하고 싶지 않을 수도 있습니다. 이는 일반 브라우저 사용자에게 유리한 것과 자동 테스트를 수행하는 개발자에게 유익한 것 간의 근본적인 불일치입니다.

버전이 지정된 브라우저 바이너리

자동 업데이트를 제외하고 특정 버전의 Chrome 바이너리를 찾기가 어려울 수도 있습니다. Google에서는 버전이 지정된 Chrome 다운로드 항목을 의도적으로 제공하지 않습니다. 사용자는 버전 번호에 신경 쓸 필요가 없기 때문에 항상 가능한 한 빨리 최신 버전으로 업데이트해야 합니다. 이는 사용자에게는 유용하지만 이전 Chrome 버전에서 버그 신고를 재현해야 하는 개발자에게는 불편을 줍니다.

이 문제의 보다 구체적인 예는 브라우저 자동화에 ChromeDriver를 사용하려는 경우입니다. 어떤 방식으로든 Chrome 바이너리를 다운로드해야 할 뿐만 아니라 두 바이너리가 호환되도록 하려면 상응하는 버전이 지정된 ChromeDriver 바이너리도 필요합니다.

이 문제를 해결할 좋은 방법이 없기 때문에 많은 개발자가 Chrome이 아닌 Chromium 바이너리를 대신 다운로드한다는 점을 잘 알고 있습니다. 다만 이 방법에는 몇 가지 결함이 있습니다. 첫째, 이러한 Chromium 바이너리는 모든 플랫폼에서 안정적으로 사용할 수 없습니다. 둘째, Chrome 출시 프로세스와 별도로 빌드 및 게시되므로 버전을 실제 사용자 대상 Chrome 출시에 다시 매핑할 수 없습니다. 셋째, Chromium은 Chrome과 다릅니다.

해결 방법: Chrome for Testing

이러한 문제를 해결하기 위해 설계된 Chrome for Testing은 테스트 사용 사례를 타겟팅하는 Chrome의 전용 버전으로, 자동 업데이트 없이 Chrome 출시 프로세스에 통합되어 모든 Chrome 버전에서 사용할 수 있습니다. 테스트 사용 사례에 부정적인 영향을 주지 않으면서 일반 Chrome과 최대한 비슷하게 버전이 지정된 바이너리입니다.

Chrome for Testing을 만들기 위해 Chromium 및 Chrome 코드베이스를 변경하고 모든 채널 (공개 버전, 베타, 개발자, 카나리아)에서 Chrome 출시 프로세스와 함께 잠금 단계에서 이러한 바이너리를 공개적으로 사용 가능한 버킷에 빌드하고 업로드하도록 인프라를 설정했습니다.

Chrome for Testing 기반 인프라는 Chrome 자체를 넘어선 흥미로운 기회를 제공합니다. 예를 들어 일치하는 Chrome 및 ChromeDriver 바이너리를 찾는 것과 관련하여 이전에 언급한 어려움은 ChromeDriver 출시 프로세스를 Chrome for Testing 인프라에 통합하면 완전히 없앨 수 있습니다. 이로 인해 사용자 입장에서 겪는 이러한 고충을 해결할 뿐만 아니라 ChromeDriver의 출시 버전을 Chrome의 출시에 맞추고 수동으로 ChromeDriver를 출시하지 않아도 됩니다.

Chrome for Testing 바이너리를 가져오려면 어떻게 해야 하나요?

플랫폼에 맞게 Chrome for Testing 바이너리를 다운로드하는 가장 쉬운 방법은 npm를 통해 제공되는 @puppeteer/browsers 명령줄 유틸리티를 사용하는 것입니다. 예를 들면 다음과 같습니다.

# Download the latest available Chrome for Testing binary corresponding to the Stable channel.
npx @puppeteer/browsers install chrome@stable

# Download a specific Chrome for Testing version.
npx @puppeteer/browsers install chrome@116.0.5793.0

# Download the latest available ChromeDriver version corresponding to the Canary channel.
npx @puppeteer/browsers install chromedriver@canary

# Download a specific ChromeDriver version.
npx @puppeteer/browsers install chromedriver@116.0.5793.0

자동화된 스크립트를 빌드해 이러한 바이너리를 다운로드하고 싶다면 Google에서 도와드리겠습니다. Google에서는 Chrome 출시 채널 (정식, 베타, 개발자, 카나리아)별로 사용 가능한 최신 버전의 JSON API 엔드포인트를 제공합니다. 최신 상태에 대한 간략한 개요는 Chrome for Testing 가용성 대시보드를 참고하세요.