Касперж/Фантомс против Селена

Мы используем Selenium для автоматизации тестирования UI. Недавно мы видели большинство наших пользователей, использующих Chrome. Поэтому мы хотели знать - за и против использования PhantomJS vs Selenium:

  • Есть ли реальные преимущества с точки зрения производительности, например. время, затраченное на выполнение тестовых случаев?
  • Когда следует отдать предпочтение PhantomJS над селеном?

Ответ 1

Они атакуют разные проблемы. Поскольку PhantomJS отлично работает в командной строке, он подходит как первый уровень тестирования дыма, будь то в рамках рабочего процесса разработки и/или на сервере непрерывной интеграции. Selenium нацеливается на несколько браузеров, и поэтому очень полезно обеспечить согласованность между браузерами и проводить обширные проверки в разных операционных системах.

Если ваше веб-приложение нужно запускать в различных веб-браузерах, запуск тестирования пользовательского интерфейса только с помощью PhantomJS не даст наибольшего охвата тестирования. Тем не менее, совершенно нормально запускать PhantomJS и выполнять некоторые основные проверки здравомыслия, прежде чем делать углубленные тесты. Представьте себе безумие тестирования приложения для финансирования, когда экран входа в систему непреднамеренно нарушен и не работает!

Обратите внимание, что линия между ними немного размывается недавней поддержкой WebDriver в последней версии PhantomJS. Теперь можно быстро запустить тесты сначала с помощью PhantomJS, а затем (при отсутствии серьезной ошибки) продолжать выполнять те же тесты в настройке Selenium.

Ответ 2

С недавней интеграцией WebDriver (как отметила Ария) теперь вы можете использовать Selenium для управления PhantomJS.

Это очень мощно.

Вы можете запустить набор полностью автоматизированных тестов Selenium (используя PhantomJS в качестве реализации WebDriver) через ваш CI на безголовом Unix-сервере при каждой регистрации. Затем, если вы хотите проверить совместимость с браузером, вы можете запустить свои тесты локально, изменив базовую реализацию WebDriver на Chrome, Firefox и т.д.

Ответ 3

В настоящее время я пишу веб-фреймворк. У меня есть 524 теста, которые получают данные из 250 сайтов с использованием XPath. Первоначально структура использовала HTML-парсер, HTMLCleaner, но в настоящее время я изучаю с помощью Selenium, потому что я хочу поддержку Javascript. Я проверил тесты против драйверов HtmlUnit, Chrome, Firefox и PhantomJS. Ниже приведено сравнение времени и количества отказов для каждого подхода:

                    Failures    Time (secs) 
HtmlCleaner         0           82  
HtmlUnit            169         102 
Google Chrome       38          562 
Firefox             46          1159    
PhantomJS           40          575

Некоторые комментарии:

  • В некоторых случаях "сбои" могут вообще не быть отказами, это может быть что экстракторы не работают, потому что Javascript переписывает DOM. Я нахожусь в процессе анализа неудач, чтобы найти причину.

  • Тем не менее, HtmlUnit является самым быстрым драйвером Selenium, но он также ненадежен. Эта ненадежность касается не только Javascript, но и проблем с обработкой "грязного, грязного, реального" HTML, потому что что-то кажется нарушенным в алгоритме балансировки тегов. Несколько вопросов были подняты по этому поводу, но они не были исправлены - см. HTML-UNIT 1423 и HTML-UNIT 1046.

  • Firefox - самый медленный драйвер Selenium, хотя я отключил загрузку изображений и таблицы стилей. Это связано с тем, что он является самым медленным для загрузки и инициализации, что делает его значительно медленнее, чем Chrome, и каждый раз при сбое в извлечении данных мне нужно перезагрузить драйвер (в тестах я создаю пул из 5 драйверов, чтобы уменьшить задержки на поиск URL-адресов для всех веб-драйверы Selenium).

  • PhantomJS обеспечивает лучшую точность, чем Firefox, немного ниже, чем Chrome, но примерно в половине случаев Firefox. Более того, я могу запустить его в своем блоке dev, он не "захватит мой компьютер", запустив несколько браузеров, чтобы я мог продолжить работу.

Я бы очень рекомендовал PhantomJS.

Ответ 4

Использование мощности как селена, так и фантома      PhantomJS имеет безгласные возможности браузера, поэтому хорошо использовать его как один из браузеров с селеном (в дополнение к традиционным браузерам, таким как IE, Chrome и т.д.), Преимущества такого подхода:

  • Может использоваться для выполнения Sanity для веб-приложений в CI (даже если машины-агенты не имеют IE или хром), тесты будут эффективно работать.
  • Некоторые команды разработчиков используют этот подход для получения быстрых результатов и потребляют меньше времени и ресурсов.
  • Самая большая особенность phantom JS - это захват экрана, запуск параллельных тестов с использованием многопоточности, что значительно сократит время выполнения.

Ответ 5

проблемы, с которыми я столкнулся при использовании PhantomJS:

В моем приложении было веб-приложение для оценки:

  • В какой-то момент локаторы, которые отлично работали в браузере Chrome, не работают на phantomJS.
  • Иногда при выполнении двойного щелчка или контекста нажмите selenium, я должен поставить дополнительную проверку для проверки операций coz на первом месте это не щелчок.
  • Сохранение кеша и cookie. После выхода из системы и последующего входа данные остаются в кеше. | Поэтому мы выполняем тест на хроме.
  • Одна из самых важных проблем, которые я нашел "Проблема с загрузкой файлов". Мы не можем загрузить файл в браузере phantomJs в нашем приложении. Мы много пробовали javascriptexcutor, jqueries, но ни один из них не работал вообще. Поэтому мы также выполняем этот тест в Chrome. Примечание. Мы широко использовали функции javascript в нашей структуре для взаимодействия с веб-элементом для PhantomJS. Одно можно сказать, что время исполнения в PhantomJS очень мало. Таким образом, это зависит от приоритета клиента, хочет ли он Функциональность/Производительность тогда смирись с этим. Если вы хотите протестировать сценарий от конца до конца, перейдите к хром.