Architecture Decision Record

Active theme: Light

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

Запис на архитектурно решение: рамка за автоматизация на браузъра за E2E тестване (Playwright срещу Selenium)

1. Контекст

В процес сме на избор на рамка за автоматизация на браузъра за нашия конвейер за цялостно (end-to-end, E2E) тестване. Тази рамка ще бъде неразделна част от нашите CI/CD процеси и ще изпълнява тестове, които симулират реални потребителски взаимодействия с нашата платформа. По-конкретно тестовете ще обхващат сценарии като регистрация/вход на потребители, качване на файлове, взаимодействия с таблото и изтегляне на отчети.

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

Двамата претенденти за тази задача са Playwright и Selenium, всеки със свои силни страни и компромиси. Трябва да оценим тези рамки въз основа на функциите и изискванията, описани по-долу.

2. Разгледани варианти

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

3. Движещи фактори на решението

Факторите, влияещи върху нашето решение, са следните:

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

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

  • Лекота на употреба: Колко лесно е да се пишат и поддържат тестове?
  • Поддръжка на езици: Поддържа ли рамката TypeScript и Python, двата езика, които нашият екип използва най-често?
  • Тестване на интерактивен потребителски интерфейс: Колко добре рамката се справя със сложни, интерактивни потребителски интерфейси като диаграми, качване на файлове и динамични данни?
  • Интеграция с CI/CD: Колко добре рамката се интегрира с често използвани CI/CD инструменти и услуги?
  • Поддръжка на различни браузъри: Кои браузъри се поддържат и колко добре работят?
  • Производителност и скорост: Колко бързо се изпълняват тестовете, особено в CI/CD конвейер?
  • Мащабируемост: Колко добре рамката може да се мащабира, ако се добавят повече тестове или по-сложни сценарии?
  • Общност и екосистема: Колко активна е общността на рамката? Има ли много налични интеграции и разширения?

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

5.1 Playwright

Плюсове:
  1. По-умен API за качване на локални файлове: API на Playwright за взаимодействие с локални файлове и качване на файлове е по-прост и по-интуитивен. Това би улеснило реализирането и поддържането на тестове за качване на файлове.
  2. Синтаксис и генериране на код: Playwright има по-кратък, по-стегнат синтаксис. Това води до по-малко шаблонен код, което подобрява поддръжката и ефективността на разработчиците. Освен това този по-кратък синтаксис подобрява качеството на генерирания код от OpenAI, което улеснява автоматичното генериране на тестови скриптове.
  3. Тестване на интерактивен потребителски интерфейс: 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, особено в режим без графичен интерфейс. Това може да повлияе на CI/CD конвейерите, особено с нарастване на броя на тестовете.
  3. Тестване на интерактивен потребителски интерфейс: Selenium не е толкова гладък като Playwright при тестване на съвременни, интерактивни уеб потребителски интерфейси, особено с диаграми и актуализации на данни в реално време. Изисква повече настройка и обработка, за да взаимодейства надеждно с динамично съдържание.

6. Резюме на сравнението

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

7. Решение

След като разгледахме изискванията и компромисите, Playwright е по-добрият избор за сегашните ни нужди. Неговият по-умен API за тестване на качване на локални файлове, стегнатият синтаксис и силната поддръжка за тестване на интерактивен потребителски интерфейс го правят идеално подходящ за нашия цикъл на гъвкава разработка. Фактът, че поддържа и TypeScript, и Python, е критичен за нашия екип, а съвременният подход на рамката към тестването ще ни позволи да пишем чист, поддържаем код.

Макар че Selenium остава чудесен инструмент, особено за тестване на мобилни устройства, поддръжка на стари браузъри и настройки с няколко монитора, той е по-малко подходящ за сегашните ни нужди. Многословието му, по-бавната производителност и по-сложната обработка на динамични потребителски интерфейси като диаграми го правят по-малко оптимален за нашия случай на употреба.

8. Последици

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

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