Casperjs / PhantomJs проти Selenium


150

Ми використовуємо Selenium для автоматизації нашого UIтестування. Останнім часом ми бачили більшість наших користувачів, які використовують Chrome. Тож ми хотіли знати - плюси та мінуси використання PhantomJS vs Selenium:

  • Чи є якась реальна перевага щодо продуктивності, наприклад, час, необхідний для виконання тестових випадків?
  • Коли варто віддати перевагу PhantomJS над селеном?

Відповіді:


183

Вони нападають на різні проблеми. Оскільки PhantomJS ідеально працює в командному рядку, він підходить як перший шар тестування диму, як частина робочого процесу розвитку та / або на сервері безперервної інтеграції. Селен націлений на кілька веб-переглядачів, і тому дуже корисно забезпечити узгодженість між браузерами та провести широкі тестування в різних операційних системах.

Якщо вашій веб-програмі потрібно працювати в різних веб-браузерах, тестування користувальницького інтерфейсу лише з PhantomJS не забезпечить найбільш тестового покриття. Однак, цілком чудово запускати PhantomJS і виконувати деякі основні перевірки стану безпеки перед тим, як робити глибокі тести. Уявіть безумство тестування програми фінансування, коли екран входу ненавмисно зламаний і не функціональний!

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


Дякуємо за відповідь. Будь-яке посилання, яке може допомогти мені зрозуміти, як люди використовують phantomjs для збору статистичних даних про продуктивність у реальному виробничому додатку.
spirit3189

34
Арія Хідаят виглядає творцем PhantomJs
Себастьян Паттен

Здається, що ваш описаний робочий процес починає писати тести з PhantomJS, а потім використовувати Selenium, передбачає повне перезапис тестів ... Чи можете ви використовувати сценарії PhantomJS безпосередньо з Selenium?
lajarre

1
Дякую за приголомшливий PhantomJS, @AriyaHidayat! :)
rinogo

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
Щоб запустити тестовий набір з phantomJS, потрібно 9 хвилин? Це повинно відчувати себе назавжди ...
Кевін

@Kevin Так :) - але HTMLCleaner є стандартним тестом, я відзначаю використання категорій JUnit щоб позначити інші тести як необов'язкові, щоб вони не входили до стандартних одиниць тестів
Марк Батлер

Дякую. Так, я працював над тестами full-js, і вони такі льодовикові - як 15-20 секунд для декількох тестів на сторінку. Можливо, мій масштаб 'льодовикових' потрібно відкоригувати, хоча геге :) Як не дивно, що якщо я це роблю вручну, для проходження форми потрібно лише ~ 5 секунд.
Кевін

1
@lucaswxp Так! І багато інших проектів між ними. Як я пояснюю вище, ідеального вибору немає. У той час я використовував HtmlCleaner, але додав можливість використовувати PhantomJS, якщо потрібна сторінка, яку потрібно витягти.
Марк Батлер

1
@iconoclast Ні - на жаль, попередній роботодавець має IP.
Марк Батлер

2

Використовуючи потужність і селену, і PhantomJS PhantomJS має беззвукові можливості браузера, тому добре використовувати його як один із браузерів із селеном (крім традиційних браузерів, таких як IE, Chrome тощо). Переваги такого підходу:

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

1

проблеми, з якими я стикався під час використання PhantomJS:

Моя заявка складала ціни на веб-додаток:

  1. У якийсь момент локатори, які добре працювали на хромованому браузері, не працюють на phantomJS.
  2. Іноді під час виконання подвійного клацання або клацання контексту за селеном мені доводиться ставити додаткову перевірку для перевірки операцій coz, спочатку це не клацання.
  3. Постійність кешу та файлів cookie. Після того як вийти з системи, а потім увійти, дані залишаються в кеші. | Отже, ми виконуємо тест на хром.
  4. Одне з найважливіших проблем, які я знайшов, "Виправлення файлу". Ми не можемо завантажити файл у браузер phantomJs у нашій програмі. Ми спробували багато речей javascriptexcutor, jqueries, але жодна з них не працювала взагалі. Тому ми також виконуємо цей тест на Chrome. Примітка. Ми широко використовували функції JavaScript у нашій рамках для взаємодії з веб-елементом для PhantomJS. Одне впевнене, що часу виконання у PhantomJS значно менше. Тож від пріоритету клієнта залежить, чи хоче він функціональності / продуктивності, а потім піде з ним. Якщо ви хочете перевірити сценарій кінця до кінця, тоді перейдіть на хром.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.