Chromium Chronicle #4:使用 WPT 测试您的网络平台功能

第 4 集:Robert in Waterloo,ON(2019 年 7 月)
上一集

如果您使用 Blink,则可能知道 web_tests(以前称为 LayoutTests)。 web-platform-tests (WPT) 位于 web_test/external/wpt 内。WPT 是 测试公开网站功能的首选方式,因为它会与其他 通过 GitHub。它有两种主要类型的测试:refteststestharness.js 测试。

reftests 用于截取并比较两个页面的屏幕截图。默认情况下,屏幕截图 在 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(例如 testRunnerinternals),请将您的测试放在 web_tests/wpt_internal 中。

对 WPT 所做的更改会自动导出到 GitHub。你会看到 聊天机器人的评论。其他供应商在 GitHub 上做出的更改也 持续导入。在出现新故障时接收自动提交的 bug 请在 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