Zalenium ?

https://zalando.github.io/zalenium/

Après quelques heures d'essai, je suis arrivé à la conclusion que cet outil était vraiment génial car :

  1. il est très facile à tester sur votre machine locale,
  2. il lance dynamiquement les conteneurs pour exécuter les tests Selenium,
  3. et fournit l'enregistrement vidéo des tests

Définition de l'outil :

Nous savons à quel point il est compliqué de:

  • Avoir une grille stable pour exécuter des tests d'interface utilisateur avec Selenium
  • Le maintenir au fil du temps (suivez les nouvelles versions du navigateur, du sélénium et des pilotes)
  • Fournir des fonctionnalités pour couvrir tous les navigateurs et plates-formes

C’est la raison pour laquelle nous avons adopté cette approche, dans laquelle les nœuds docker-sélénium sont créés à la demande. Les tests de votre interface utilisateur s'exécutent plus rapidement dans Firefox et Chrome, car ils s'exécutent dans votre propre réseau local, sur un nœud créé à partir de zéro et supprimé une fois le test terminé.

Si vous avez besoin d'une fonctionnalité que docker-selenium ne peut pas utiliser, le test est redirigé vers un fournisseur de tests de cloud (Sauce Labs, BrowserStack, TestingBot, CrossBrowserTesting, LambdaTest).

Comment ça fonctionne ?

Zalenium fonctionne de manière conceptuelle assez simplement :

  • Un hub Selenium démarre et écoute sur le port 4444.
  • Un nœud personnalisé pour docker-sélénium
  • Si une intégration de test de cloud est activée, un nœud proxy de cloud pour prendre en charge un fournisseur de cloud (Sauce Labs, BrowserStack, TestingBot, LambdaTest) sera enregistré dans la grille.
  • Une demande de test est reçue par le concentrateur et les capacités demandées sont vérifiées par rapport à chacun des nœuds.
  • Si docker-sélenium peut remplir les fonctions demandées, un conteneur de menu fixe est créé lors de l'exécution et la demande de test est renvoyée au concentrateur pendant que le nouveau nœud s'enregistre.
  • Le concentrateur accuse réception du nouveau nœud et lui achemine la demande de test.
  • Le test est exécuté et le conteneur est éliminé une fois le test terminé.
  • Si docker-sélenium ne peut pas remplir les fonctionnalités demandées, il sera traité par l'une des plateformes de test de cloud activées.

Sur MacOS :

Conditions préalables

  • Version de Docker> = 1.11.1 (fonctionne probablement avec les versions précédentes, pas encore testée).

Etapes de démarrage :

  • Démarrer le terminal
  • Puis démarrer Zalenium comme ceci :
   # Pull docker-selenium
    docker pull elgalu/selenium
    
    # Pull Zalenium
    docker pull dosel/zalenium
    
    # Run it!
    docker run --rm -ti --name zalenium -p 4444:4444 \
      -v /var/run/docker.sock:/var/run/docker.sock \
      -v /tmp/videos:/home/seluser/videos \
      --privileged dosel/zalenium start
      
    # Point your tests to http://localhost:4444/wd/hub and run them

    # Stop
    docker stop zalenium

Une fois selenium et zalenium récupérés depuis le Docker Hub, on run Zalenium à l'aide de Docker et voici ce que l'on obtient, deux machines virtuelles pour effectuer vos tests :

sur l'adresse :

http://localhost:4444/grid/admin/live

Ce qui donne comme config :

Puis sur un autre page :

http://localhost:4444/dashboard/#

On visualise nos tests.

Comment y parvenir ?

Exécutez vos tests

Vous êtes maintenant prêt à exécuter vos tests Selenium sur Zalenium.  Je parepared script Geb ici depuis que je l'aime, mais vous pouvez utiliser ce que vous voulez.  http://www.gebish.org/

HelloZelenium.groovy

Browser.drive {
  go "http://gebish.org"

  assert title == "Geb - Very Groovy Browser Automation"

  $("div.menu a.manuals").click()
  waitFor { !$("#manuals-menu").hasClass("animating") }

  $("#manuals-menu a")[0].click()

  assert title.startsWith("The Book Of Geb")
}

Ceci est du document Geb. Je saute l'explication de ce script, car je pense que vous pouvez facilement imaginer ce qu'il fait.

GebConfig.groovy

driver = {
  def capabilities = new DesiredCapabilities();
  capabilities.setCapability(CapabilityType.BROWSER_NAME, BrowserType.CHROME);
  capabilities.setCapability(CapabilityType.PLATFORM_NAME, Platform.LINUX);

  def remoteWebDriverUrl = new URL("http://localhost:4444/wd/hub")
  new RemoteWebDriver(remoteWebDriverUrl, capabilities)
}

Nous pouvons définir la configuration avec GebConfig. Nous utilisons RemoteWebDriver avec l'URL du hub Zelenium.  Le code source complet, y compris l'importation, est disponible à l'adresse suivante:

https://gist.github.com/bufferings/a8980ea515a893e21a3a95955ace5dc9  

Lancer le test depuis un onglet différent du terminal.

groovy HelloZalenium

Avoir installé au préalable Groovy sur votre Mac avec Brew via la commande :

brew install groovy

Ensuite, vous pouvez voir que les tests sont exécutés sur la page live.

Désormais, j'aimerais lancer plusieurs tests simultanément.  

for i in {1..8};do groovy HelloZalenium & done

Ensuite, 8 machines seront lancées en test! Après les tests, les conteneurs sont automatiquement arrêtés.

Par défaut, tous les tests sont enregistrés. Nous pouvons les vérifier sur :

http://localhost:4444/dashboard/#

Options de configuration

De plus, nous pouvons demander à Zelenium de modifier la configuration du test, par exemple:

driver = {
  def capabilities = new DesiredCapabilities();
  capabilities.setCapability(CapabilityType.BROWSER_NAME, BrowserType.FIREFOX);
  capabilities.setCapability(CapabilityType.PLATFORM_NAME, Platform.LINUX);
  capabilities.setCapability("screenResolution", "1280x720");
  capabilities.setCapability("tz", "Asia/Tokyo");

  def remoteWebDriverUrl = new URL("http://localhost:4444/wd/hub")
  new RemoteWebDriver(remoteWebDriverUrl, capabilities)
}

À ce stade, nous pouvons constater que FireFox est utilisé avec le fuseau horaire 1280x720 et Asia/Tokyo.

Plus d'infos sur le projet ici.