Utiliser les tests fonctionnels avec Behat dans tous vos projets web

A.                Installation de Java

 

Pour pouvoir utiliser Selenium qui nous permettra d’utiliser le navigateur voulu lors des tests, il faut préalablement avoir la versoir 7 de Java installé. Afin de connaître la version installée sur votre poste, lancez la commande suivante :

java --version

Si vous n’avez pas JRE 7 au minimum vous pouvez le télécharger à cette adresse :

http://www.oracle.com/technetwork/java/javase/downloads/java-se-jre-7-download-432155.html

Une fois installé, il faut ajouter la variable JAVA_HOME dans les variables d’environnement :

  • Clic droit sur ordinateur -> propriétés
  • Paramètres système avancés
  • Variables d’environnement
  • Dans les variables système choisissez « Nouvelle »
  • Entrer le nom JAVA_HOME
  • Entrer le chemin vers le fichier bin du dossier Java
  • Appliquer les changements

B.                Installation de Composer

 

Installer le fichier depuis https://getcomposer.org/Composer-Setup.exe et lancer l’exécutable afin d’installer Composer globalement sur votre ordinateur.

Une fois installé, il faut ajouter la variable Composer dans les variables d’environnement :

  • Clic droit sur ordinateur -> propriétés
  • Paramètres système avancés
  • Variables d’environnement
  • Dans les variables système choisissez « Nouvelle »
  • Entrer le nom Composer
  • Entrer le chemin vers le fichier bin du dossier Composer
  • Appliquer les changements

 

C.                Installation de Sélénium

 

Télécharger Sélénium via le lien suivant http://www.seleniumhq.org/download/, il s’agit d’un dossier à exécuter en java. Toujours avec ce lien, vous pouvez télécharger les webdrivers correspondants aux navigateurs voulus.

La commande pour lancer le serveur est la suivante :

java -jar selenium-server-standalone-x.xx.x.jar

 

N.D.A : Si vous utilisez une Vagrant, installez tous ces outils directement sur votre ordinateur.

 

D.                Installation de Behat

 

Dans le dossier de votre projet, créer un fichier composer.json contenant les lignes suivantes :

{

"require" : {

"behat/behat": "3.*@stable",
"behat/mink": "1.6.*@stable",
"behat/mink-extension": "@stable",
"behat/mink-goutte-driver": "@stable",
"emuse/behat-html-formatter": "@stable",
"behat/mink-selenium2-driver": "@stable",
"jarnaiz/behat-junit-formatter": "@stable"

}

}

Pour télécharger les dépendances du fichier composer.json, lancez la commande suivante dans le dossier du projet :

composer install

La dernière chose à faire est d’ajouter le bin de Behat (que nous venons de télécharger) dans les variables d’environnement de Windows.

  • Retrouver le fichier bin de Behat et copier son chemin
  • Clic droit sur ordinateur -> propriétés
  • Paramètres système avancés
  • Variables d’environnement
  • Dans les variables système choisissez « Nouvelle »
  • Entrer le nom Behat
  • Coller le chemin de Behat
  • Appliquer les changements

 

Pour vérifier que l’installation s’est bien déroulée vous pouvez entrer la commande suivante dans votre terminal:

behat --version

Par la suite initialiser Behat dans le dossier du projet, à l’aide de la commande :

behat --init

Vous devriez voir apparaître les trois lignes suivantes :

 

E.                 Utiliser Behat

 

Dans chaque projet, la première chose à faire avant de pouvoir se servir de Behat/Mink, il faut définir un certain nombre de paramètres concernant l’application à tester.

Le fichier de configuration contient les différents profils à utiliser ainsi que l’url du site, ainsi que les différents paramètres spécifiant le contexte d’exécution des tests.

Ce qui est ici qualifié de « profil » correspond au navigateur concerné par l’exécution des tests, ainsi que les différents paramètres que nous lui fournissons, tel que l’adresse de la racine du site, le driver utilisé afin de simuler l’environnement, dans notre cas soit sélénium qui sert à lancer graphiquement un ou plusieurs navigateurs soit goutte qui est un navigateur sans interface graphique.

