Всем привет. Я QA Аutomation engineer уже 14 лет и 9 из них мне так или иначе приходилось работать с автоматизацией веб-приложении (и не только). Я писала свои автотесты на C#, Java, и JS. Сейчас я хотела бы поделиться опытом, как я выбираю фреймворк для тестирования веб приложения. Думаю, для кого-то мой текст может быть полезен.
Первое, с чего следует начинать создание своего фреймворка, - это выбор движка взаимодействия с браузером. Именно движок в дальнейшем станет краеугольным камнем ваших тестов. Поэтому выбор движка является фундаментом дома, который вы строите (и потом этот фундамент никак не переделать сторонними библиотеками).
Глава 1. Выбор движка
На данный момент времени есть 4 популярных способа работы с браузером: Selenium, Puppeteer, Cypress и Playwright. Ниже приведена таблица сравнений этих движков.
Разработчик | Microsoft | |||
Проект стартовал | В 2004. | В 2012. | В 2015. | В 2020 (в интернете сложнее будет найти помощь в решение проблемы). |
какие браузеры поддерживают | Chrome, Firefo, Edge, Internet Explorer, Opera, Safari. | Chrome-family browsers (Electron, new Edge). | Chrome-family browsers (Electron, new Edge), Firefox. | Chrome-family browsers (Electron, new Edge), Firefox, WebKit. |
Code | Весь открытый код. | Весь открытый код. | Есть платные обучалки. | Весь открытый код. |
Язык программирования | Java, Python, C#, Ruby, JavaScript. И другие. | Java, Python, C#, JavaScript, TypeScript. И другие. | JavaScript, TypeScript. | Java, Python, C#, JavaScript, TypeScript. |
Явное сетевое управление | Нет. | Нет. | Представляет общеконтекстный перехват сети для заглушки и имитации сетевых запросов. | Представляет общеконтекстный перехват сети для заглушки и имитации сетевых запросов. |
Безголовый режим для браузеров | Не все драйверы поддерживают безголовый режим. | Поддерживает безголовый режим. | Поддерживает безголовый режим. | Поддерживает безголовый режим. |
OS | Нужны Mac для Safari и Windows для IE (Edge). | Работают на 3-х платформах (Windows, Mac, Linux). | Работают на 3-х платформах (Windows, Mac, Linux). | Работают на 3-х платформах (Windows, Mac, Linux). |
Принцип работы | В Selenium WebDriver у вас есть три процесса: 1.Selenium WebDriver. 2.Драйвер браузера, такой как ChromeDriver , GeckoDriver (для Firefox), EdgeDriver , SafariDriver и т. Д. 3.Cам браузер. Все связи между этими процессами означают, что тесты Selenium занимают много времени. | Чем хорош Puppeteer? Он запускает headless-браузер и использует DevTools протокол, поэтому тесты проходят быстрее и стабильнее по сравнению с Selenium. | Код, который вы пишете в своих тестовых сценариях Cypress, не запускается вне браузера, как в WebDriver. Его запускает браузер. Фактически, он выполняет ваш тестовый код и код приложения, которое вы тестируете. | Тесты, написанные с помощью Playwright, выполняются в изолированной среде с чистого листа, называемой контекстами браузера. |
Среднее время выполнения (в секундах) | 3.66 | 2.22 | 10.35 | 3.19 |
Стандартное отклонение (в секундах) | 0.65 | 0.41 | 2.67 | 1.23 |
На выбор движка влияет очень важный аспект: как вы планируете запускать свои тесты. А именно как вы планируете настраивать свою непрерывную интеграцию.
Глава 2: как мы будем запускать?
OS | Для запуска Safari требуется Mac. Для запуска IE требуется Windows. | Может работать на Windows, macOS, Linux. | Может работать на Windows, macOS, Linux. | Может работать на Windows, macOS, Linux. |
Первый способ прогона тестов: создать агента и запускать тесты на нем. Ты сам создаешь агента (машину) с нужной OS и запускаешь тесты на ней. Агентом может быть локальный компьютер. | ||||
Агенты. | Мы должны создать два агента: один Windows, другом Mac (если хотим использовать браузеры Safari и IE) | Можно создать только одного агента (Windows, macOS, Linux). | Можно создать только одного агента (Windows, macOS, Linux). | Можно создать только одного агента (Windows, macOS, Linux). |
Запуск параллельно на разных браузерах. | Мы должны использовать selenium grid, если у нас разные браузеры. | Просто запустить. | Просто запустить. | Просто запустить. |
Второй способ: облачный сервис. Подключение к стороннему серверу с браузерами и использование их для прогона автотестов. | ||||
Какие есть? | Очень много серверов поддерживает Selenium. | Точно есть BrowserStack и Sauce Labs и TestingBot. | Точно есть BrowserStack и Sauce Labs и TestingBot. | Точно есть Sauce Labs и TestingBot (в теории поддерживает удаленное подключение. |
Нужно ли платить? | Да. | Да. | Да. | Да. |
Ели вы выбрали второй путь, советую прочитать вот эту сравнительную статью.
Первый способ vs Второй способ
Первый способ | Второй способ | |
Нужно ли платить? | Нет. | Да. |
Скорость исполнения кода. | Быстрее. | Медленнее. |
Поддержка автоматизатором агента (браузера). | Да. | Нет. |
Резюме:
Если вам очень важно тестировать на IE или на подлинном Safari, вам подойдет только Selenium - он многовековой, проверенный временем продукт. Если вы выбрали Selenium, то советую использовать облачные серверы. Иначе, вся работа по обновлению WebDriver и браузера, ляжет на ваши плечи.
Если вам важна кроссбраузерность, но от поддержки IE вы отказались (он перестает поддерживаться в 2021-2022 году), а также вы согласны на движок WebKit, вместо Safari, то смело берите Playwright. Это достаточно молодой продукт, но быстро развивающийся. Лучше, конечно, содержать своего агента потому, что он будет дешевым (можно купить безголового Linux агента). Обновления браузеров идет внутри пакета Playwright. По факту эти браузеры могут не стоять на машине, они запускаются из коробки Playwright.
Если вам не важна кроссбраузерность и можно гонять тесты на одном браузере, тогда берите Puppeteer. Он самый шустрый, а также chromium, на данный момент времени, самый стабильный браузер.
Если вам важно делать Network mocking в тестах, то используйте Cypress, там больше готовых сценариев чем на Playwright. Но! Это решение подходит только для тех, кто дружит с JS.
Глава 3: что дальше?
Выбор Test Runners.
Следующими этапами после выбора Движка должны быть этап выбора Test Runners. Фреймворка, который будет ваши тесты организовывать. Тест раннеры зависят от языка программирования, на которых вы пишете. Для JS можно сравнить 3 самых популярных: Jest, Mocha и Jasmine.
В автоматизации я не заметила особой разницы в использовании того или иного раннера, но один пункт все-таки отмечу:
Тут находится хороший текст, переведенный с английского языка по этому поводу:
«Два популярных соперника - это Jest и Mocha. Jest - это среда тестирования с открытым исходным кодом разработанная Facebook. Встроенный в популярный пакет create-react-app, он быстрее и удобнее для написания идиоматических тестов на JavaScript. Он имеет встроенные возможности имитации и утверждения при параллельном запуске тестов, что обеспечивает более плавный и быстрый запуск теста. Одной из уникальных особенностей Jest является то, что он обеспечивает тестирование снимков для полного контроля над пользовательским интерфейсом. Mocha предоставляет разработчикам базовую среду тестирования с такими опциями, как библиотеки assertion, mocking и spy. Это одна из самых гибких библиотек для тестирования JavaScript. Небольшой недостаток Mocha - это необходимость в дополнительной настройке. Chai, самая популярная библиотека утверждений с открытым исходным кодом, используется с Mocha».
Эпилог
Обертка
Третьим этапом подготовки к автоматизации должен быть выбор фреймворка - обертки на движок. Например WebdriverIO (для Selenium) или CodeceptJS (для Selenium или Puppeteer). Выбор обертки также следует делать, взвешивая плюсы и минусы. Это тема для следующей статьи.
Помимо всего прочего, есть еще визуальные фреймворки. Самыми популярными являются Percy и Applitools. Они добавят в ваше приложение красивое сравнение скриншотов, если это вам необходимо.
Движки Cypress и Playwright можно использовать без дополнительных обёрток, в них отлично описаны функции.
Selenium и Puppeteer лучше обертывать всегда, чтобы не изобретать велосипед.
На этом у меня пока все. Спасибо за внимание!
jreznot
Ну зачем вам Selenium Grid? Selenoid же! Да и без него Selenium в Docker можно гонять на разных браузерах.
SaM1808
сняли с языка...
... и в разных версиях браузера
velizaryan Автор
Пишу о том что применяла) Можно вместо Selenium Grid использовать Selenoid, как я понимаю сейчас это более современное решение чем Selenium Grid.
SaM1808
Попробуйте selenod (https://aerokube.com/selenoid/latest/), вполне возможно - откажитесь от grid`а