Chromium Chronicle #4: Kiểm tra các tính năng của nền tảng web bằng WPT

Tập 4: của Robert trong Waterloo, ON (tháng 7 năm 2019)
Các tập trước

Nếu làm việc trên Blink, bạn có thể biết về web_tests (trước đây là LayoutTests). Web-platform-tests (WPT) nằm bên trong web_test/external/wpt. WPT là cách ưu tiên để kiểm thử các tính năng hiển thị trên web vì tính năng này được chia sẻ với các trình duyệt khác thông qua GitHub. Có hai loại thử nghiệm chính: thử nghiệm refteststestharness.js.

reftest chụp và so sánh ảnh chụp màn hình của hai trang. Theo mặc định, ảnh chụp màn hình được chụp sau khi sự kiện load được kích hoạt; nếu bạn thêm một lớp reftest-wait vào phần tử <html>, thì ảnh chụp màn hình sẽ được chụp khi lớp đó bị xoá. Số lượt kiểm thử bị tắt có nghĩa là phạm vi kiểm thử bị giảm dần. Lưu ý đến sự không liên quan đến phông chữ; sử dụng phông chữ Ahem nếu có thể.

testharness.js là khung JavaScript để kiểm thử mọi thứ ngoại trừ kết xuất. Khi viết mã kiểm thử testharness.js, hãy chú ý đến thời gian và nhớ dọn dẹp trạng thái toàn cục.

Thời gian chờ không ổn định và các trạng thái có thể bị rò rỉ:

Không nên
<script>
promise_test(async t => {
  assert_equals(await slowLocalStorageTest(), "expected", "message");
  localStorage.clear();
});
</script>

Một bài kiểm thử hiệu quả hơn với thời gian chờ dài và tính năng dọn dẹp:

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

Hãy sử dụng testdriver.js nếu bạn cần tính năng tự động hoá, nếu không thì không dùng được trên web. Bạn có thể lấy cử chỉ của người dùng qua test_driver.bless, tạo dữ liệu đầu vào phức tạp và đáng tin cậy bằng test_driver.action_sequence, v.v.

WPT cũng cung cấp một số tính năng hữu ích phía máy chủ thông qua tên tệp. Các chương trình kiểm thử đa toàn cục (.any.js và bạn bè của nó) chạy cùng các bài kiểm thử trong nhiều phạm vi (window, worker, v.v.); .https.sub.html yêu cầu kiểm thử được tải qua HTTPS có hỗ trợ thay thế phía máy chủ như bên dưới:

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

Bạn cũng có thể bật một số tính năng trong chuỗi truy vấn. baz.html?pipe=sub|header(X-Key,val)|trickle(d1) cho phép thay thế, thêm X-Key: val vào tiêu đề phản hồi và trì hoãn 1 giây trước khi phản hồi. Hãy tìm từ khoá "pipes" trên web-platform-tests.org để biết thêm thông tin.

WPT cũng có thể kiểm thử các hành vi chưa có trong quy cách; chỉ cần đặt tên chương trình kiểm thử là .tentative. Nếu bạn cần Blink API nội bộ (ví dụ: testRunner, internals), hãy đặt kiểm thử trong web_tests/wpt_internal.

Các thay đổi đối với WPT sẽ được tự động xuất sang GitHub. Bạn sẽ thấy nhận xét của bot trong CL. Các thay đổi trên GitHub từ các nhà cung cấp khác cũng được nhập liên tục. Để nhận lỗi được gửi tự động khi nhập lỗi mới, hãy tạo tệp OWNERS trong một thư mục con trong WPT:

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

Nguồn thông tin khác

  • Bạn muốn tìm hiểu cách chạy thử nghiệm trên các trình duyệt khác và khả năng tương tác của tính năng này? Dùng wpt.fyi.
  • Bạn muốn tìm thêm tài liệu về API, nguyên tắc, ví dụ, mẹo và nhiều nội dung khác? Truy cập vào web-platform-tests.org.