Casperjs / PhantomJs против Selenium


150

Мы используем Selenium для автоматизации нашего UIтестирования. В последнее время мы видели, как большинство наших пользователей используют Chrome. Итак, мы хотели знать - плюсы и минусы использования PhantomJS против Selenium:

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

Ответы:


183

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

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

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


Спасибо за ответ. Любая ссылка, которая может помочь мне понять, как люди используют phantomjs для сбора статистики о производительности в реальном производственном приложении.
spirit3189

34
Ария Хидаят, кажется, является создателем PhantomJs
Себастьян Паттен

Кажется, что описанный вами рабочий процесс - начало написания тестов с использованием PhantomJS и последующего использования Selenium предполагает полное переписывание тестов ... Не могли бы вы использовать сценарии PhantomJS напрямую с Selenium?
Ладжарре

1
Спасибо за потрясающий PhantomJS, @AriyaHidayat! :)
риного

49

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

Это очень сильно.

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


41

В настоящее время я пишу фреймворк для веб-извлечения. У меня есть 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. Более того, я могу запустить его на своем компьютере разработчика, он не «захватит мою машину», запустив несколько браузеров, чтобы я мог приступить к работе.

Я очень рекомендую PhantomJS.


1
Требуется 9 минут, чтобы запустить ваш набор тестов с phantomJS? Это должно быть навсегда ...
Кевин

@Kevin Да :) - но HTMLCleaner - это стандартный тест, я отмечаю использование категорий JUnit, чтобы пометить другие тесты как необязательные, чтобы они не были частью стандартных модульных тестов
Марк Батлер,

Спасибо. Да, я работал над тестами full-js, и они такие ледяные, как 15-20 секунд для теста на несколько страниц. Возможно, моя шкала «ледниковых» должна быть скорректирована, хотя хе-хе :) Странно, хотя, если я делаю это вручную, это займет всего ~ 5 секунд, чтобы просмотреть формы.
Кевин

1
@lucaswxp Да! И много других проектов между ними. Как я объясняю выше, идеального выбора не существует. В то время я использовал HtmlCleaner, но добавил опцию для использования PhantomJS, если это нужно для извлекаемой страницы.
Марк Батлер,

1
@iconoclast Нет - к сожалению - предыдущий работодатель имеет IP.
Марк Батлер

2

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

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

1

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

Мое приложение было ценовым веб-приложением:

  1. В какой-то момент локаторы, которые нормально работали в браузере chrome, не работают в phantomJS.
  2. Иногда при выполнении двойного щелчка или контекстного щелчка по селену я должен поставить дополнительную проверку для проверки операций, потому что сначала он не щелкает.
  3. Постоянство кэша и файлов cookie. После этого выйдите из системы, а затем войдите в систему, данные останутся в кеше. | Поэтому мы проводим тест на хром.
  4. Одной из самых важных проблем, которые я нашел, была проблема с загрузкой файлов. Мы не можем загрузить файл в браузер phantomJs в нашем приложении. Мы пробовали много вещей javascriptexcutor, jqueries, но ни одна из них не работала вообще. Поэтому мы также проводим этот тест на Chrome. Примечание. Мы широко использовали функции javascript в нашей среде для взаимодействия с веб-элементом для PhantomJS. Одна вещь уверена, что время выполнения в PhantomJS очень меньше. Таким образом, зависит от приоритета клиента, хочет ли он функциональность / производительность, а затем идти с ним. Если вы хотите протестировать сценарий от начала до конца, перейдите на Chrome.
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.