Améliorez votre confort avec Behat

Aujourd’hui je vais vous montrer quelques astuces qui vont peut être sauver votre santé mentale quand vous vous apprêtez à lancer une longue suite de tests avec Behat pour valider votre développement. En vrac on va parler de filtres pour lancer des scénarios spécifiques, de pouvoir lancer vos tests en arrière plan, d’utiliser le système de hooks pour faire des notifications, et même des captures d’écran !

Level 1 : lancez uniquement les tests qui vous intéressent

Utilisez les tags à bon escient :

  @debug
  Scenario: Testing a break point
    ...

  @kitteh
  Scenario: Can I has cheezeburger ?
   ...

  @debug @javascript
  Scenario: Testing several break points
    ...

Si je veux être sûr que je n’ai rien cassé dans le périmètre « debug », je vais juste lancer la commande :

php behat.phar --tags="debug"

Si je veux lancer les debug et kitteh aussi :

php behat.phar --tags="debug,kitteh"

Et si je ne veux lancer que les scénarios qui ont les tags debug et qui s’exécutent en javascript, je peux utiliser :

php behat.phar --tags="debug&&javascript"

Enfin si un de mes scénario a planté et qu’il n’a pas de tag particulier je peux le lancer avec une partie de son nom :

php behat.phar --name="Testing several"

Level 2 : lancez vos tests Sahi en arrière plan

Quand on a une suite de tests qui dure une heure, et que toute les 5 minutes on a un navigateur qui s’ouvre au milieu de notre écran et nous vole le focus, il y a de quoi rager. Heureusement il y a une solution : Xvfb ! Xvfb permet de créer des écrans virtuels, ce qui va nous permettre de lancer nos navigateurs dessus, sans gêner le travail qu’on effectue sur les écrans physiques (au revoir l’excuse « Je peux pas, je lance mes tests Behats ! »). Cette solution a été testée sur Ubuntu, mais devrait fonctionner sur la plupart des solutions Linux, et potentiellement sur Mac.

Installer Xvfb :

sudo apt-get install xvfb

Lancer une sortie écran virtuelle (à lancer automatiquement au démarrage pour plus de simplicité) :

Xvfb :99 -ac

Ensuite il va falloir faire comprendre à Sahi qu’on veut lancer notre navigateur sur cette sortie. Pour celà il faut modifier le fichier browser_types.xml (accessible directement depuis le lien config du Sahi Dashboard). Pour cela on va dupliquer le navigateur qu’on souhaite avoir en tâche de fond :

         
		chrome  
		Chrome
		chrome.png
		google-chrome  
		--user-data-dir=$userDir/browser/chrome/profiles/sahi$threadNo --proxy-server=localhost:9999 --disable-popup-blocking  
		chrome 
		5  

		chromeBg  
		Chrome
		chrome.png
		env DISPLAY=:99 google-chrome  
		--user-data-dir=$userDir/browser/chrome/profiles/sahi$threadNo --proxy-server=localhost:9999 --disable-popup-blocking  
		chrome 
		5

La seule modification est env DISPLAY=:99 à ajouter au path. Enfin il suffit de modifier le fichier behat.yml :

default:
  context:
    parameters:
      browser: chromeBg

Level 3 : ajoutez des notifications

Maintenant qu’on peut lancer notre suite de tests en arrière plan, on aimerait bien être averti aussitôt qu’un test plante pour être au plus réactif et pouvoir corriger et relancer les tests rapidement. Pour ça on peut créer un Formatter particulier qui aura pour but de nous signaler le moindre échec.

Nous avons deux « notificateurs » à disposition dans BehatCH :

  • UbuntuNotifier : utilise libnotify pour afficher un petit message dès qu’un test saute ou quand la suite est complétement terminée.
  • CampfireNotifier : idem mais envoi les résultats sur Campfire, plus pratique pour les tests qui sont lancés sur notre serveur d’intégration continue.

Une fois ajouté à notre dossier Bootstrap on peut l’utiliser avec la commande :

php behat.phar --format=pretty,UbuntuNotifier

Ou encore plus simplement en modifiant le fichier behat.yml directement, pour ne pas avoir à le saisir à chaque fois dans la commande :

default:
  formatter:
    name: pretty,UbuntuNotifier

De la même manière on pourrait directement ajouter les notifications dans notre fichier de contexte à l’aide des hooks de Behat.

Boss stage : faire des captures d’écran des échecs

La cerise sur le gateau, ce serait d’avoir une capture d’écran de l’état du navigateur au moment où le scénario de test a planté, eh ben jusqu’à hier je ne savais même pas que c’était possible (avec Xvfb). :)

Plutôt que de longs bouts de code, vous pouvez voir directement notre implémentation sur le github de BehatCH, dans le DebugContext.

 

Serv-Tech

 

3 thoughts on “Améliorez votre confort avec Behat

  1. It’s okay, they work again.

    It was because gabriel changed his surname for « tentacode » on github. I checked all links in this post.

    Thank you for your comment.

Laisser un commentaire