Когда вашу команду просят действовать быстро и ломать вещи, методологическая чистота может быстро уступить место прагматизму на скорость спринта. Однако эта фраза - некогда кредо Facebook - не означает, что мы можем рисковать в отделе контроля качества. Это действительно наставление для нас открывать глаза на новые возможности вместо того, чтобы закрывать их и молиться о том, чтобы все оставалось по-прежнему. Что-то вроде призыва к подрыву и стремлению пробовать (и, если необходимо, отказываться) от чего-то нового.
Какое все это имеет отношение к тестированию и контролю качества?
Немного. По нашему опыту, QA - одна из самых медленных дисциплин в сфере разработки. Это касается как предложения, так и спроса на рынке. Новые технологии тестирования редко вообще выходят на рынок. И в то же время у продуктовых команд не так уж часто есть возможности, время и желание искать новые инструменты. Это неудивительно, поскольку у многих команд QA есть корпус тестовых библиотек, о котором они просто не могут забыть.
Все это лишь воодушевляет вас познакомиться с фреймворком для тестирования под названием Cypress, который встревожил бы Selenium, лидера рынка. Вы могли слышать об этом. С точки зрения времени Cypress только что покинул бета-версию, и мы подумали, что это подходящий момент, чтобы противопоставить очень разные подходы, используемые этими двумя фреймворками. В этом посте мы рассмотрим их основные отличия, большинство из которых связано с меньшим набором дизайнерских решений, сделанных разработчиками.
Ускоренный курс истории
Selenium был первоначально разработан в 2004 году Джейсоном Хаггинсом и с тех пор поддерживается и обновляется, чтобы соответствовать технологическим изменениям. Попутно вокруг этой технологии сформировалась супер-команда. Cypress разработан Брайаном Манном и его не менее супер-командой, и его первая фиксация произошла чуть более четырех лет назад. И Selenium, и Cypress теперь имеют открытый исходный код.
Архитектура
С архитектурной точки зрения эти два понятия являются полярными противоположностями, и именно эти архитектурные различия, скорее всего, повлияют на ваши предпочтения, а не на что-либо еще.
Selenium состоит из компонента под названием WebDriver, который может управлять (конкретным) браузером и управлять им, вместе с набором привязок, которые определяют, на каком языке написаны ваши тесты. Когда тесты выполняются, задействованы как минимум три процесса:
- WebDriver
- Драйвер браузера
- Сам браузер
Известно, что накладные расходы сети между этими процессами замедляют выполнение теста. Даже если у вас все работает на одном компьютере, эта сетевая нагрузка сохраняется - локально Selenium использует интерфейс обратной связи 127.0.0.1.
Cypress использует другой подход и представляет собой единое монолитное приложение - единственный выбор, который вам нужно сделать, - это установить ли вы его через npm или в автономном режиме. Выбор npm дает вам доступ к остальной части его экосистемы внутри вашего набора тестов - действительно, за Cypress стоит серверный процесс Node.js (который в автономном режиме встроен). Большинство людей выбирают маршрут npm, но автономный режим может подойти для краткого визита во время его оценки.
Cypress запускает тесты внутри самого браузера и имеет доступ к DOM и даже к тестируемому приложению, конфигурация, которая настраивает, среди прочего, на невероятную скорость. Не забывайте, однако, что наличие этого внутреннего процесса Node.js означает, что он также может работать вне браузера для задач, требующих более высоких привилегий. Это говорит о том, что для связи с внутренними процессами, такими как база данных или другой сервер, требуется небольшая дополнительная работа.
Этот компромисс означает, что Cypress может поддерживать только JavaScript и никогда не будет поддерживать что-либо еще, в то время как Selenium в настоящее время имеет привязки для Java, C #, Ruby, Python и JavaScript (node), который в настоящее время находится в Alpha. А для некоторых это станет убийственной функцией и вполне может быть причиной того, что некоторым командам придется сразу отказаться от Cypress.
Flake
Нестандартные тесты - тесты, которые могут пройти или не пройти в одном и том же состоянии приложения - это проклятие тестировщиков и QA-инженеров. Cypress объединяет все запросы DOM с помощью логики повторных попыток и тайм-аута, которая, по утверждениям ее разработчиков, лучше работает для реальных веб-приложений, что приводит к значительному сокращению тестовых хлопьев.
Команда Cypress также утверждает, что, несмотря на впечатляющую эволюцию Selenium для поддержки современного Интернета, поддержка Cypress современных асинхронных одностраничных приложений делает его более естественным для текущих рабочих процессов разработки и шаблонов проектирования приложений.
Код, библиотеки и адаптация
И Selenium, и Cypress требуют, чтобы вы писали тесты на языке программирования. Это может показаться очевидным, но есть некоторые продукты для тестирования, которые используют другие модели, например, с помощью тестовых рекордеров на основе графического интерфейса. В случае Cypress этим языком должен быть JavaScript. Помимо языковых войн, Selenium предлагает выбор и, правильно, больше похожа на библиотеку, чем на фреймворк вроде Cypress. Selenium продолжает хорошо интегрироваться со многими фреймворками модульного тестирования и библиотеками утверждений, в то время как с Cypress выбор ограничен Mocha, Chai и Sinon.
Таким образом, сразу начать работу с Cypress проще, потому что все уже упаковано. Selenium требует немного большей подготовки и размышлений о том, какие сопутствующие технологии лучше всего подходят для вашего варианта использования. Это не большая лежачая полицейская, но она может иметь значение, особенно когда вы пытаетесь оценить несколько вариантов.
Отладка
Cypress нацелен непосредственно на разработчиков и QA-инженеров и имеет отличную историю отладки. Поскольку он выполняется в том же цикле выполнения, что и приложение, он имеет доступ к переменным, коду и вещам, которые браузер делает доступными, такими как документ, окно и отладчик. Как только вы познакомитесь с его асинхронной природой, вам будет несложно перейти к отладчику. Он также делает автоматические снимки DOM и позволяет вам «путешествовать во времени» к более ранним состояниям приложения, если вы выискиваете ошибку в своих тестовых сценариях.
С WebDriver / Selenium отладка не особенно интуитивна. Когда вы сталкиваетесь с проблемами, все, что вы получаете, - это ответ об ошибке HTTP после выполнения всех тестов. На этом этапе ваше приложение исчезло, а браузер закрыт, но вам нужно каким-то образом интуитивно понять причину этой ошибки HTTP. Это может расстраивать.
Суть
Слова и сравнения списков, кажется, не соответствуют ни одному из этих замечательных решений для тестирования. Вы должны испытать их в контексте ваших собственных потребностей. То, что для некоторых может быть показательным отсутствием функции или архитектурной причудой, для других может вообще не иметь никакого значения или даже быть преимуществом.
Конечно, мы очень рады, что появление Cypress означает, что впервые за много лет в городе появилась еще одна игра с открытым исходным кодом для автоматического тестирования. Но нет никаких сомнений в том, что Selenium - замечательная история успеха и останется жизненно важной для многих в обозримом будущем - он сглаживает несколько зияющих дыр в текущих возможностях Cypress, таких как кроссбраузерное тестирование и поддержка нескольких языков.
Если ваша команда использует Selenium, мы не можем сказать вам, следует ли вам перейти на Cypress, но мы можем сказать вам, что вы должны выпрашивать, брать взаймы или украсть время, чтобы проверить это. Затем попробуйте по-настоящему, возможно, на небольшой, четко определенной функции нового продукта, а не на своем полном приложении. Может быть, в конечном итоге разумным решением будет использование обеих технологий?
Продолжать. Двигайся быстрее. Сломайте вещи.