Selenium №1 рабочий инструмент тестировщика в 2022 году. А Cypress очень популярен в некоторых QA-задачах. Оба инструмента очень мощные. Какой QA-инструмент кому подходит, и когда?
Если нет времени:
- Что такое Cypress?
- Зачем нужен Cypress?
- Плюсы Cypress
- Минусы Cypress
- Что такое Selenium?
- Зачем нужен Selenium?
- Плюсы Selenium
- Минусы Selenium
- Таблица для ленивых
- Кто и когда работает в Selenium и Cypress
Что такое Cypress?
Cypress — это веб-платформа, как полагают ее создатели, “следующего поколения”. Основан на Mocha (здесь) и Chai (здесь). Платформа приспособлена для “сквозного” end-to-end автоматизированного тестирования, а поскольку JS все ще первый и главный язык тестировщика, а Selenium имеет свои минусы, то понятна причина популярности Cypress.
Между Cypress и Selenium — большие различия в архитектуре. В Cypress не так много ограничений, что делает его более быстрым и простым, что касается сценариев автоматизации. Можно тестировать в браузере:
- Юнит-тестирование
- Интеграционное тестирование
- Сквозное тестирование
Зачем нужен Cypress?
- Из-за своей удобной архитектуры, платформа обеспечивает быстрое и стабильное выполнение тестов, по сравнению с другими средствами автоматизации.
- Есть функция захвата скриншотов при выполнении тестов, а также и видео целого тест-сьюта; запускается из командной строки.
- В отделе “Инструменты разработчика” есть опция отладки с хорошими функциями.
- В отличие от других инструментов, в которых при выполнении тестов для синхронизации применяются wait’ы и sleep’ы, в Cypress есть неплохая встроенная функция “ожидания по дефолту” следующих действий, а также ожидания перед переходом к следующему шагу.
- В Cypress отображается время реакции на действие, что полезно в юнит-тестировании.
- Cypress хорошо приспособлен для CI-инструментов (непрерывной интеграции), особенно Jenkins.
- Имея функцию сайзинга — Viewport, Cypress быстро проверяет отклик приложения.
- Ясно обозначает статус тест-кейса, и количество кейсов в состоянии pass/fail.
- Отлично реализован лог ошибок, четко видно их причины.
- Ну и неплохая документация.
Плюсы Cypress
- Так уж сложилось, что большинство инструментов сквозного тестирования построены “вокруг Selenium”, поэтому наследуют его проблемы. Как уже говорилось, Cypress — на другой архитектуре. Selenium выполняет remote-команды по сети, а Cypress работает в том же run-loop (цикле выполнения), что и тестируемое приложение.
- Cypress тестирует (почти) все, что делается в браузере. Cypress прекрасно сочетается с модными JS-фреймворками. Нет проблем с React, Vue, Angular, даже Elm. Хорошо работает со старыми версиями страниц, и приложениями.
- API-тестирование — очень хорошо, в отличие от других опенсорсных платформ.
- Большинство тестовых инструментов работают “вне браузера”, выполняя, как уже говорилось выше, команды по сети. Cypress работает с приложением непосредственно в том же цикле выполнения. Cypress запускается серверным процессом Node.js. Процессы Cypress и Node.js постоянно коммуницируют между собой, синхронизируются, выполняют тестовые задачи в зависимости друг от друга. Имея доступ к обеим частям (фронтенду и бекенду) — появляется возможность обрабатывать события в реальном времени; действия “вне браузера” выполняются с высшей привилегией.
- Cypress работает на уровне сети, просматривая и изменяя трафик на лету, что позволяет не только изменять все проходящие через него данные, но и изменять код во время автоматизации.
- Cypress полностью контролирует весь процесс автоматизации, давая тестировщику обзор всего, что происходит в браузере и вне его. Это означает более надежные результаты тестирования.
- Cypress ставится локально, и может удобно встраиваться в операционную систему для автоматизации задач. Это позволяет выполнять стандартные тестовые действия типа записи скриншотов и захвата экрана в видео, операции с файлами и сетью.
Еще плюсы:
- Как уже говорилось, Cypress хорош для юнит-тестирования, интеграционного и E2E-тестирования, поэтому нравится и разработчикам.
- Писать код в Cypress легко, он JS-ориентированный, и там удобная отладка.
Удобные функции:
- “Возврат во времени”. Делает снепшоты при выполнении тестов.
- Отладка — легко читаемые ошибки и трассировки стеков.
- Автоматическое ожидание. Функция авто-ожидания следующих команд и assertions до перехода на следующий шаг.
- Функциональность “Spies-Stubs-Clocks”. Проверка и контроль функций, времени ответа сервера, и таймеров.
- Контроль трафика. Управление сложными кейсами без обращения к серверу.
- Скриншоты и видео. “Скрины” автоматически записываются при сбое, можно и весь сьют записать в видеофайл в CLI.
- Кроссбраузерное тестирование. Локальный запуск тестов из Firefox и Chrome, и всех браузеров из этих семейств, включая даже редкие Electron и Edge.
Минусы Cypress
Есть и такое!
- Как часто бывает, недостатки являются продолжением достоинств. Cypress на основе JS, значит поддерживает только автоматизацию на JS, что как бы не ОК. Чтобы работать в Cypress, надо довольно-таки хорошо знать этот язык.
- Кроссбраузерное тестирование — не такие широкие возможности как в Selenium (который является эталоном с этой точки зрения).
- Тестирование мобильных версий браузеров или нативных приложений — не может быть автоматизировано в Cypress, и это тоже большой минус.
Что такое Selenium
Selenium — это опенсорсная платформа (фреймворк) для тестирования веб-приложений, поддерживаемая почти всеми возможными платформами и браузерами. Список поддерживаемых языков впечатляет, там даже олдовый Perl, Ruby, не говоря о C#, Python, Java и разумеется JS. Кроме стандартных Windows и Linux, поддерживает Mac OS и даже Solaris!
Зачем нужен Selenium?
- С точки зрения QA Lead. Твой лид скажет: во первых, “Селениум” опенсорсный, и это значит, что он обладает широчайшими возможности модификации “под проект”, и эти возможности используются на 200%.
- Работает на любом браузере и на любой платформе.
- Поддерживает все языки программирования (почти все), то есть в нем может работать практически каждый QA Junior “после курсов”.
- Масштабируемый для любых проектов.
Плюсы Selenium
- Как говорилось выше, “селениум” поддерживает практически все языки программирования, которые видел тестировщик в своей жизни
- И все операционки, в которых он умеет работать
- Поддерживает параллельное выполнение автоматизированных тестов, то есть ускорение тестов
- Доброжелательное комьюнити, где всегда дадут совет
- Хорошо подходит для DevOps и CI, интегрируется с Jenkins и Maven
- Работает в связке с Appium в мобильном тестировании
- Поддерживает тестирование в headless-режиме
Минусы Selenium
В могучем “селениуме” тоже есть минусы, вот:
- Работает только для web-based-приложений. Автоматизации в Windows нет.
- Система репортов не очень хорошо реализована, зависит от TestNG или Cucumber.
- Не идеален для поиска динамических веб-элементов.
- Не умеет автоматизировать капчу и бар-коды
- Не лучший в отработке проблем с нагрузкой на страницу и проблем с синхронизацией. Не лучший в обработке всплывающих окон.
- Есть функция захвата экрана, но, (все еще), тестирование изображений, видео и звука недоступно в Selenium (хотя обещают).
- Требуется довольно-таки умелое владение языками программирования.
- Хорош для тестирования интерфейса, и вообще простейших “массовых” QA-задач, однако не очень подходит для юнит-тестирования, интеграционного тестирования, и тестирования баз данных.
Cypress и Selenium наглядно — для ленивых QA Junior
Cypress | Selenium | |
Архитектура | Работает не “вне браузера”, а “внутри” его. Благодаря Node.js-серверу работает с фронтэндом и бекэндом приложения. Умеет обращаться к Windows-объектам, локальным хранилищам, DeveloperTools в браузере, DOM-дереву. В общем, “это оно” для автоматизации. | Есть специальный Webdriver API, работающий между браузером и драйвером браузера. Вообще, Selenium состоит из 4 “слоев”. JSON-wire-протокол, драйвер браузера, сам браузер, и клиентская библиотека. Да, для каждого браузера нужен свой драйвер. |
Кому подходит | Разработчикам и тестировщикам | Только тестировщикам |
Поддерживает браузеры | Chrome, Firefox, Edge, Brave, Electron | Chrome 12+, Firefox 3+. IE 7-10, Safari 5.1+, Opera 11.5 |
Открытость кода | Опенсорсный, но есть платные фичи | Опенсорсный |
Операционная система | Windows 7+, Mac OS, Linux, Fedora, Debian | Windows, Mac, Linux/Unix |
Языки программирования | Только JavaScript! | JavaScript (Node.js), Python, Ruby, Perl, PHP, Java, Kotlin (да!), C# |
Просто ли поставить | Все достаточно просто, т.к. не зависит от драйвера, и всё нужное идет в установочном пакете | Нужны драйвера для каждого браузера |
Есть ли проблемы с зависимостями | Нет зависимостей от каких-либо драйверов | Зависит от драйверов |
Параллельное тестирование | Да | Да |
Мобильное тестирование | Не поддерживает! | Поддерживает, через Appium |
Кому лучше Cypress и кому Selenium
Если в проекте много юнит-тестирования, интеграционного и E2E-тестирования, то явно лучше Cypress.
Если, как чаще бывает, QA-команда должна протестировать только интерфейс и базовые функции, то лучше Selenium.
Большой минус Cypress — то что он поддерживает только JavaScript, а сейчас заметная часть тестировщиков “после курсов” знают только Python. Коротко: “Селениум” в 2022 остается “народным” инструментом QA, а Cypress для более узких задач.