Chromium Chronicle #4: WPT로 웹 플랫폼 기능 테스트

에피소드 4: 로버트 인 워털루, ON (2019년 7월)
이전 에피소드

Blink에서 작업하는 경우 web_tests (이전 명칭: LayoutTests)에 대해 알고 있을 수 있습니다. web-platform-tests (WPT)는 web_test/external/wpt 내에 있습니다. WPT는 웹 노출 기능을 테스트하는 데 선호되는 방법으로, GitHub를 통해 다른 브라우저와 공유됩니다. 이 테스트에는 두 가지 기본 테스트 유형인 refteststestharness.js 테스트가 포함됩니다.

reftest는 두 페이지의 스크린샷을 찍어 비교합니다. 기본적으로 스크린샷은 load 이벤트가 실행된 후 캡처됩니다. <html> 요소에 reftest-wait 클래스를 추가하면 클래스가 삭제될 때 스크린샷이 생성됩니다. 테스트를 사용 중지하면 테스트 적용 범위가 감소합니다. 글꼴 관련 결함에 유의하세요. 가능하면 Ahem 글꼴을 사용하세요.

testharness.js는 렌더링을 제외한 모든 항목을 테스트하기 위한 JavaScript 프레임워크입니다. testharness.js 테스트를 작성할 때 타이밍에 주의를 기울이고 전역 상태를 정리해야 합니다.

불안정한 제한 시간 및 잠재적인 유출 상태:

금지사항
<script>
promise_test(async t => {
  assert_equals(await slowLocalStorageTest(), "expected", "message");
  localStorage.clear();
});
</script>

긴 시간 초과와 정리로 더 나은 테스트:

권장사항
<meta name="timeout" content="long">
<script>
promise_test(async t => {
  t.add_cleanup(() => localStorage.clear());
  assert_equals(await slowLocalStorageTest(), "expected", "message");
});
</script>

자동화가 필요한 경우 testdriver.js를 사용하세요. 다른 웹에서는 사용할 수 없습니다. test_driver.bless에서 사용자 동작을 가져오거나 test_driver.action_sequence로 복잡하고 신뢰할 수 있는 입력을 생성하는 등의 작업을 할 수 있습니다.

WPT는 파일 이름을 통해 몇 가지 유용한 서버 측 기능도 제공합니다. 다중 전역 테스트 (.any.js 및 그 친구)는 다른 범위 (window, worker 등)에서 동일한 테스트를 실행합니다. .https.sub.html는 아래와 같은 서버 측 대체를 지원하는 HTTPS를 통해 테스트를 로드하도록 요청합니다.

var anotherOrigin = "https://&#123;&#123;hosts[][www1]}}:&#123;&#123;ports[https][0]}}/path/to/page.html";

일부 기능은 쿼리 문자열에서도 사용 설정할 수 있습니다. baz.html?pipe=sub|header(X-Key,val)|trickle(d1)는 대체를 사용 설정하고 응답 헤더에 X-Key: val를 추가하며 응답하기 전에 1초 지연합니다. 자세한 내용은 web-platform-tests.org에서 '파이프'를 검색하세요.

WPT는 아직 사양에 포함되지 않은 동작도 테스트할 수 있습니다. 테스트 이름을 .tentative로 지정하기만 하면 됩니다. Blink 내부 API (예: testRunner, internals)가 필요한 경우 web_tests/wpt_internal에 테스트를 배치하세요.

WPT 변경사항은 GitHub로 자동으로 내보내집니다. CL에서 봇의 주석을 볼 수 있습니다. 다른 공급업체의 GitHub 변경사항도 지속적으로 가져옵니다. 새 실패를 가져올 때 자동으로 신고되는 버그를 수신하려면 WPT의 하위 디렉터리에 OWNERS 파일을 만듭니다.

# TEAM: your-team@chromium.org
# COMPONENT: Blink>YourComponent
# WPT-NOTIFY: true
emails-here-will-be-cc@chromium.org

추가 리소스

  • 다른 브라우저에서 테스트가 어떻게 실행되는지, 기능이 얼마나 상호 운용되는지 알고 싶으신가요? wpt.fyi를 사용합니다.
  • API, 가이드라인, 예시, 팁 등에 대한 문서를 더 찾고 계신가요? web-platform-tests.org를 방문합니다.