Мы используем Selenium для автоматизации нашего UIтестирования. В последнее время мы видели, как большинство наших пользователей используют Chrome. Итак, мы хотели знать - плюсы и минусы использования PhantomJS против Selenium:
Есть ли какое-то реальное преимущество с точки зрения производительности, например, времени, затраченного на выполнение тестовых случаев?
Когда следует отдавать предпочтение PhantomJS над Selenium?
Они атакуют разные проблемы. Поскольку 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 и т. Д.
В настоящее время я пишу фреймворк для веб-извлечения. У меня есть 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. Более того, я могу запустить его на своем компьютере разработчика, он не «захватит мою машину», запустив несколько браузеров, чтобы я мог приступить к работе.
Требуется 9 минут, чтобы запустить ваш набор тестов с phantomJS? Это должно быть навсегда ...
Кевин
@Kevin Да :) - но HTMLCleaner - это стандартный тест, я отмечаю использование категорий JUnit, чтобы пометить другие тесты как необязательные, чтобы они не были частью стандартных модульных тестов
Марк Батлер,
Спасибо. Да, я работал над тестами full-js, и они такие ледяные, как 15-20 секунд для теста на несколько страниц. Возможно, моя шкала «ледниковых» должна быть скорректирована, хотя хе-хе :) Странно, хотя, если я делаю это вручную, это займет всего ~ 5 секунд, чтобы просмотреть формы.
Кевин
1
@lucaswxp Да! И много других проектов между ними. Как я объясняю выше, идеального выбора не существует. В то время я использовал HtmlCleaner, но добавил опцию для использования PhantomJS, если это нужно для извлекаемой страницы.
Марк Батлер,
1
@iconoclast Нет - к сожалению - предыдущий работодатель имеет IP.
Марк Батлер
2
Используя мощь Selenium и PhantomJS
PhantomJS обладает возможностями автономного браузера, поэтому полезно использовать его в качестве одного из браузеров с селеном (в дополнение к традиционным браузерам, таким как IE, Chrome и т. Д.). Преимущества этого подхода:
Может использоваться для выполнения Sanity для веб-приложений в CI (даже если на компьютерах агентов нет IE или chrome), тесты будут работать эффективно.
Некоторые команды разработчиков используют этот подход, чтобы получить быстрые результаты и потребляют меньше времени и ресурсов.
Самая большая особенность фантомного JS - это захват экрана, выполнение параллельных тестов с использованием многопоточности, что значительно сократит ваше время выполнения.
проблемы, с которыми я столкнулся при использовании PhantomJS:
Мое приложение было ценовым веб-приложением:
В какой-то момент локаторы, которые нормально работали в браузере chrome, не работают в phantomJS.
Иногда при выполнении двойного щелчка или контекстного щелчка по селену я должен поставить дополнительную проверку для проверки операций, потому что сначала он не щелкает.
Постоянство кэша и файлов cookie. После этого выйдите из системы, а затем войдите в систему, данные останутся в кеше. | Поэтому мы проводим тест на хром.
Одной из самых важных проблем, которые я нашел, была проблема с загрузкой файлов. Мы не можем загрузить файл в браузер phantomJs в нашем приложении. Мы пробовали много вещей javascriptexcutor, jqueries, но ни одна из них не работала вообще. Поэтому мы также проводим этот тест на Chrome. Примечание. Мы широко использовали функции javascript в нашей среде для взаимодействия с веб-элементом для PhantomJS. Одна вещь уверена, что время выполнения в PhantomJS очень меньше. Таким образом, зависит от приоритета клиента, хочет ли он функциональность / производительность, а затем идти с ним. Если вы хотите протестировать сценарий от начала до конца, перейдите на Chrome.
Благодаря недавней интеграции с WebDriver (как заметил Ария), теперь вы можете использовать Selenium для управления PhantomJS.
Это очень сильно.
Вы можете запускать набор полностью автоматизированных тестов Selenium (используя PhantomJS в качестве реализации WebDriver) через CI на автономном Unix-сервере при каждой регистрации. Затем, если вы хотите проверить совместимость браузера, вы можете запустить свои тесты локально, изменив базовую реализацию WebDriver на Chrome, Firefox и т. Д.
источник
В настоящее время я пишу фреймворк для веб-извлечения. У меня есть 524 теста, которые получают данные с 250 веб-сайтов, используя XPath. Изначально в фреймворке использовался анализатор HTML, HTMLCleaner, но в настоящее время я изучаю использование Selenium, потому что мне нужна поддержка Javascript. Я провел тесты с драйверами HtmlUnit, Chrome, Firefox и PhantomJS . Вот сравнение времени и количества неудач для каждого подхода:
Некоторые комментарии:
В некоторых случаях «сбои» могут вообще не быть сбоями, возможно, что экстракторы дают сбой, потому что Javascript переписывает DOM. Я нахожусь в процессе анализа неудач, чтобы найти причину.
Тем не менее, HtmlUnit является самым быстрым драйвером Selenium, но он также ненадежен. Эта ненадежность касается не только Javascript, существуют проблемы с обработкой «грязного, грязного, реального» HTML, потому что что-то не работает в алгоритме балансировки тегов. По этому поводу возникло несколько проблем, но они не были исправлены - см. HTML-UNIT 1423 и HTML-UNIT 1046 .
Firefox - самый медленный драйвер Selenium, хотя я отключаю загрузку изображений и таблицы стилей. Это связано с тем, что он загружается и инициализируется медленнее, что делает его значительно медленнее, чем в Chrome, и каждый раз при сбое извлечения мне нужно перезагружать драйвер (в тестах я создаю пул из 5 драйверов, чтобы уменьшить задержки при извлечении URL для всех веб-драйверы Selenium).
PhantomJS достигает лучшей точности, чем Firefox, немного ниже, чем Chrome, но примерно в два раза быстрее, чем Firefox. Более того, я могу запустить его на своем компьютере разработчика, он не «захватит мою машину», запустив несколько браузеров, чтобы я мог приступить к работе.
Я очень рекомендую PhantomJS.
источник
Используя мощь Selenium и PhantomJS PhantomJS обладает возможностями автономного браузера, поэтому полезно использовать его в качестве одного из браузеров с селеном (в дополнение к традиционным браузерам, таким как IE, Chrome и т. Д.). Преимущества этого подхода:
источник
проблемы, с которыми я столкнулся при использовании PhantomJS:
Мое приложение было ценовым веб-приложением:
источник