Makina Blog
Bien commencer avec Behat
Initialiser les tests avec Behat pour un projet Drupal
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
Cette commande crée :
- un dossier
features
contiendra les fichiers scénarios ; - un dossier
features/bootstrap
contenant le fichierFeatureContext.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
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
Actualités en lien
Migration d'un site Drupal 7 en Drupal 11
Trucs, astuces et "bouts" de code pour migrer votre site web de Drupal 7 à Drupal 11. Compte-rendu d'une conférence donnée au Drupalcamp Rennes 2024.
Makina Corpus, partenaire du DrupalCamp 2024
Nous sommes fiers d’annoncer que Makina Corpus est le sponsor du DrupalCamp à Rennes. Notre expert vous y propose une conférence « migrer de Drupal 7 à Drupal 10 ».