Architecture Decision Record

Active theme: Light

← Примеры записей решений

Запись архитектурного решения: фреймворк автоматизации браузера для E2E-тестирования (Playwright или Selenium)

1. Контекст

Мы выбираем фреймворк автоматизации браузера для нашего конвейера сквозного (E2E) тестирования. Этот фреймворк станет неотъемлемой частью наших процессов CI/CD, выполняя тесты, имитирующие реальные действия пользователей на нашей платформе. В частности, тесты будут охватывать такие сценарии, как регистрация/вход пользователей, загрузка файлов, взаимодействие с панелями мониторинга и скачивание отчётов.

Как стартап, мы сосредоточены на гибкой разработке и должны быстро итерировать и развиваться. Наша команда преимущественно работает с TypeScript и Python, и возможность писать тесты на этих языках необходима. Кроме того, платформа содержит интерактивные диаграммы и панели мониторинга, поэтому критически важно, чтобы инструмент автоматизации хорошо поддерживал насыщенные динамические интерфейсы.

Два претендента на эту задачу — Playwright и Selenium, у каждого свои сильные стороны и компромиссы. Нам нужно оценить эти фреймворки на основе функций и требований, изложенных ниже.

2. Рассмотренные варианты

  • Playwright (от Microsoft)
  • Selenium (от проекта Selenium)

3. Факторы решения

Факторы, влияющие на наше решение:

  1. Гибкая разработка: выбранный инструмент должен обеспечивать быстрые и гибкие циклы разработки.
  2. Поддержка языков: нашей команде нужна поддержка и TypeScript, и Python.
  3. Тестирование интерактивного UI: необходима возможность надёжно тестировать интерактивные диаграммы, панели мониторинга и динамические элементы.
  4. Скорость выполнения: хотя это не основная забота, производительность в конвейерах CI/CD учитывается.
  5. Масштабируемость: в ближайшем будущем мы не планируем массивного масштабирования, но хотим убедиться, что решение справится с будущим ростом.
  6. Обратная совместимость: устаревшие системы и совместимость со старыми браузерами в данный момент не критичны для нашего проекта.
  7. Мобильное тестирование: хотя это не первоочередная задача, фреймворк должен быть способен тестировать мобильные адаптивные функции или быть расширяемым для таких случаев.
  8. Тестирование с несколькими мониторами: поддержка конфигураций с несколькими мониторами — второстепенное требование, особенно если мы когда-нибудь расширим тестирование до более сложных пользовательских рабочих процессов.
  9. Тестирование загрузки файлов: фреймворк должен эффективно обрабатывать загрузку файлов, что является основным требованием наших нужд тестирования.

4. Критерии оценки

  • Простота использования: насколько легко писать и сопровождать тесты?
  • Поддержка языков: поддерживает ли фреймворк TypeScript и Python, два языка, которые наша команда использует чаще всего?
  • Тестирование интерактивного UI: насколько хорошо фреймворк справляется со сложными интерактивными пользовательскими интерфейсами, такими как диаграммы, загрузка файлов и динамические данные?
  • Интеграция с CI/CD: насколько хорошо фреймворк интегрируется с распространёнными инструментами и сервисами CI/CD?
  • Кроссбраузерная поддержка: какие браузеры поддерживаются и насколько хорошо они работают?
  • Производительность и скорость: как быстро выполняются тесты, особенно в конвейере CI/CD?
  • Масштабируемость: насколько хорошо фреймворк масштабируется, если добавится больше тестов или более сложные сценарии?
  • Сообщество и экосистема: насколько активно сообщество фреймворка? Много ли доступных интеграций и расширений?

5. Соображения

5.1 Playwright

Плюсы:
  1. Более умный API для загрузки локальных файлов: API Playwright для работы с локальными файлами и выполнения загрузки файлов проще и интуитивнее. Это облегчит реализацию и сопровождение тестов загрузки файлов.
  2. Синтаксис и генерация кода: у Playwright более короткий и лаконичный синтаксис. Это даёт меньше шаблонного кода, что улучшает сопровождаемость и эффективность разработчика. Кроме того, этот более короткий синтаксис улучшает качество генерации кода OpenAI, облегчая автоматическую генерацию тестовых скриптов.
  3. Тестирование интерактивного UI: Playwright превосходно тестирует динамические, интерактивные веб-приложения, например с насыщенными диаграммами, сложными пользовательскими взаимодействиями и обновлениями в реальном времени. Он очень эффективно работает с WebSockets, WebRTC, shadow DOM и другими современными веб-технологиями.
  4. Кроссбраузерная поддержка: Playwright поддерживает Chromium, WebKit и Firefox. Производительность в этих браузерах стабильна, что должно покрыть большинство наших потребностей в тестировании.
  5. Интеграция с CI/CD: Playwright бесшовно интегрируется с современными платформами CI/CD (GitHub Actions, Jenkins и т. д.). Он может запускать тесты параллельно в разных браузерах, оптимизируя время выполнения тестов и делая его подходящим для быстрой разработки.
  6. Быстрый и надёжный: Playwright в целом быстрее Selenium, особенно в режиме headless, и более устойчив при работе с асинхронными веб-элементами.
