Nous utilisons Selenium pour automatiser nos tests UI
. Récemment, nous avons vu la majorité de nos utilisateurs utiliser Chrome. Nous voulions donc connaître les avantages et les inconvénients de l’utilisation de PhantomJS vs Selenium:
Ils s'attaquent à différents problèmes. Etant donné que PhantomJS fonctionne parfaitement sur la ligne de commande, il convient en tant que première couche de test de fumée, que ce soit dans le cadre d’un flux de travail de développement et/ou dans un serveur d’intégration continue. Selenium cible plusieurs navigateurs. Il est donc très utile d’assurer la cohérence entre les navigateurs et de réaliser des tests approfondis sur différents systèmes d’exploitation.
Si votre application Web doit être exécutée sur divers navigateurs Web, l'exécution du test d'interface utilisateur uniquement avec PhantomJS ne fournira pas la plus grande couverture de tests. Cependant, il est parfaitement approprié de lancer PhantomJS et d’exercer des 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 involontairement brisé et non fonctionnel!
Notez que la ligne entre les deux devient légèrement floue avec la récente prise en charge de WebDriver dans le dernier PhantomJS. Il est maintenant possible d'exécuter rapidement les tests en utilisant d'abord PhantomJS, puis (en supposant qu'aucune erreur sérieuse ne soit rencontrée) de continuer à exécuter les mêmes tests de manière approfondie dans une configuration Selenium.
Avec l'intégration récente de WebDriver (comme Ariya l'a noté), vous pouvez désormais utiliser Selenium pour piloter PhantomJS.
C'est immensément puissant.
Vous pouvez exécuter un ensemble de tests Selenium entièrement automatisés (en utilisant PhantomJS en tant qu’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 je suis en train d’envisager l’utilisation de Selenium parce que je veux un support Javascript. J'ai exécuté les tests sur HtmlUnit, Chrome, Firefox et pilotes 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" peuvent ne pas être du tout des échecs, il se peut que les extracteurs échouent car Javascript est en train de réécrire 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 fiable non plus. Cette non-fiabilité ne concerne pas seulement le Javascript, il y a des problèmes de traitement du code HTML "en désordre, sale, du monde réel", car 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 142 et HTML-UNIT 1046 .
Firefox est le pilote Selenium le plus lent, même si je désactive le chargement des images et les feuilles de style. En effet, le chargement et l’initialisation sont les plus lents, ce qui le rend beaucoup plus lent que Chrome. Chaque fois qu’une extraction échoue, je dois recharger le pilote (dans les tests, je crée un pool de 5 pilotes pour réduire les délais de récupération des URL les pilotes Web Selenium).
PhantomJS obtient une meilleure précision que Firefox, légèrement inférieure à celle de Chrome, mais environ deux fois plus rapide que Firefox. De plus, je peux l'exécuter sur ma boîte de dev, cela ne "prend pas ma machine" en lançant plusieurs navigateurs pour que je puisse continuer à travailler.
Je recommande fortement PhantomJS.
Exploiter la puissance de Sélénium et de PhantomJS PhantomJS possède les capacités de navigateur sans en-tête, il est donc bon de l'utiliser comme l'un des les navigateurs avec Selenium (En plus des navigateurs traditionnels comme IE, Chrome etc.,),) Avantages de cette approche:
défis rencontrés lors de l’utilisation de PhantomJS:
Mon application tarifait l'application Web: