selenium-grid-logo.png

La grille Selenium permet

  • de répartir la charge en distribuant les tests sur plusieurs machines (exécution parallèle)
  • de gérer de multiples environnement depuis un point central en facilitant l'exécution de tests sur une grande variété de navigateurs et d'OS
  • de réduire le temps de maintenance de la grille en permettant d'implémenter des déclencheurs personnalisés pour mettre en place une infrastructure virtuelle par exemple

Démarrage rapide

L'exemple qui suit montre comment lancer le Hub Selenium 2 et d'y enregistrer à la fois un noeud WebDriver et un ancien noeud Remote Control Selenium 1. Sera également montrée la façon d'appeler la grille en Java. Le hub et les noeuds seront lancés sur la même machine mais il est bien sûr possible de copier le selenium-server-standalone sur plusieurs machines.

Note: Le package selenium-server-standalone inclut le Hub, WebDriver et l'ancien Remote Control nécessaires pour exécuter la grille. Ant n'est désormais plus nécessaire. Vous pouvez télécharger selenium-server-standalone-*.jar à l'adresse http://code.google.com/p/selenium/d.... Ce qui suit suppose que Java soit déjà installé.

Etape 1: lancer le hub

Le Hub est le point central qui reçoit toutes les demandes de test et les distribue aux nœuds appropriés.

Ouvrez une console et allez dans le répertoire où se trouve le fichier selenium-server-standalone. Puis tapez la commande suivante:

  $ java -jar selenium-server-standalone-2.19.0.jar -role hub

Le hub va automatiquement démarrer en utilisant par défaut le port 4444. Pour modifier ce port, vous pouvez ajouter le paramètre optionel "-port" en exécutant la commande. Vous pouvez voir l'état du hub en utilisant un navigateur à l'adresse: http://localhost:4444/grid/console

Step 2: Lancer les nœuds

Que vous vouliez lancer une grille avec les nouvelles fonctionnalités WebDriver ou avec les fonctionnalités Remote Control Selenium 1 ou encore les deux en même temps, vous utiliserez le même fichier jar selenium-server-standalone pour lancer les nœuds.

  $ java -jar selenium-server-standalone-2.19.0.jar -role node  -hub http://localhost:4444/grid/register

Note: le port est par défaut 5555 s'il n'est pas spécifié quand l'option "-role" est fournie et qu'elle n'a pas la valeur "hub".

Pour assurer la compatibilité avec les versions antérieures, les rôles "wd" et "rc" sont toujours des valeurs valides pour un nœud. Mais ces rôles limitent les types de connections distantes à leurs API correspondantes alors que "node" autorise à la fois les connexions distantes RC et WebDriver.

Utilisation de la grille pour exécuter des tests

Nous utilisons ici Java à titre d'exemple. Maintenant que la grille est en place, nous devons y accéder depuis nos cas de tests. Pour les noeuds Selenium 1 RC, on peut continuer à utiliser l'objet DefaultSelenium object en lui passant l'information hub:

  Selenium selenium = new DefaultSelenium(“localhost”, 4444, “*firefox”, “http://www.google.com”);

Pour les noeuds WebDriver, vous devez utiliser les objets RemoteWebDriver et DesiredCapabilities pour définir quel navigateur, quelle version et quelle plateforme vous voulez utiliser. Créons les caractéristiques du navigateur cible que nous voulons utiliser pour nos tests:

  DesiredCapabilities capability = DesiredCapabilities.firefox();

Transmettons cela à l'objet RemoteWebDriver:

  WebDriver driver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), capability);

Le hub va alors affecter le test à un nœud compatible.

Un nœud sera compatible s'il correspond à toutes les capacités demandées. Pour demander une capacité spécifique de la grille, indiquez la avant de la passer à l'objet WebDriver.

  capability.setBrowserName();
  capability.setPlatform();
  capability.setVersion()
  capability.setCapability(,);

Exemple: un nœud enregistré avec les réglages:

-browser  browserName=firefox,version=3.6,platform=LINUX

correspondra à:

   capability.setBrowserName(“firefox” ); 
   capability.setPlatform(“LINUX”);  
   capability.setVersion(“3.6”);

mais aussi à:

  capability.setBrowserName(“firefox” ); 
  capability.setVersion(“3.6”);

Les caractéristiques qui ne sont pas indiquées sont ignorées. Si vous indiquez des caractéristiques qui n'existent pas sur la grille (par exemple, votre test indique Firefox version 4 mais vous n'avez pas d'instance Firefox 4), il n'y aura pas de correspondance et le test échouera.

Configurer les nœuds

