Makina Blog

Le blog Makina-corpus

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

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

Actualités en lien

Image
Encart D7 vers Drupal 11
04/04/2024

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.

Voir l'article
Image
Formation Migration Drupal 10
03/04/2024

Du nouveau dans notre gamme de forma­tions Drupal

Maîtri­sez le CMS Drupal de bout en bout avec notre panel complet de forma­tions couvrant la migra­tion (notre petite dernière), l’ad­mi­nis­tra­tion, le déve­lop­pe­ment et l’in­té­gra­tion Drupal. Pour deve­nir expert, plon­gez dans l’uni­vers Drupal !

Voir l'article
Image
Encart article DrupalCamp 2024
06/03/2024

Makina Corpus, parte­naire du Drupal­Camp 2024

Nous sommes fiers d’an­non­cer que Makina Corpus est le spon­sor du Drupal­Camp à Rennes. Notre expert vous y propose une confé­rence « migrer de Drupal 7 à Drupal 10 ».

Voir l'article

Inscription à la newsletter

Nous vous avons convaincus