Chromium Chronicle #4:使用 WPT 測試網路平台功能

第 4 集:羅伯特在滑鐵盧, ON (2019 年 7 月)
上一集

如果您使用的是 Blink,可能知道 web_tests (舊稱 LayoutTests)。 網頁平台測試 (WPT) 位於 web_test/external/wpt 內。WPT 是 比較偏好網路公開功能的方法,因為與其他程式共用 與 kube-APIserver 通訊它主要有兩種測試類型:限制testharness.js 測試。

拒絕:擷取及比較兩個網頁的螢幕截圖。根據預設,螢幕截圖 是在觸發 load 事件後發生;如果新增 reftest-wait 類別 至 <html> 元素,則會在移除類別時擷取螢幕截圖。 停用測試代表測試涵蓋範圍會降低。留意字型相關 發炎請盡可能使用 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 及其好友) 在不同的 範圍 (windowworker 等);.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