Par défaut, les nœuds lancent 11 navigateurs: 5 Firefox, 5 Chrome, 1 Internet Explorer. Le nombre maximum de tests simultanés est fixé à 5 par défaut. Pour modifier cela et ajouter d'autres réglages de navigateur, vous pouvez utiliser des paramètres pour chaque option -browser (chaque option représente un nœud utilisant vos paramètres). Si vous utilisez le paramètre -browser, les navigateurs par défaut seront ignorés et seuls ceux indiqués en ligne de commande seront utilisés.

  -browser browserName=firefox,version=3.6,maxInstances=5,platform=LINUX

Ce réglage démarre 5 nœuds Firefox 3.6 sur une machine Linux.

Si votre machine distante possède de multiples versions de Firefox que vous souhaitez utiliser, vous pouvez faire correspondre l'emplacement de chaque binaire à une version particulière sur la même machine:

  -browser browserName=firefox,version=3.6,firefox_binary=/home/myhomedir/firefox36/firefox,maxInstances=3,platform=LINUX
  -browser browserName=firefox,version=4,firefox_binary=/home/myhomedir/firefox4/firefox,maxInstances=4,platform=LINUX

Astuce: Si vous devez mettre un espace quelque part dans vos paramètres browser, entourez les avec des guillemets:

  -browser “browserName=firefox,version=3.6,firefox_binary=c:\Program Files\firefox ,maxInstances=3, platform=WINDOWS”

Paramètres optionnels

  • -port 4444 (4444 est la valeur par défaut)
  • -nodeTimeout 30 (30 est la valeur par défaut) Délai en secondes avant que le hub ne libère automatiquement un nœud qui n'a pas reçu de requête dans cet intervalle de temps. Après ce délai, le nœud est rendu disponible pour un autre test dans la file d'attente. Ceci facilite la remise à zéro d'un client qui a planté sans intervention manuelle. Pour supprimer complètement ce délai d'expiration, indiquer -nodeTimeout 0 de telle sorte que le hub ne relâchera jamais le nœud.

Note: Ceci n'est PAS l'attente maximum (timeout) WebDriver pour les commandes de type ”wait for WebElement”.

  • -maxSession 5 (5 est la valeur par défaut) Le nombre maximum de navigateurs qui peut être lancé en parallèle pour le nœud. C'est différent du nombre maximum d'instance (maxInstance) de navigateurs gérés (Exemple: pour un nœud qui gère Firefox 3.6, Firefox 4.0 et Internet Explorer 8, maxSession=1 garantira que vous n'aurez jamais plus d'un navigateur en cours d'exécution à la fois. Avec maxSession=2 vous pouvez avoir 2 tests simultanés Firefox ou bien 1 Internet Explorer et 1 Firefox test).
  • -browser < params > Si -browser n'est pas spécifié, un nœud démarre avec 5 instances firefox, 1 chrome et 1 internet explorer (supposant qu'il est sur une machine windows). Ce paramètre peut être utilisés plusieurs fois sur la même ligne pour définir des types multiples de navigateurs.

Paramètres autorisés pour -browser:

  • * browserName={android, chrome, firefox, htmlunit, internet explorer, iphone, opera}
  • * version={browser version}
  • * firefox_binary={chemin vers l'exécutable}
  • * maxInstances={nombre maximum de navigateurs de ce type}
  • * platform={WINDOWS, LINUX, MAC}
  • -registerCycle = Fréquence en ms à laquelle le nœud va essayer de se réenregistrer lui-même. Ceci permet de redémarrer le hub sans avoir à redémarrer les nœuds.

Messages de diagnostic du Hub

Quand un canevas d'utilisation erroné est détecté, le hub peut envoyer le message suivant:

  Client requested session XYZ that was terminated due to RAISON
  • TIMEOUT La session a expiré car le client n'y a pas accédé dans le délai imparti. Si le client a été suspend, ceci peut se produire qquand il se réveille.
  • ORPHAN Un client dans la file d'attente a stoppé après qu'une nouvelle session lui a été attribuée.
  • CLIENT_STOPPED_SESSION La session a été arrêtée en utilisant un appel standard stop/quit du client. Pourquoi l'utilisez-vous à nouveau ?
  • CLIENT_GONE Le processus client (votre code) semble s'être planté ou ne répond plus à vos requêtes. Des problèmes réseaux intermittents peuvent en être la cause.
  • FORWARDING_TO_NODE_FAILED Le hub est incapable de transférer au nœud. Erreurs de dépassement mémoire/instabilité du noeud ou problèmes réseau.
  • CREATIONFAILED Le noeud n'a pas pu créer le navigateur. Ceci se produit typiquement quand il y a des problèmes d'environnement ou de configuration pour le nœud. Essayez d'utiliser directement le nœud pour trouver la source du problème.
  • PROXY_REREGISTRATION La session a été supprimée car le nœud s'est ré-enregistré sur la grille (à mi-test).

Source: http://code.google.com/p/selenium/w...