Accueil / Blog / Métier / 2016 / Bien commencer avec Behat

Bien commencer avec Behat

Par Emmanuelle Helly publié 15/03/2016
Initialiser les tests avec Behat pour un projet Drupal
Bien commencer avec Behat

Behat est un outil de tests de comportement, "Behavior Driven Development", qui permet d'écrire des tests dans un langage compréhensible, et surtout autorise des actions à travers le navigateur, comme un vrai utilisateur.

Cet outil Open Source utilise Gherkin, qui permet d'écrire des instructions dans un langage humain, chaque instruction étant relié à une fonction en php.

Il utilise également Mink pour simuler les interaction avec le navigateur, et permet de connecter behat avec des outils d'émulation de navigateurs.

Dans cet article je vais décrire les premiers pas avec Behat dans le cadre d'un projet drupal, mais il peut être appliqué à n'importe quel autre projet.

Installer

Les éléments nécessaire en prérequis :

  • composer
  • php-curl
  • une instance de serveur Selenium démarrée

Installer et démarrer Selenium

Sélenium n'est pas obligatoire, mais voir le navigateur travailler à votre place est une petite satisfaction dont on ne va pas se priver.

Télécharger le serveur Selenium, puis lancer avec la commande

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

Installer la suite Behat

Le dossier de test doit être hors du dossier www de drupal.

mkdir tests
cd tests

Il sera nécessaire d'installer deux packages via composer : behat et drupal-extension.

composer require behat/behat
composer require drupal/drupal-extension

Cette opération installera behat, les extensions drupal et toutes leurs dépendances (Symfony, gherkin, ...) dans le dossier vendor.

$ vendor/bin/behat -V
behat version 3.0.15      # la version à jour à la date de cet article

Un fichier composer.json liste les bibliothèques nécessaires, utile si vous souhaitez redéployer ce projet.

{
  "require": {
    "drupal/drupal-extension": "~3.0",
    "guzzlehttp/guzzle" : "^6.0@dev"
  },
  "config": {
    "bin-dir": "bin/"
  }
}

Initialiser un projet

Nous devons ensuite initialiser Behat. Dans le dossier tests, exécuter :

vendor/bin/behat --init

Dossier tests

Cette commande crée :

  • un dossier features contiendra les fichiers scénarios ;
  • un dossier features/bootstrap contenant le fichier FeatureContext.php permettra d'écrire de nouveaux éléments de vocabulaire (nous verrons cela dans un prochain article).

Paramètres dans behat.yml

Nous avons besoin d'indiquer à behat plusieurs informations : le vocabulaire utilisé, l'url vers où tester, les extensions

Dans vendor/drupal/drupal-extension/behat.yml.dist plusieurs configurations sont disponibles selon la version de Drupal que vous utilisez. Dans notre cas, la version de drupal utilisée sur notre site test est la version 7. Voici donc notre fichier de configuration behat.yml, à créer dans le dossier tests :

default:
  suites:
    default:
      contexts:
        - FeatureContext
        - Drupal\DrupalExtension\Context\DrupalContext
        - Drupal\DrupalExtension\Context\MinkContext
  extensions:
    Behat\MinkExtension:
      selenium2: ~
      base_url: http://monprojet.local
    Drupal\DrupalExtension:
      blackbox: ~
      api_driver: 'drupal'
      drupal:
        drupal_root: '/home/ehe/Dev/drupal/monprojet/monprojet_www'

Ce fichier hérite du vocabulaire de DrupalExtension et MinkExtension.

Notre premier test

Vous pouvez lister les directives existantes :

vendor/bin/behat -dl

Créer un fichier monpremiertest.features dans le dossier features

@api
Feature: Environment check

  @api
  Scenario: assertHomepage
  Given I am an anonymous user
  When I am on the homepage
  Then I should see the text "Bienvenue"

Pour lancer les tests :

vendor/bin/behat
# lance tous les tests

vendor/bin/behat features/
# lance les tests du dossier features

vendor/bin/behat features/monpremiertest.features
# lance les tests du fichier monpremiertest.features

Lancement des tests

Si votre site contient le texte "Bienvenue", le test sera valide.

Conclusion

L'installation de Behat n'est pas si compliquée au final, et comme nous le verrons dans un prochain article, à l'usage Behat se révèle très pratique pour écrire rapidement des tests de comportement de votre site ou application web.

À savoir que notre autre CMS préféré, Plone, utilise robotframework, un outil similaire écrit en python.

Crédit image : Stop motion of cat and dog jumping by National Media Museum via Flickr Commons, in Wikimedia Commons, CC-By-SA-3.0

ABONNEZ-VOUS À LA NEWSLETTER !
Voir aussi
La roadmap Drupal 8 La roadmap Drupal 8 05/04/2017

Sorti fin 2015, le CMS Drupal 8 a basculé dans un nouveau cycle de versions tous les 6 mois. Cet ...

Makina Corpus et Drupal Makina Corpus et Drupal 18/06/2018

Chez Makina Corpus, nous avons fait le choix depuis 2007 d’utiliser le gestionnaire de contenu ...

Retour d'expérience sur la réalisation d'un portail Drupal mêlant cartographie et Open Data Retour d'expérience sur la réalisation d'un portail Drupal mêlant cartographie et Open Data 15/02/2018

Utilisation de Drupal comme outil centralisateur de flux.

Breaking news : j'aime la communauté Drupal ! Breaking news : j'aime la communauté Drupal ! 24/04/2018

L'apport de la communauté Drupal sur un cas concret.

Varnish et Drupal : gérer un cache anonyme étendu Varnish et Drupal : gérer un cache anonyme étendu 14/03/2018

Le rôle d'un Reverse Proxy Cache Varnish dans une architecture Web (type Drupal).