Behat.yml :

# Local configuration.

default:

formatters:

pretty: true

extensions:

Behat\MinkExtension:

base_url: http://spip3-behat3.local/

selenium2: ~

Si aucun navigateur n’est précisé, Behat lancera le test sur le navigateur par défaut.

 

F.                 La syntaxe

Mink et Behat sont des outils gérant des scénarios qui utilisent le langage Gherkin, en effet, ils sont composés d’un certain nombre de phrases interprétées et associées à des méthodes permettant d’interagir avec une application web, telle que par exemple:

  • I follow «nom du lien »
  • I press « nom du bouton »

Behat et Mink implémente déjà toute une série de fonctions « basiques ». Pour les consulter, il vous suffit de lancer la commande suivante :

behat dl

La première chose à retenir pour écrire des tests, c’est de les placer dans le dossier features/ créé lors de l’initialisation de Behat vue précédemment, de plus chaque test doit se nommer de la façon suivante :

  • feature

Les tests sont des fichiers composés de la façon suivante (le @javascript est obligatoire pour lancer le navigateur internet en graphique car sélénium est dépendant de javascript et c’est ce que ce tag représente) :

@javascript@tag1@tag2

Feature : Nomdemafeature

Description de mon test (sur 3 lignes maximum)

Scenario : Ce que le test fait

Condition de départ

Quand je fais telle action

 

La notion de tag est très importante dans Behat afin de pouvoir lancer des séries ou des groupements de tests. Cela permet aussi bien de faire une sélection de tests à lancer et par conséquent d’optimiser le temps passé à les effectuer. Les exécutions sur sélénium sont relativement gourmandes en ressources et en temps c’est pourquoi nous déciderons d’abord de lancer la première série de tests « basiques » et seulement une fois qu’ils sont tous validés, nous pourrons passer à la deuxième série, plus complexe, et qui avait nécessairement besoin que les résultats de la première série de tests soient confirmés.

Voici un exemple :

 

G.                Le fichier FeatureContext

 

La classe FeatureContext.php contient les différentes méthodes permettant d’interpréter les tests que nous avons rédigé. En effet, comme nous l’avons vu précédemment un certain nombre de fonctions sont déjà implémentées dans Mink afin de pouvoir interagir avec l’interface web de notre site à tester.

Bien que Mink implémente les fonctions basiques pour les tests, il peut arriver qu’une fonctionnalité ne soit pas présente, ou que l’on veuille rassembler plusieurs commandes en une phrase afin de simplifier l’écriture des features.

Par exemple il arrive que l’on soit obligé d’attendre qu’un script, comme par exemple une requête AJAX, ait fini son exécution pour passer à la prochaine étape du test. Afin d’éviter de mettre un wait manuellement à chaque fois que l’on en a besoin, on va l’associer à la phrase « I wait for the message to appear » et grâce à cela nous pourrons l’utiliser dans la définition du test le fichier « .feature ».

 

/**

* @Then /^I wait for the message to appear$/

*/

public function iWaitForTheMessageToAppear()

{

$this->getSession()->wait(5000,

"jQuery('#message').children().length > 0"

);

}

Avant chacune des méthodes de la classe il faut définir son alias ainsi que l’annotation correspondante qui le précédera (ici @Then /^I wait for the message to appear$/). Il est également important de bien définir le nom de la fonction avec la phrase complète et une majuscule à chaque mot sauf la première lettre.

 

H.                Lancer les tests

 

Pour exécuter les tests fonctionnels, il suffit de se placer via l’invite de commande dans le dossier du projet et de saisir la commande suivante

behat --tags tagchoisi

Par défaut si aucun tag n’est précisé, Behat exécutera tous les tests qui sont définis.

I.                   Sources

 

Documentation officielle :

Tutoriels :

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.