Рубрики
Без рубрики

Pytest vs Cypress: справедливый бой в тестировании пользовательского интерфейса?

Битва за сквозные рамки тестирования. Tagged с Pytest, Selenium, Python.

Прямо сейчас мы наблюдаем наибольшее нарушение индустрии автоматизации тестов, которую мы когда -либо видели. Разрабатываются новые инструменты, а существующие инструменты получают значительные улучшения. Сегодня давайте поговорим о двух основных тестовых рамках, в которых много пользователей в соответствии с GitHub:

Некоторые из вас уже могут быть знакомы с кипарис : Известная структура для сквозного тестирования. В отличие от Cypress, pytest в основном известен как просто является единичным тестированием структуры (для Python). Менее известно о Pytest, что у него есть основная экосистема плагина для расширения своих способностей. Точно так же, как у Бэтмена есть ремень для инструментов, чтобы позволить ему делать то, что он не может сделать своими голыми руками, pytest Имеет плагины, чтобы позволить ему сделать гораздо больше, например, тестирование браузера, многопоточные тесты и создание отчетов о тестировании. Прежде чем мы сможем перейти в pytest против Кипарис Сравнение, давайте поговорим о важном компоненте, необходимом для тестирования пользовательского интерфейса с Pytest, который является Селен Библиотека автоматизации браузера.

В прошлом вы, вероятно, слышали о сравнениях, проводимых между Кипарис и Селен Анкет Это необработанное сравнение могло быть не справедливым, потому что Селен четко заявляет на своем веб -сайте: «Селена автоматизирует браузеры. Вот и все! То, что вы делаете с этой силой, полностью зависит от вас ». (Источник: selenium.dev ) Нигде на их веб -сайте Selenium не говорил что -либо, например, они «полная структура тестирования» и т. Д. Они специально хотели дать разработчикам и инженерам автоматизации тестирования возможность создавать свои собственные тестовые рамки, которые используют селен . Более справедливым сравнением будет Cypress vs тестовой рамки, которая использует селен.

Перенесемся на сегодня: Многие компании хотят пройти много тестирования очень быстро, но у них нет времени для создания полной структуры тестирования пользовательского интерфейса для их тестирования. Это привело к большому количеству угловых вырезов (он же неаккуратный код) и ложной вине против совершенно солидных библиотек автоматизации, которые отлично работают при правильном использовании. При использовании необработанных методов селена, если вы попытаетесь взаимодействовать с элементами страниц, которые не полностью загружаются (или элементы, которые не были повторно обоснованы после перезагрузки страницы), вы можете увидеть подобные ошибки:

  • Noschelementexception
  • ElementNotvisibleException
  • MovetargetOutOfBoundSexception
  • StaleElementReferenceException
  • ElementNotInterActableException

Эти ошибки полностью предотвратить, если ваша тестовая структура обертывает Селен Методы с соответствующим кодом, которые можно полностью взаимодействовать с интеллектуальными ожиданиями для элементов страницы (или Timeout/Fail Test, если элемент все еще не отображается после установленного количества секунд). Хорошей новостью является то, что тестовая структура с Selenium Smart-waiting уже существует как pytest плагин: Seleniumbase !

Seleniumbase Затчивает разрыв между питест и Селен для тестирования пользовательского интерфейса. С Pytest у вас есть платформа для тестирования модуля без встроенного компонента веб-автоматизации. С Selenium у вас есть библиотека веб-автоматизации без встроенной тестовой структуры. Обе стороны моста долгое время были очень популярны и очень мощными, но теперь есть особый мост, который плавно объединяет две стороны в одном очень мощном, но простых, упаковке. И этот пакет, Seleniumbase , существует как плагин Pytest, который эффективно использует библиотеку селена.

Вот пример Seleniumbase тест:

from seleniumbase import BaseCase

class MyTestClass(BaseCase):
    def test_basic(self):
        self.open("https://store.xkcd.com/search")
        self.type(, "xkcd book\n")
        self.assert_text("xkcd: volume 0", "h3")
        self.open("https://xkcd.com/353/")
        self.assert_title("xkcd: Python")
        self.assert_element()
        self.click()
        self.assert_text("free to copy and reuse")
        self.go_back()
        self.click_link_text("About")
        self.assert_exact_text("xkcd.com", "h2")

Этот тест из последней версии SeleniumBase/Примеры/my_first_test.py , который вы можете запустить с помощью pytest:

pytest my_first_test.py

Как видите, очень легко открыть URL, ввести текст, щелкнуть и утверждать различные элементы на странице. Для более продвинутого примера (с парящими раскрыванием, iframes, выбора параметров, ползунков, поиска сломанных ссылок и обнаружения ошибок JavaScript), см. SeleniumBase/Примеры/test_demo_site.py

Теперь давайте сравним это с Кипарис пример:

describe('My First Test', () => {
  it('Gets, types and asserts', () => {
    cy.visit('https://example.cypress.io')
    cy.contains('type').click()
    cy.url().should('include', '/commands/actions')
    cy.get('.action-email')
      .type('fake@email.com')
      .should('have.value', 'fake@email.com')
  })
})

Помимо очевидных различий в том, что тесты на кипарики написаны в JavaScript, а тесты SeleniumBase записаны на Python, вы увидите, что оба примера написаны с использованием простого кода, оба примера просты, и оба примера выполняются надежно.

Для отчетов о тестировании:

  • Кипарис имеет Cypress Dashboard Service Анкет
  • pytest имеет pytest-html плагин, который Seleniumbase Модифицируется, чтобы включить скриншоты неудачных тестов в тот момент, когда они потерпели неудачу:

