TestCafe: убийца Selenium или современный инструмент для автоматизации функционального End-to-End тестирования
В этой статье я хочу раскрыть одно из современных инструментальных средств для автоматизации функционального тестирования TestCafe, которое имеет ряд преимуществ над «классикой» автоматизации, очень популярным долгое время, инструментом Selenium.
Ни в коем случае, я не хочу показать то, что Selenium плох в работе и больше не может использоваться для автоматизации (просто не имею права на это), но хочу открыть мир, в котором автоматизация может быть более гибкой и удобной для автоматизатора, при том, что в этом мире нет Selenium от слова совсем.
Статья будет полезна тем, кто ищет замену Selenium, думает какой инструментарий выбрать для внедрения автоматизации на проекте и также тем, кто всю жизнь использует только Selenium, для того, чтобы просто разнообразить свой кругозор (возможно в недалеком будущем придется перейти именно к новому инструменту в своей работе).
Для того, чтобы показать преимущества TestCafe, пройдемся по некоторым критериям и сделаем сравнение последнего и Selenium.
TestCafe это инструментальное средство для автоматизации End-to-End тестирования Web приложений основано на Node.js платформе, который под капотом использует Proxy.
Сравним TestCafe и Selenium по следующим критериям:
- Инсталляция и подготовка окружения для автоматизации
- Простота написания кода и его читабельность
- Waits в автоматизации
- Запуск тестов на удаленных устройствах
- Язык программирования
Приступим к сравнению.
Инсталляция и подготовка окружения для автоматизации
Что бы установить TestCafe нужно выполнить всего-лишь одну команду:
npm install -g testcafe
1 минута и вуаля, все готово к работе (привет, Selenium).
Что значит все готово к работе?
Во-первых, для тестирования уже доступны следующие браузеры: Google Chrome, Chromium, Google Chrome Canary, Internet Explorer, Microsoft Edge, Mozilla Firefox, Opera, Safari.
Во-вторых, есть уже предустановленный Test Runner и Вы можете сразу писать и запускать автотесты с разными конфигурациями.
Если говорить о Selenium, то иногда подготовка среды занимает не то что больше минуты, а может занять и пару дней, так как, чтобы запускать тесты на различных браузерах, нужно настроить на каждый браузер отдельный WebDriver клиент. И да это не опечатка, на каждый браузер — отдельный WebDriver! И не всегда это все «гладко» работает, так как драйверы разрабатываются производителями браузеров и конечно наличие проблем совместимости никто не отменял.
Поэтому, если говорить о скорости настройки, возможности максимально быстро приступить к работе и не иметь проблем с драйверами для разных браузеров — TestCafe однозначно выигрывает в этом критерии.
Простота написания кода и его читабельность
Основные компоненты TestCafe можно использовать с минимальным знанием языка программирования или даже первоначального его отсутствия, что делает его очень привлекательным для новичков, которые могут с первых дней внедрять автоматизацию.
Давайте сделаем просто сравнение одних и тех же действий, которые написаны на JavaScript с использованием TestCafe и Selenium:
Selenium | TestCafe |
// drag the pizza size sliderconst sourceEle = driver.findElement(By.className("noUi-handle"));const actions = driver.actions({async: true});await actions.dragAndDrop(sourceEle, {x:100, y:0}).perform(); // fill the address form await driver.wait(until.elementLocated(By.css('.google-map')),10000);await driver.findElement(By.className("confirm-address")).click(); await driver.findElement(By.id('phone-input')).sendKeys('+1-541-754-3001');await driver.findElement(By.css('#step3 .next-step')).click(); | // drag the pizza size slider.drag('.noUi-handle', 100, 0) // fill the address form await t.click('.confirm-address').typeText('#phone-input', '+1-541-754-3001').click('#step3 .next-step') |
Как Вам? Согласитесь, в TestCafe не только количество кода меньше, но и читабельность на высоте, по сравнению с Selenium. Также, знание языка программирования должно быть на порядок выше для Selenium, поэтому без знания языка с первых дней автоматизировать у Вас явно не получится.
Waits в автоматизации
Одна из очень важных тем по автоматизации это ожидание появления элементов GUI (графического пользовательского интерфейса).
И однозначно это одна из слабых сторон Selenium. Очень часто нужно вручную определять waits как явные, так и неявные.
При этом TestCafe имеет свой встроенный автоматический механизм ожидания элементов GUI, что в разы облегчает жизнь автоматизатору. И конечно есть возможность выставить вручную таймауты ожидания, если это необходимо.
Вот пример того, как работает автоматический механизм ожидания для Assertions:
После того, как любое действие было выполнено (на рисунке Action Execution), не факт что изменения произойдут мгновенно, это может занять какое-то время (на рисунке Changes Occurred). Потому что при работе с Web приложениями мы всегда имеем дело с асинхронными операциями. Поэтому проверка того, было ли ожидаемое изменение произведено, происходит несколько раз (на рисунке Assertion attempts). Таким образом мы не получим зафейлиный тест, если будет определенная задержка. Но так же нам не нужно выставлять вручную длинные таймауты, что в итоге приведет к увеличению времени прогона тестов.
И сново TestCafe показывает себя с лучшей стороны по сравнению с Selenium.
Запуск тестов на удаленных устройствах
С помощью TestCafe тесты можно запускать на удаленных устройствах, в том числе и мобильных. А ключевое в этом то, что на удаленном устройстве, где будут раниться тесты, не нужно инсталлировать TestCafe. Для этого нужно просто перейти по ссылке в браузере на удаленном устройстве (или используя QR код) и тесты автоматически запустятся. Самое главное, чтобы устройство на котором установлен TestCafe и на том, где будут раниться тесты, были в одной сети.
Такая функциональная возможность будет очень актуальной, если нужно продемонстрировать наличие дефекта на окружении, где не установлен TestCafe или даже сама платформа Node.js. В общем это очень удобно.
Может ли таким функционалом похвастаться Selenium?
Язык программирования
В наше время очень популярными языками программирования, которые используются в связке с Selenium, являются: Java, Python, C#. Хотя Selenium поддерживает намного больше языков. Это конечно прекрасно, то что есть возможность выбора, но стоит отметить тот факт, что задача Selenium автоматизации работать с браузером, а нативный язык для разработки графической части и ее логики при взаимодействии с браузером это конечно же JavaScript.
Например, если мы используем стек Java (самая популярная связка с Selenium) и нам нужно сделать скроллинг страницы, то нужно будет обращаться все-равно к JavaScript:
JavascriptExecutor js = (JavascriptExecutor) driver; js.executeScript("window.scrollBy(x,y)");
Поэтому TestCafe использует JavaScript, TypeScript и CoffeeScript в своей работе, что позволяет более гибко работать с браузером.
Возможность перехватывать и мокать запросы, параллельно ранить тесты, использовать headless режим, что очень актуально для снижения времени прогонки тестов и интеграции с CI/CD, гибко настраивать роли пользователей для тестирования функциональной безопасности, встроенные hooks, которые позволяют более гибко писать тесты и многое другое.
Все это делает TestCafe очень сильным игроком на рынке. И тут возникает логичный вопрос, а почему же тогда так популярен Selenium, а не TestCafe?
Те специалисты, которые активно анализируют современный инструментарий для автоматизации, при старте нового проекта, как правило, выбирают подобные тулзы как TestCafe, Cypress и Playwright, но никак не Selenium. Но увы, тех, кто анализирует активно рынок инструментов не так уж и много, и поэтому «классика» в виде Selenium продолжает использоваться дальше.
Надеюсь, что после прочтения этой статьи Вам захочется хоть немного ознакомится с TestCafe и если вдруг это произойдет, то детальную документацию Вы можете найти на официальном сайте.
И спасибо, за прочтение этой статьи до конца!
13 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів