2017-08-02 3 views
1

Je suis entré dans un projet qui nécessite un WebGUI à tester. Le sélénium est utilisé en combinaison avec Jenkins pour planifier les tâches et exécuter les tests. Tout ceci est géré par un serveur (Linux).Confusion à propos de Selenium et WebDrivers

Les tests réguliers fonctionnent bien mais les tests WebGUI échouent et je suis supposé les faire fonctionner. Cependant, je suis très confus par les rôles du plugin "Selenium Grid" de Jenkins (est-ce même nécessaire), les tests JUnit à l'intérieur du projet utilisant une bibliothèque de sélénium et la configuration du navigateur sans tête requis.

Quels sont exactement les rôles du plugin "Selenium Grid" pour Jenkins et comment la librairie Selenium communique-t-elle avec un navigateur sans-tête (Role of WebDrivers?)? Je connais déjà le hub et les nœuds de Selenium mais je n'ai aucune idée de la façon d'aborder cela.

J'espère que quelqu'un peut me aider nettoyer ma confusion ...

+1

Le rôle du pilote est de permettre à votre code de communiquer avec le processus du navigateur Web en lui envoyant des requêtes. IIRC, Selenium Grid est censé émuler plusieurs utilisateurs à la fois travailler avec votre site, où chaque "utilisateur" fait son propre truc. De cette façon, les tests peuvent s'exécuter en parallèle sur plusieurs machines. –

+0

Une seule machine est supposée être utilisée. Comme il s'agit d'un serveur, aucune interface graphique n'est disponible (en raison des restrictions XVFB ne peut pas être installé) et de préférence Firefox et IE doivent être testés. Cette machine doit-elle être un concentrateur Selenium qui se lance de nouveau comme le seul nœud? Ou puis-je utiliser la librairie Selenium en Java avec un WebDriver? – GxTruth

Répondre

1

pris sur le site suivant. https://wiki.jenkins.io/display/JENKINS/Selenium+Plugin

Ce plugin met en place Sélénium Grille de la manière suivante

  • Le maître, Sélénium grille Hub est démarré sur le port 4444, sauf configuration contraire dans des configurations globales Jenkins. C'est là que tous vos tests doivent se connecter.
  • Pour chaque esclave, les binaires nécessaires sont copiés et les RC Selenium sont démarrés.
  • Les RC et le concentrateur Selenium Grid sont automatiquement reliés ensemble.

Maintenant, la question est de savoir si vous en avez besoin?

Ceci est jusqu'à l'exigence du projet. Vous avez juste besoin de vous poser cette question

  • avez-vous besoin d'exécuter des tests en parallèle (à temps de coupure ou pour tester la compatibilité du navigateur), maintenant ou dans un proche avenir.
+0

Il n'y a que peu de tests pour WebGUI, il est donc probable qu'aucun test parallèle n'est requis. Cependant, Firefox et Internet Explorer sont censés être supportés, donc un test est nécessaire. Cependant, une seule machine devrait être impliquée, donc je n'ai pas une douzaine de machines exécutant des nœuds Selenium avec différents navigateurs/OS. Puis-je utiliser différents WebDriver (différents modes?) Pour simuler cela? – GxTruth

+1

oui vous pouvez. Il suffit de supprimer le plugin et de lier l'exécution à un nœud. –

+0

Encore une question. Les WebDrivers semblent utiliser des navigateurs sans tête qui nécessitent le navigateur réel en tant qu'application externe. Est-ce le cas ou est-ce que Selenium implémente un navigateur sans tête sans avoir besoin d'un outil externe? – GxTruth

2

A Selenium Grid peut être utilisé pour configurer un environnement de navigateur automatisé évolutif. Il est souvent utilisé pour les tests GUI automatisés. Il se compose d'un Hub et d'un ou plusieurs Nodes.

Un Selenium Hub doit être démarré et l'URL qui en résulte doit être stockée.

Ensuite, un nombre souhaité de nœuds de sélénium doit être démarré avec une référence à l'URL du concentrateur. Les nœuds vont s'enregistrer sur le Hub.

Ensuite, vous pouvez utiliser Selenium Java pour créer une instance RemoteWebDriver, en spécifiant éventuellement l'URL du concentrateur Selenium. Ce webdriver est juste une API Java, le travail sera fait dans l'environnement (s) du nœud Selenium.

Vous pouvez utiliser l'API Java pour implémenter les opérations souhaitées sur l'instance WebDriver. Lors de l'exécution, le code va déléguer tous les appels à l'environnement Selenium en cours d'exécution.

Il existe plusieurs façons de démarrer réellement le concentrateur et les noeuds.Un plugin Jenkins pourrait le faire, vous pouvez utiliser Docker, un processus local, ou beaucoup plus. Je vous conseille de ne pas lier votre configuration directement à Jenkins, sauf si vous êtes certain que vous ne passerez jamais.

Le Jenkins Selenium Plugin spécifie l'URL que vous devez créer un WebDriver avec:

new RemoteWebDriver(new URL("http://jenkins.mydomain:4444/wd/hub"), capability); 

jenkins.mydomain sera probablement l'adresse IP de votre serveur Linux. Juste au-dessus, il y a une ligne qui dit qu'elle "accepte" aussi des nœuds externes. Je ne suis pas familier avec le plugin, donc je ne sais pas si cela signifie qu'il met en place un ou plusieurs nœuds par défaut.

+0

Merci pour cette précision. Donc Selenium Grid (le plugin Jenkins) dit que Jenkins devient un hub auquel les nœuds peuvent se connecter. Maintenant, je peux utiliser une implémentation WebDriver, lui donner l'URL + Port de mon hub Selenium et utiliser la classe WebDriver pour tester mon site Web? Il m'a confondu parce que HUB et Node seraient la même machine, ce qui semblait ne pas être le cas. – GxTruth

+0

@GxTruth J'ai ajouté quelques informations concernant le plugin Jenkins. –