Минусы:
  1. Ограниченное мобильное тестирование: хотя Playwright поддерживает мобильную эмуляцию для браузеров, ему не хватает нативных возможностей мобильного тестирования, как у интеграции Selenium с Appium для настоящего мобильного тестирования.
  2. Меньшая экосистема: Playwright всё ещё новее и менее устоявшийся, чем Selenium. Хотя у него быстро растущее сообщество и хорошая документация, у него может ещё не быть обширной экосистемы плагинов и интеграций, которую предлагает Selenium.
  3. Ограниченная поддержка браузеров: хотя Playwright охватывает основные современные браузеры (Chrome, Safari, Firefox), его поддержка устаревших браузеров (например, Internet Explorer) не так надёжна, как у Selenium.

5.2 Selenium

Плюсы:
  1. Более долгая история и зрелость: Selenium существует давно и имеет проверенную репутацию. Он широко используется во многих командах и отраслях, что привело к созданию обширной экосистемы плагинов, интеграций и ресурсов.
  2. Кроссбраузерная и кроссплатформенная поддержка: Selenium поддерживает широкий спектр браузеров и версий, включая Internet Explorer, а также может интегрироваться с различными инструментами, такими как Docker, Selenium Grid и облачные сервисы, для распределённого тестирования.
  3. Мобильное тестирование: Selenium благодаря интеграции с Appium гораздо надёжнее для мобильного тестирования, включая приложения как для Android, так и для iOS. Это делает его лучшим выбором для проектов с упором на мобильные устройства.
  4. Тестирование с несколькими мониторами: Selenium лучше поддерживает сценарии с несколькими мониторами или сложным взаимодействием между несколькими окнами.
Минусы:
  1. Сложность: API Selenium более многословен и явен. Хотя в некоторых случаях это может быть преимуществом, это означает больше кода для написания и сопровождения, что может снижать гибкость разработчика — особенно важную в среде стартапа.
  2. Производительность: Selenium в целом работает медленнее Playwright, особенно в режиме headless. Это может влиять на конвейеры CI/CD, особенно по мере роста числа тестов.
  3. Тестирование интерактивного UI: Selenium не так гладок, как Playwright, при тестировании современных интерактивных веб-UI, особенно с диаграммами и обновлениями данных в реальном времени. Для надёжного взаимодействия с динамическим содержимым требуется больше настройки и обработки.

6. Сводка сравнения

Функция Playwright Selenium
Простота использования Более короткий синтаксис, интуитивнее для современных UI Более явный, требует больше шаблонного кода
Поддержка языков TypeScript, Python, JavaScript TypeScript, Python, Java, Ruby, C#
Тестирование интерактивного UI Отлично для динамических UI реального времени Справляется с базовыми UI, но более многословен и сложен для насыщенных взаимодействий
Тестирование загрузки файлов Более умный API для загрузки файлов Более многословный, менее интуитивный API
Интеграция с CI/CD Лёгкая интеграция с GitHub Actions, Jenkins Сильная интеграция со многими инструментами CI
Мобильное тестирование Ограничено, только эмуляция Полная поддержка через Appium
Кроссбраузерная поддержка Chromium, WebKit, Firefox Полная поддержка основных и устаревших браузеров
Производительность Быстрый, оптимизирован для headless-тестирования Медленнее, особенно в режиме headless
Тестирование с несколькими мониторами Ограничено Хорошая поддержка конфигураций с несколькими мониторами
Сообщество и экосистема Растущее, хорошая документация Большое, зрелое, обширная экосистема

7. Решение

Рассмотрев требования и компромиссы, мы считаем, что Playwright — лучший выбор для наших текущих нужд. Его более умный API для тестирования загрузки локальных файлов, лаконичный синтаксис и сильная поддержка тестирования интерактивного UI делают его идеально подходящим для нашего гибкого цикла разработки. Тот факт, что он поддерживает и TypeScript, и Python, критичен для нашей команды, а современный подход фреймворка к тестированию позволит нам писать чистый, сопровождаемый код.

Хотя Selenium остаётся отличным инструментом, особенно для мобильного тестирования, поддержки устаревших браузеров и конфигураций с несколькими мониторами, он менее подходит для наших текущих нужд. Его многословность, более низкая производительность и более сложная работа с динамическими UI, такими как диаграммы, делают его менее оптимальным для нашего случая.

8. Последствия

  • Немедленное действие: мы примем Playwright для наших E2E-тестов, сосредоточившись на тестировании пользовательских потоков, включающих регистрацию, вход, загрузку файлов, панели мониторинга и скачивание отчётов.
  • Долгосрочные соображения: мы будем следить за развитием экосистемы Playwright. Если наши потребности изменятся, особенно в отношении мобильного тестирования или поддержки устаревших браузеров, мы можем вернуться к Selenium.
  • Обучение и документация: командам разработки нужно будет ознакомиться с API Playwright, особенно для работы с динамическими UI и загрузкой файлов.
  • Миграция: существующие тесты Selenium (если есть) будут постепенно перенесены в Playwright.

9. Будущие соображения