Запис на архитектурно решение: рамка за автоматизация на браузъра за E2E тестване (Playwright срещу Selenium)
1. Контекст
В процес сме на избор на рамка за автоматизация на браузъра за нашия конвейер за цялостно (end-to-end, E2E) тестване. Тази рамка ще бъде неразделна част от нашите CI/CD процеси и ще изпълнява тестове, които симулират реални потребителски взаимодействия с нашата платформа. По-конкретно тестовете ще обхващат сценарии като регистрация/вход на потребители, качване на файлове, взаимодействия с таблото и изтегляне на отчети.
Като стартъп нашият фокус е върху гъвкавата разработка с нужда от бързо итериране и развитие. Нашият екип работи предимно с TypeScript и Python и възможността за писане на тестове на тези езици е от съществено значение. Освен това платформата съдържа интерактивни диаграми и табла, което прави критично важно инструментът за автоматизация да поддържа добре богати, динамични потребителски интерфейси.
Двамата претенденти за тази задача са Playwright и Selenium, всеки със свои силни страни и компромиси. Трябва да оценим тези рамки въз основа на функциите и изискванията, описани по-долу.
2. Разгледани варианти
- Playwright (от Microsoft)
- Selenium (от проекта Selenium)
3. Движещи фактори на решението
Факторите, влияещи върху нашето решение, са следните:
- Гъвкава разработка: Избраният инструмент трябва да позволява бързи, гъвкави цикли на разработка.
- Поддръжка на езици: Нашият екип изисква поддръжка и на TypeScript, и на Python.
- Тестване на интерактивен потребителски интерфейс: Възможността за надеждно тестване на интерактивни диаграми, табла и динамични елементи е от съществено значение.
- Скорост на изпълнение: Макар и да не е основен приоритет, производителността в CI/CD конвейерите е съображение.
- Мащабируемост: Не планираме масивно мащабиране в близко бъдеще, но искаме да сме сигурни, че решението може да се справи с бъдещ растеж.
- Обратна съвместимост: Наследените системи и съвместимостта със стари браузъри не са критични за нашия проект в момента.
- Тестване на мобилни устройства: Макар и да не е непосредствен фокус, рамката трябва да може да тества мобилно-адаптивни функции или да бъде разширяема за такива случаи на употреба.
- Тестване с няколко монитора: Поддръжката на конфигурации с няколко монитора е второстепенно изискване, особено ако някога мащабираме към тестване на по-сложни потребителски работни потоци.
- Тестване на качване на файлове: Рамката трябва да обработва ефективно качването на файлове, което е основно изискване на нашите нужди от тестване.
4. Критерии за оценка
- Лекота на употреба: Колко лесно е да се пишат и поддържат тестове?
- Поддръжка на езици: Поддържа ли рамката TypeScript и Python, двата езика, които нашият екип използва най-често?
- Тестване на интерактивен потребителски интерфейс: Колко добре рамката се справя със сложни, интерактивни потребителски интерфейси като диаграми, качване на файлове и динамични данни?
- Интеграция с CI/CD: Колко добре рамката се интегрира с често използвани CI/CD инструменти и услуги?
- Поддръжка на различни браузъри: Кои браузъри се поддържат и колко добре работят?
- Производителност и скорост: Колко бързо се изпълняват тестовете, особено в CI/CD конвейер?
- Мащабируемост: Колко добре рамката може да се мащабира, ако се добавят повече тестове или по-сложни сценарии?
- Общност и екосистема: Колко активна е общността на рамката? Има ли много налични интеграции и разширения?
5. Съображения
5.1 Playwright
Плюсове:
- По-умен API за качване на локални файлове: API на Playwright за взаимодействие с локални файлове и качване на файлове е по-прост и по-интуитивен. Това би улеснило реализирането и поддържането на тестове за качване на файлове.
- Синтаксис и генериране на код: Playwright има по-кратък, по-стегнат синтаксис. Това води до по-малко шаблонен код, което подобрява поддръжката и ефективността на разработчиците. Освен това този по-кратък синтаксис подобрява качеството на генерирания код от OpenAI, което улеснява автоматичното генериране на тестови скриптове.
- Тестване на интерактивен потребителски интерфейс: Playwright се отличава при тестване на динамични, интерактивни уеб приложения, като тези с богати диаграми, сложни потребителски взаимодействия и актуализации в реално време. Той обработва много ефективно WebSockets, WebRTC, shadow DOM и други съвременни уеб технологии.
- Поддръжка на различни браузъри: Playwright поддържа Chromium, WebKit и Firefox. Има последователна производителност в тези браузъри, което би трябвало да покрие повечето ни нужди от тестване.
- Интеграция с CI/CD: Playwright се интегрира безпроблемно със съвременните CI/CD платформи (GitHub Actions, Jenkins и др.). Може да изпълнява тестове паралелно в различни браузъри, като оптимизира времето за изпълнение на тестовете и го прави подходящ за бърза разработка.
- Бърз и надежден: Playwright е по-бърз от Selenium като цяло, особено в режим без графичен интерфейс (headless), и е по-устойчив при работа с асинхронни уеб елементи.
Минуси:
- Ограничено тестване на мобилни устройства: Макар че Playwright поддържа мобилна емулация за браузъри, му липсват нативни възможности за тестване на мобилни устройства, каквато е интеграцията на Selenium с Appium за истинско мобилно тестване.
- По-малка екосистема: Playwright все още е по-нов и по-малко утвърден от Selenium. Макар да има бързо растяща общност и добра документация, може все още да няма обширната екосистема от добавки и интеграции, която предлага Selenium.
- Ограничена поддръжка на браузъри: Макар че Playwright покрива основните съвременни браузъри (Chrome, Safari, Firefox), поддръжката му за стари браузъри (напр. Internet Explorer) не е толкова стабилна като тази на Selenium.
5.2 Selenium
Плюсове:
- По-дълга история и зрялост: Selenium съществува отдавна и има доказана репутация. Широко се използва от много екипи и в много индустрии, което е довело до обширна екосистема от добавки, интеграции и ресурси.
- Поддръжка на различни браузъри и платформи: Selenium поддържа голямо разнообразие от браузъри и версии, включително Internet Explorer, и може да се интегрира с различни инструменти като Docker, Selenium Grid и облачни услуги за разпределено тестване.
- Тестване на мобилни устройства: Selenium, чрез интеграцията си с Appium, е много по-стабилен за тестване на мобилни устройства, включително приложения за Android и iOS. Това го прави по-добрия избор за проекти с мобилен приоритет или със силен мобилен акцент.
- Тестване с няколко монитора: Selenium предоставя по-добра поддръжка за сценарии с няколко монитора или сложни взаимодействия с много прозорци.
Минуси:
- Сложност: API на Selenium е по-многословен и изричен. Макар че това може да е предимство в някои случаи, означава повече код за писане и поддържане, което може да намали гъвкавостта на разработчиците — особено важна в среда на стартъп.
- Производителност: Selenium като цяло работи по-бавно от Playwright, особено в режим без графичен интерфейс. Това може да повлияе на CI/CD конвейерите, особено с нарастване на броя на тестовете.
- Тестване на интерактивен потребителски интерфейс: 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.