第 4 集:作者:Robert in Waterloo,安大略省(2019 年 7 月)
上一集
如果您处理 Blink,您可能知道 web_tests(以前称为 LayoutTests)。web-platform-tests (WPT) 位于 web_test/external/wpt
中。WPT 是测试 Web 公开功能的首选方法,因为它通过 GitHub 与其他浏览器共享。它具有两种主要的测试类型:reftests 和 testharness.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
及其对应项)在不同作用域(window
、worker
等)中运行相同的测试;.https.sub.html
要求通过 HTTPS 加载测试,并提供服务器端替换支持,如下所示:
var anotherOrigin = "https://{{hosts[][www1]}}:{{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,搜索“pipes”。
WPT 还可以测试尚未包含在规范中的行为;只需将测试命名为 .tentative
即可。如果您需要 Blink 内部 API(例如 testRunner
、internals
),请将测试放在 web_tests/wpt_internal
中。
对 WPT 所做的更改会自动导出到 GitHub。您将在 CL 中看到聊天机器人的评论。系统还会不断导入来自其他供应商的 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。