SeleniumBase не имеет собственной сервисы панели инструментов, но вы можете легко запустить свои тесты SeleniumBase из любой облачной службы, которую вы желаете. Для проектов с открытым исходным кодом я лично использовал три бесплатных инструмента: сначала TRAVIS-CI, затем Azure Tipвей и, наконец, GitHub, которые позволяют вам сохранить все свои результаты работы и испытания в GitHub. Вот пример результатов SeleniumBase из действий GitHub:

При использовании SeleniumBase для тестирования приложений, которые не являются открытым исходным кодом, я в основном использовал Jenkins. Если вы выполняете автоматизацию тестов на ограниченный бюджет для проектов с закрытым исходным кодом, наиболее экономически эффективным решением Дженкинса, которое я обнаружил до сих пор Google Cloud от 13,61 доллара США в месяц экземпляр Bitnami Jenkins , который поддерживает неограниченных пользователей и неограниченные тестовые прогоны (ограниченные только его процессором, что достаточно для обработки пяти одновременных тестов браузера без какого -либо заметного отставания). Что касается тестов кипариса, они также могут быть запускаются с действиями GitHub и на Дженкинсе.

Теперь, когда мы рассмотрели основы, давайте перейдем к ограничениям, когда дело доходит до Cypress vs Pytest. У Cypress на самом деле есть страница на своем веб-сайте, посвященную его ограничениям, также известным как «компромиссы»: docs.cypress.io -> trogrofs.html Анкет

Эти Ограничения кипариса включают:

  • Ограниченная поддержка Iframe.
  • Нет нескольких вкладок.
  • Нет нескольких браузеров одновременно.
  • Каждый тест связан с одним доменом происхождения.
  • Отсутствует мобильная поддержка.
  • Не инструмент автоматизации общего назначения.

С pytest и seleniumbase , все следующие функции существуют:

  • Полная поддержка iframe.
  • Откройте столько вкладок, сколько хотите в тестах.
  • Откройте столько браузеров, сколько хотите в тестах.
  • Нет ограничений на навигацию по мультиоригинам.
  • Использует эмулятор мобильных устройств Chrome для мобильных тестов.
  • Можно использовать для автоматизации общего назначения.

Единственное ограничение с Seleniumbase это то, что вы должны использовать Python ! (И для пользователей Python это не ограничение … это функция!) Хорошая новость в том, что: Вы также можете совершать вызовы JavaScript с помощью Seleniumbase! Это сделано с:

self.execute_script(JAVASCRIPT)

Эта способность выполнять JavaScript внутри Seleniumbase Python Scripts привела к некоторым мощным новым функциям, таким как Builder Tour Secult, который является частью Seleniumbase ( Узнайте больше о тур-строителе Seleniumbase здесь ):

Что касается мобильного режима Seleniumbase, просто добавьте: -Mobile к команде Pytest Run of Come Cyse Test Seleniumbase для запуска его с помощью эмулятора мобильного устройства Chrome:

Самый быстрый способ начать работу с SeleniumBase – это клонировать его от GitHub, чтобы вы могли запустить все включенные примеры тестов, но вы также можете установить SeleniumBase из Pypi с PIP, затем сделайте: Seleniumbase Mkdir test_folder Чтобы создать папку в любом месте, которая включает в себя примеры тестов для запуска.

В то время, когда эта статья была опубликована, последняя версия SeleniumBase была «v1.40.2», поэтому, если вы используете более старую версию SeleniumBase, некоторые из упомянутых здесь функций могут не существовать до тех пор, пока вы не обновите.

Вот некоторые ссылки на материал, обсуждаемые в этой статье:

Теперь, когда у вас была возможность взглянуть как на Cypress, так и на Pytest (с плагином Seleniumbase), вы должны сами решить, куда идти отсюда. Я, конечно, предвзятый (будучи разработчиком Python). Я начал изучать Python в 2008 году в компании под названием ITA Software, которая позже была приобретена Google. И я начал изучать селен в 2011 году в компании под названием HubSpot, которая финансировала создание тестовой структуры, которую я позже переименовался в Seleniumbase В 2014 году после того, как проект получил разрешение на открытый источник. (Виктори: я выбрал название «Селенбаза» в тот день, когда Google приобрела Firebase. Я слышал об этом приобретении в новостях, и мне понравился звук «Firebase», поэтому я взял эту идею и добавил «базу» на «селен», и с тех пор это стало именем структуры.)

Я надеюсь, что вы получили несколько ключевых выводов из этой статьи: в основном, что при правильном использовании Селен это здорово для тестирования пользовательского интерфейса. Когда в паре вместе с pytest (и хороший “мост” как seleniumbase ), Селен Еще более потрясающе. Люди потратили много времени несправедливо Попытка заменить селен, когда в действительности все, что им нужно было сделать, это заменить стратегию реализации.

Спасибо обоим pytest и Селен Команды за всю тяжелую работу, которую вы проделали при создании отличных инструментов тестирования. Вот крик некоторым из основных участников этих проектов: Саймон Стюарт , Бруно Оливейра , Джим Эванс , Ронни Пфанншмидт , Дэвид Бернс , Флориан Брухин , Дэйв Хант , Джейсон Хаггинс , Диего Молина и много других ключевых участников, которых я не перечислил здесь. В пространстве автоматизации тестирования всегда будет конкуренция, но вместе мы можем продолжать создавать наследие для инженеров по автоматизации тестирования сегодня и будущего.

Оригинал: “https://dev.to/mintzworld/pytest-vs-cypress-a-fair-fight-in-ui-testing-3mhk”