Web Platform Tests
Web Platform Tests (сокращённо WPT) — это открытая тестовая платформа и набор тестов для проверки совместимости веб-браузеров и других реализаций веб-стандартов. Проект разрабатывается под эгидой консорциума World Wide Web Consortium (W3C) и является частью инициативы по обеспечению интероперабельности веб-технологий. WPT предоставляет единую базу автоматизированных тестов, которые охватывают спецификации HTML, CSS, JavaScript, DOM, Web API и других технологий, входящих в открытую веб-платформу.
История
Проект Web Platform Tests был создан в 2012 году как результат слияния нескольких разрозненных тестовых наборов, поддерживавшихся различными организациями. До этого каждый крупный браузер (Google Chrome, Mozilla Firefox, Apple Safari, Microsoft Internet Explorer) имел собственные внутренние тесты, которые часто были закрытыми или плохо документированными. Отсутствие единой платформы приводило к расхождениям в реализации стандартов: одна и та же функция могла работать по-разному в разных браузерах.
Инициатором создания WPT выступил консорциум W3C при активном участии компаний Google, Mozilla, Apple и Microsoft. Первоначально проект базировался на тестах из репозитория CSS Working Group, а затем постепенно включил тесты для HTML, DOM, JavaScript (ECMAScript) и других спецификаций. В 2015 году проект был переведён на GitHub, что позволило любому разработчику вносить изменения через пул-реквесты.
Ключевым этапом развития стало принятие WPT в качестве официального инструмента для проверки соответствия стандартам W3C. Начиная с 2019 года, все новые спецификации W3C обязаны включать тесты, написанные в формате WPT, как часть процесса утверждения. Это сделало платформу центральным элементом экосистемы веб-стандартов.
Архитектура и формат тестов
WPT представляет собой репозиторий на GitHub, содержащий десятки тысяч тестовых файлов. Каждый тест — это HTML-документ, который может включать JavaScript, CSS и другие ресурсы. Тесты выполняются в реальном браузере или в среде, эмулирующей браузер (например, Headless Chrome или Firefox).
Основные форматы тестов:
- testharness.js — стандартная библиотека для написания тестов на JavaScript. Тест использует функции
test(),promise_test(),async_test()для описания проверок. Результаты выводятся в виде набора пройденных/непройденных утверждений. - reftest — тесты, основанные на сравнении визуального отображения. Создаются два HTML-файла: один с ожидаемым результатом (reference), второй с тестируемой реализацией. Браузер рендерит оба, и система сравнивает пиксельные изображения.
- wdspec — тесты для WebDriver API, использующие протокол автоматизации браузера. Пишутся на Python с использованием библиотеки pytest.
- manual — ручные тесты, требующие вмешательства человека (например, проверка звука или анимации). Помечаются специальным атрибутом.
Каждый тест имеет метаданные: указание на спецификацию, которую он проверяет, список браузеров, в которых он должен работать, и ссылку на соответствующий раздел стандарта.
Управление и процесс разработки
Проект управляется группой участников из разных компаний. Основные принципы:
- Открытость: любой желающий может предложить новый тест или исправление через GitHub. Изменения проходят рецензирование (code review) как минимум двумя участниками, не представляющими одну компанию.
- Консенсус: решения о включении тестов принимаются на основе согласия между представителями разных браузеров. Если один из вендоров возражает, тест может быть отложен или изменён.
- Автоматизация: после принятия пул-реквеста тесты автоматически запускаются на серверах непрерывной интеграции (CI) для нескольких браузеров. Результаты публикуются на сайте wpt.fyi.
Процесс добавления нового теста включает:
- Создание файла в соответствующем подкаталоге (например,
/html/semantics/forms/). - Написание кода теста с использованием testharness.js или другого формата.
- Запуск локальной проверки с помощью инструмента
wpt run. - Отправка пул-реквеста и ожидание рецензии.
Применение
WPT используется в нескольких ключевых областях:
- Разработчики браузеров — для проверки новых версий своих продуктов на совместимость. Например, команда Mozilla запускает WPT перед каждым релизом Firefox, а Google — для Chrome.
- Авторы спецификаций — для проверки того, что их стандарты реализуемы и не содержат двусмысленностей. Если тест не может быть написан, это часто указывает на проблему в спецификации.
- Сторонние разработчики — для тестирования собственных реализаций веб-стандартов, таких как альтернативные браузерные движки (например, Servo, WebKitGTK) или библиотеки для рендеринга HTML (например, html5lib).
- Исследователи — для анализа различий между браузерами и выявления багов.
Инструменты и инфраструктура
Для работы с WPT существует несколько инструментов:
- wpt — командная утилита на Python, позволяющая запускать тесты локально, генерировать отчёты и управлять списками тестов.
- wpt.fyi — веб-сайт, агрегирующий результаты тестирования для различных браузеров и платформ. Позволяет сравнивать прохождение тестов в Chrome, Firefox, Safari, Edge и других.
- WPT Dashboard — инструмент визуализации, показывающий динамику прохождения тестов во времени.
Инфраструктура включает серверы для непрерывной интеграции (Travis CI, GitHub Actions), которые автоматически запускают тесты при каждом изменении. Результаты публикуются в формате JSON и доступны для загрузки.
Значение для веб-стандартов
WPT играет критическую роль в обеспечении интероперабельности веба. Без единой тестовой платформы каждый браузер мог бы по-своему интерпретировать спецификации, что привело бы к фрагментации. WPT позволяет:
- Выявлять расхождения: если тест не проходит в одном браузере, это сигнал о баге или неправильной реализации.
- Ускорять разработку: новые функции могут быть протестированы до их включения в спецификацию.
- Снижать затраты: вместо поддержки собственных тестовых наборов компании используют общую базу.
По состоянию на 2024 год репозиторий WPT содержит более 100 000 тестов, покрывающих все основные веб-стандарты. Проект продолжает расти: ежемесячно добавляется несколько сотен новых тестов.
Критика и ограничения
Несмотря на широкое признание, WPT имеет ряд недостатков:
- Сложность написания тестов: для создания качественного теста требуется глубокое понимание как спецификации, так и форматов WPT. Это создаёт барьер для новичков.
- Неполное покрытие: хотя WPT охватывает многие стандарты, некоторые области (например, WebGL, WebAssembly) имеют меньше тестов, чем хотелось бы.
- Зависимость от браузеров: тесты пишутся с учётом существующих реализаций, что может приводить к «закреплению» багов. Если все браузеры неправильно реализуют спецификацию, тест может быть написан под эту неправильную реализацию.
- Проблемы с производительностью: запуск полного набора тестов занимает несколько часов, что затрудняет быструю итерацию при разработке.
Источники
- W3C Web Platform Tests repository (GitHub)
- Web Platform Tests documentation (web-platform-tests.org)
- WPT.fyi — результаты тестирования
- Статьи на MDN Web Docs о тестировании веб-стандартов
- Презентации и доклады с конференций (например, BlinkOn, Mozilla All-Hands)
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →