Chrome for Testing 은 웹 앱 테스트 및 자동화 사용 사례를 집중적으로 타겟팅하는 Chrome 버전입니다. 이 문서에서는 Chrome팀이 이 버전이 필요하다고 생각한 이유를 설명하고 개발자로서 Chrome for Testing을 활용할 수 있는 구체적인 예를 살펴봅니다.
배경
브라우저 테스트는 수동으로 수행하든 자동으로 수행하든 고품질 웹 환경을 만드는 데 중요한 구성요소입니다. 동시에 적절한 브라우저 테스트 환경을 설정하는 것은 매우 어려워서 웹 개발자의 주요 문제점으로 지속적으로 보고되고 있습니다.
자동 업데이트: 사용자에게는 좋지만 개발자에게는 고통스러움
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 코드베이스에 변경사항을 적용하고 모든 채널 (안정화 버전, 베타, 개발자, Canary)에서 Chrome 출시 프로세스와 동시에 이러한 바이너리를 빌드하고 공개적으로 사용 가능한 버킷에 업로드하는 인프라를 설정했습니다.
Chrome for Testing을 둘러싼 인프라는 Chrome 자체를 넘어 흥미로운 기회를 열어줍니다. 예를 들어 일치하는 Chrome 및 ChromeDriver 바이너리를 찾는 데 관련된 앞서 언급한 어려움을 ChromeDriver 출시 프로세스를 Chrome for Testing 인프라에 통합하여 완전히 없앨 수 있습니다. 이 사용자 대상 문제점을 해결하는 것 외에도 ChromeDriver 출시를 Chrome과 일치시키고 수동 ChromeDriver 출시 프로세스를 없앱니다.