Nous utilisons Selenium pour automatiser nos UItests. Récemment, nous avons vu la majorité de nos utilisateurs utiliser Chrome. Nous voulions donc savoir - avantages et inconvénients de l'utilisation de PhantomJS vs Selenium:
Y a-t-il un réel avantage en termes de performances, par exemple le temps nécessaire pour exécuter les cas de test?
Ils s'attaquent à différents problèmes. Étant donné que PhantomJS fonctionne parfaitement sur la ligne de commande, il convient comme première couche de test de fumée, que ce soit dans le cadre d'un workflow de développement et / ou dans un serveur d'intégration continue. Selenium cible plusieurs navigateurs et il est donc très utile de garantir la cohérence entre les navigateurs et d'effectuer des tests approfondis sur différents systèmes d'exploitation.
Si votre application Web doit s'exécuter sur divers navigateurs Web, l'exécution des tests d'interface utilisateur uniquement avec PhantomJS ne donnera pas la plus grande couverture de test. Cependant, il est parfaitement normal de lancer PhantomJS et d'effectuer quelques vérifications de base avant de faire les tests approfondis. Imaginez la folie de tester une application financière où l'écran de connexion est accidentellement cassé et non fonctionnel!
Notez que la ligne entre les deux est légèrement floue avec la prise en charge récente de WebDriver dans le dernier PhantomJS. Il est maintenant possible d'exécuter rapidement les tests d'abord en utilisant PhantomJS, puis (en supposant qu'aucune erreur sérieuse ne se soit produite) de continuer à exécuter les mêmes tests à fond dans une configuration Selenium.
Merci pour la réponse, tout lien qui peut m'aider à comprendre comment les gens utilisent phantomjs pour collecter des statistiques liées aux performances dans une application de production réelle.
spirit3189
34
Ariya Hidayat semble être la créatrice de PhantomJs
Sebastian Patten
Il semble que votre workflow décrit de commencer à écrire des tests avec PhantomJS puis utiliser Selenium suppose une réécriture totale des tests ... Pourriez-vous utiliser les scripts PhantomJS directement avec Selenium?
lajarre
1
Merci pour le génial PhantomJS, @AriyaHidayat! :)
rinogo
49
Avec la récente intégration WebDriver (comme Ariya l'a noté), vous pouvez désormais utiliser Selenium pour piloter PhantomJS.
C'est extrêmement puissant.
Vous pouvez exécuter un ensemble de tests Selenium entièrement automatisés (en utilisant PhantomJS comme implémentation WebDriver) via votre CI sur un serveur Unix sans tête à chaque enregistrement. Ensuite, si vous souhaitez tester la compatibilité du navigateur, vous pouvez exécuter vos tests localement en modifiant l'implémentation WebDriver sous-jacente en Chrome, Firefox, etc.
J'écris actuellement un framework d'extraction web. J'ai 524 tests qui obtiennent des données de 250 sites Web utilisant XPath. Initialement, le framework utilisait un analyseur HTML, HTMLCleaner, mais j'étudie actuellement en utilisant Selenium parce que je veux le support Javascript. J'ai exécuté les tests avec les pilotes HtmlUnit, Chrome, Firefox et PhantomJS . Voici une comparaison du temps pris et du nombre d'échecs pour chaque approche:
Failures Time (secs)
HtmlCleaner 0 82
HtmlUnit 169 102
Google Chrome 38 562
Firefox 46 1159
PhantomJS 40 575
Certains commentaires:
Dans certains cas, les «échecs» ne sont pas du tout des échecs, il se peut que les extracteurs échouent parce que Javascript réécrit le DOM. Je suis en train d'analyser les échecs pour trouver la cause.
Cela dit, HtmlUnit est le pilote Selenium le plus rapide mais il n'est pas non plus fiable. Ce manque de fiabilité ne concerne pas seulement le Javascript, il y a des problèmes de traitement du HTML "salissant, sale, réel" parce que quelque chose semble être cassé dans l'algorithme d'équilibrage des balises. Quelques problèmes ont été soulevés à ce sujet, mais ils n'ont pas été résolus - voir HTML-UNIT 1423 et HTML-UNIT 1046 .
Firefox est le pilote Selenium le plus lent, même si je désactive le chargement d'images et les feuilles de style. En effet, c'est le plus lent à charger et à initialiser, ce qui le rend considérablement plus lent que Chrome, et chaque fois qu'une extraction échoue, je dois recharger le pilote (dans les tests, je crée un pool de 5 pilotes pour atténuer les retards de récupération d'URL pour tous les pilotes Web Selenium).
PhantomJS atteint une meilleure précision que Firefox, légèrement inférieure à Chrome, mais environ la moitié du temps de Firefox. De plus, je peux l'exécuter sur ma boîte de développement, il ne "prend pas en charge ma machine" en lançant plusieurs navigateurs pour que je puisse continuer à travailler.
Cela prend 9 minutes pour exécuter votre suite de tests avec phantomJS? Cela doit sembler éternel ...
Kevin
@Kevin Oui :) - mais HTMLCleaner est le test standard, je marque utiliser les catégories JUnit pour marquer les autres tests comme optionnels afin qu'ils ne font pas partie des tests unitaires standard
Mark Butler
Merci. Ouais, j'ai travaillé sur des tests full-js et ils sont tellement glaciaux - comme 15-20 secondes pour quelques tests de page. Peut-être que mon échelle de «glacial» doit être ajustée bien que hehe :) Bizarre cependant que si je le fais manuellement, cela ne prend que ~ 5 secondes pour cliquer sur les formulaires.
Kevin
1
@lucaswxp Oui! Et beaucoup d'autres projets entre les deux. Comme je l'explique ci-dessus, il n'y a pas de choix parfait. À l'époque, j'ai utilisé HtmlCleaner, mais j'ai ajouté une option pour utiliser PhantomJS, si la page à extraire en avait besoin.
Mark Butler
1
@iconoclast Non - malheureusement - l'ancien employeur a l'IP.
Mark Butler
2
Tirer parti de la puissance de Selenium et de PhantomJS
PhantomJS a les capacités de navigateur sans tête, il est donc bon de l'utiliser comme l'un des navigateurs avec sélénium (en plus des navigateurs traditionnels comme IE, Chrome, etc.,) Avantages de cette approche:
Peut être utilisé pour faire Sanity pour les applications Web dans CI (même si les machines d'agent n'ont pas IE ou chrome), les tests s'exécuteront efficacement.
Certaines équipes de développement utilisent cette approche pour obtenir des résultats rapides et consomment moins de temps et de ressources.
La plus grande caractéristique de phantom JS est la capture d'écran, exécutant des tests parallèles utilisant le multi threading, ce qui réduira considérablement votre temps d'exécution.
défis auxquels j'ai été confronté lors de l'utilisation de PhantomJS:
Mon application évaluait l'application Web:
À un moment donné, les localisateurs qui fonctionnaient bien sur le navigateur Chrome ne fonctionnent pas sur phantomJS.
Parfois, en effectuant un double clic ou un clic contextuel par sélénium, je dois mettre un contrôle supplémentaire pour vérifier les opérations car au premier endroit, il ne clique pas.
Conservation du cache et des cookies. Après vous être déconnecté puis connecté, les données restent dans le cache. | Nous effectuons donc le test sur chrome.
L'un des problèmes les plus importants que j'ai trouvé "Problème de téléchargement de fichiers". Nous ne pouvons pas télécharger un fichier dans le navigateur phantomJs dans notre application. Nous avons essayé beaucoup de choses javascriptexcutor, jqueries mais aucune d'elles n'a fonctionné du tout. Nous effectuons donc également ce test sur Chrome. Remarque: Nous avons largement utilisé les fonctions javascript dans notre framework pour interagir avec l'élément Web pour PhantomJS. Une chose est sûre que le temps d'exécution est très inférieur dans PhantomJS. Cela dépend donc de la priorité du client s'il veut la fonctionnalité / la performance, puis aller avec. Si vous souhaitez tester un scénario de bout en bout, optez pour Chrome.
Avec la récente intégration WebDriver (comme Ariya l'a noté), vous pouvez désormais utiliser Selenium pour piloter PhantomJS.
C'est extrêmement puissant.
Vous pouvez exécuter un ensemble de tests Selenium entièrement automatisés (en utilisant PhantomJS comme implémentation WebDriver) via votre CI sur un serveur Unix sans tête à chaque enregistrement. Ensuite, si vous souhaitez tester la compatibilité du navigateur, vous pouvez exécuter vos tests localement en modifiant l'implémentation WebDriver sous-jacente en Chrome, Firefox, etc.
la source
J'écris actuellement un framework d'extraction web. J'ai 524 tests qui obtiennent des données de 250 sites Web utilisant XPath. Initialement, le framework utilisait un analyseur HTML, HTMLCleaner, mais j'étudie actuellement en utilisant Selenium parce que je veux le support Javascript. J'ai exécuté les tests avec les pilotes HtmlUnit, Chrome, Firefox et PhantomJS . Voici une comparaison du temps pris et du nombre d'échecs pour chaque approche:
Certains commentaires:
Dans certains cas, les «échecs» ne sont pas du tout des échecs, il se peut que les extracteurs échouent parce que Javascript réécrit le DOM. Je suis en train d'analyser les échecs pour trouver la cause.
Cela dit, HtmlUnit est le pilote Selenium le plus rapide mais il n'est pas non plus fiable. Ce manque de fiabilité ne concerne pas seulement le Javascript, il y a des problèmes de traitement du HTML "salissant, sale, réel" parce que quelque chose semble être cassé dans l'algorithme d'équilibrage des balises. Quelques problèmes ont été soulevés à ce sujet, mais ils n'ont pas été résolus - voir HTML-UNIT 1423 et HTML-UNIT 1046 .
Firefox est le pilote Selenium le plus lent, même si je désactive le chargement d'images et les feuilles de style. En effet, c'est le plus lent à charger et à initialiser, ce qui le rend considérablement plus lent que Chrome, et chaque fois qu'une extraction échoue, je dois recharger le pilote (dans les tests, je crée un pool de 5 pilotes pour atténuer les retards de récupération d'URL pour tous les pilotes Web Selenium).
PhantomJS atteint une meilleure précision que Firefox, légèrement inférieure à Chrome, mais environ la moitié du temps de Firefox. De plus, je peux l'exécuter sur ma boîte de développement, il ne "prend pas en charge ma machine" en lançant plusieurs navigateurs pour que je puisse continuer à travailler.
Je recommande vivement PhantomJS.
la source
Tirer parti de la puissance de Selenium et de PhantomJS PhantomJS a les capacités de navigateur sans tête, il est donc bon de l'utiliser comme l'un des navigateurs avec sélénium (en plus des navigateurs traditionnels comme IE, Chrome, etc.,) Avantages de cette approche:
la source
défis auxquels j'ai été confronté lors de l'utilisation de PhantomJS:
Mon application évaluait l'application Web:
la source