BT

Diffuser les Connaissances et l'Innovation dans le Développement Logiciel d'Entreprise

Contribuez

Sujets

Sélectionner votre région

Accueil InfoQ Actualités Tests de bout-en-bout avec Nightwatch

Tests de bout-en-bout avec Nightwatch

Nightwatch est un nouveau framework basé sur Node.js qui utilise l'API WebDriver de Selenium pour automatiser les tests d'application web. Cet outil permet grâce à une syntaxe simple d'écrire des tests de bout en bout en utilisant JavaScript et des sélecteurs CSS, le tout s'exécutant sur un serveur Selenium.

Contrairement aux BDD et tests unitaires qui s'exécutent dans un environnement isolé et utilisent des mocks, un test de bout en bout essaye d'émuler, aussi proche que possible, la perception qu'un utilisateur a vis-à-vis d'un système. Dans le cas d'une application web, cela implique de lancer un navigateur, charger des pages, exécuter du JavaScript, intéragir avec le DOM, etc. Nightwatch essaye d'effectuer ces tâches via une syntaxe simplifiée :



this.demoTestGoogle = function (browser) {
   browser
     .url(“http://www.google.com”)
     .waitForElementVisible('body', 1000)
     .setValue('input[type=text]', 'nightwatch')
     .waitForElementVisible('button[name=btnG]', 1000)
     .click('button[name=btnG]')
     .pause(1000)
     .assert.containsText('#main', 'The Night Watch')
     .end();
};

En plus de simplifier le processus d'écriture de tests automatisés, Nightwatch peut aussi être intégré dans un processus d'intégration continue.

La liste actuelle des fonctionnalités de Nightwatch comprend :

  • une syntaxe simple mais puissante qui permet d'écrire des tests très rapidement en utilisant uniquement du JavaScript et des sélecteurs CSS. Aucun besoin d'initialiser d'autres objets ou classes, vous devez juste écrire les specs des tests.
  • Lanceur de tests en ligne de commande qui permet d'exécuter les tests au complet, par groupe ou unitairement.
  • Gère le serveur Selenium automatiquement. Peut être désactivé si Selenium s'exécute sur une autre machine.
  • Construit pour l'intégration continue : rapport au format XML JUnit pour pouvoir intégrer les tests dans votre processus de build avec Hudson ou Teamcity.
  • Utilisation des sélecteurs CSS ou de Xpath pour trouver et vérifier la présence d'éléments dans la page ou pour exécuter des commandes.
  • Simple d'ajouter vos propres commandes spécifiques à vos applications.

Actuellement, dans le monde JavaScript, Selenium est un des outils les plus populaires pour les tests fonctionnels avec Phantomjs, chacun ayant une approche différente. Selenium utilise son API WebDriver alors que PhantomJS repose sur un navigateur WebKit. Tous les deux sont des outils matures avec une forte communauté. La plus grande différence entre ces outils et Nightwatch est la simplicité de la syntaxe et l'intégration continue. Selenium et PhantomJS ont une syntaxe lourde, ce qui entraine plus de code, et ne s'interfèrent pas naturellement avec des serveurs d'intégrations continues (JUnit XML ou autre standards), ce que Nightwatch fait.

Nightwatch est toujours en évolution afin de devenir un outil mature. Sebastien Vincent, auteur de WD.js, une autre bibliothèque de tests fonctionnels basée sur Node.js, a émis quelques critiques sur Google Groups concernant l'implémentation faite pour gérer les callbacks :

Les chaînes à base de queue sont un mauvais pattern quand des appels asynchrones sont impliqués. Dès que vous essayez de faire quelque chose de complexe, vous devez manuellement interrompre la queue et insérer des taches manuellement (mais peut-être que Nightwatch va me prouver que je me trompe)

Vincent reproche aussi des faiblesses dans l'utilisation du protocole de communication entre Nightwatch et Selenium :

Nightwatch est loin d'être mature, regardez le protocole HTTP, il n'y a pas d'options de retry et de timeout. Cela ne résistera pas longtemps dans des cas non triviaux comme sauce-connect ou avec des files.

Malgré ces critiques, l'outil a été mis en avant dans la liste des projets populaires du mois de GitHub et le compte Twitter a été utilisé afin d'avoir des retours d'expériences de la communauté et d'être en contact avec les développeurs.

Evaluer cet article

Pertinence
Style

Contenu Éducatif

BT