Tester votre site Web Drupal est devenu plus facile avec Behat (un didacticiel complet)

Publié: 2020-09-08

« Il n'y a rien au monde de plus puissant qu'une bonne histoire », a déclaré le roi de l'esprit et de la sagesse, Tyrion Lannister.

La puissance des histoires et une bonne communication permettent une livraison de logiciels collaborative et efficace. Évoluant à partir de méthodologies agiles, les technologies de développement axé sur le comportement (BDD) tirent pleinement parti de cette puissance pour automatiser le processus de test. Behat est l'une de ces technologies BDD qui permet des tests automatisés à l'aide d'un « langage omniprésent ». Apprenons-en plus sur Behat, Mink, Gherkin et comment les implémenter dans Drupal.

Behat Drupal

Qu'est-ce que Behat ?

Behat est un framework PHP open source utilisé pour automatiser les tests en tirant parti du Behavior Driven Development (BDD). Une approche BDD garantit une livraison logicielle de qualité en se concentrant sur une communication continue et des histoires de texte simples. Avec BDD, le testeur construit des cas de test dans un langage lisible par l'homme. Pour cette raison, il est facile de mettre toute l'équipe sur la même longueur d'onde car tout le monde, du propriétaire du produit au développeur, peut comprendre et obtenir des commentaires continus sur le scénario actuel.

Qu'est-ce que le cornichon ?

Le langage utilisé par l'outil Behat est Gherkin, qui est un langage lisible par les entreprises et spécifique à un domaine. Gherkin sert également de documentation vivante et des rapports peuvent être générés pour documenter chaque test. Ce langage simple basé sur des espaces blancs utilise des mots de langage simples comme mots-clés. Les indentations (en utilisant l'espace/la tabulation) et les fins de ligne définissent la structure du scénario de test. Bien que l'écriture et la compréhension du langage soient faciles, le résultat final doit se concentrer sur une meilleure collaboration, efficacité, automatisation et traçabilité. Les cas de test doivent être écrits de manière intuitive, se concentrer sur les éléments importants, éviter de vérifier les enregistrements en double et utiliser une bonne grammaire.

Qu'est-ce que le vison ?

Mink est un contrôleur de navigateur open source qui simule un scénario de test avec l'application Web. Une fois les cas de test écrits, ils doivent être exécutés et émuler les actions de l'utilisateur. Avec Mink, vous pouvez utiliser le même scénario de test et l'exécuter sur divers émulateurs de navigateur tels que Goutte, Selenium, Chrome, Zombie, etc. Lors de l'installation de l'extension Behat Drupal, vous verrez une dépendance vis-à-vis de Mink, alors assurez-vous de l'avoir également installée.

Installation et implémentation de Behat dans Drupal

Le moyen officiel d'installer Behat dans votre projet Drupal est via Composer. Non seulement il peut installer Behat pour vous, mais il pourra également vous mettre à jour facilement vers la dernière version plus tard lorsqu'elle sortira.

• Dans le dossier du projet, exécutez la commande :

 $ compositeur nécessite behat/behat

• Ou dans votre fichier composer.json, ajoutez l'instruction require

 "exiger": {
                "behat/behat": "^3.0.0",
     « phpunit/phpunit » : « ^5.0.0 »
     }

• Ensuite, exécutez la commande d'installation composer dans le terminal.
• Une fois terminé, vous remarquerez également un nouveau répertoire bin / contenant un fichier Behat. Il s'agit de l'exécutable Behat et vous l'utiliserez pour exécuter vos tests et obtenir des informations de débogage.
• Ensuite, créez un fichier nommé behat.yml dans le dossier racine du projet. Lorsque Behat s'exécute, il recherche un fichier behat.yml , qu'il utilise pour sa configuration.

défaut:
  suites :
    défaut:
      contextes :
        - Drupal\DrupalExtension\Context\DrupalContext
  rallonges :
    Behat\MinkExtension :
      goutte : ~
      base_url : http://example.org/ # Remplacez par l'URL de votre site
    Drupal\DrupalExtension :
      boîte noire : ~

Pour initialiser le projet, exécutez la commande :

 vendeur/bin/behat –init

Cela crée un dossier features /et un fichier de contexte par défaut bootstrap/FeatureContext.php dans le dossier features /.

Rédiger des histoires et exécuter des tests avec Behat

Notre objectif est de décrire les histoires de la manière la plus efficace. Les histoires sont écrites dans un langage lisible par l'homme, Gherkin, avec l'extension . fonctionnalité sous le répertoire features /.

Imaginons que vous deviez tester si vous pouvez ou non ajouter du contenu au type de contenu de page de base dans votre site. Pour ce faire, vous devez avoir accès à la page pour remplir les champs et l'enregistrer en tant qu'administrateur.

Alors, écrivons notre première histoire :

 Fonctionnalité : vérifier la page de base CT
 Pour créer une page
 En tant qu'administrateur
 Je veux accéder à /node/add/page
 Pour que je puisse créer une page

Scénario : CT de page de base
 Étant donné que je suis connecté en tant qu'utilisateur avec le rôle « administrateur »
 Quand je vais sur "/node/add/page"
 Et j'entre "Titre de base de la page" pour "edit-title-0-value"
 Quand j'appuie sur "éditer-soumettre"
 Ensuite, je devrais voir "Page de base Le titre de la page de base a été créé"

Ce fichier peut être nommé basic_page.feature . Chaque fonctionnalité peut avoir de nombreux scénarios, qui décrivent le comportement spécifique de la fonctionnalité. Chaque scénario comportera des sections :
Donné - détaille l'état de démarrage du système
Quand - inclut l'action entreprise par l'utilisateur
Ensuite - décrit ce que l'utilisateur voit après avoir pris des mesures
Et - pour maintenir la connectivité dans le scénario.
Il n'y a pas beaucoup de différence entre Then, And et But . Ces mots sont mis à disposition pour rendre vos scénarios naturels et lisibles.

Tous les fichiers de fonctionnalités peuvent être exécutés par vendor/bin/behat . Si vous souhaitez exécuter un fichier de fonctionnalité spécifique, exécutez vendor/bin/behat features/basic_page.feature. Il existe également un moyen d'exécuter un seul scénario en ajoutant simplement un numéro de ligne où le scénario est défini : vendor/bin/behat features/basic_page.feature:11 .

Il existe des commandes telles que vendor/bin/behat -dl qui vous fournit toute la syntaxe des instructions utilisée dans les scénarios et vendor/bin/behat -di fournit la syntaxe avec les exemples.

Comment écrire des fichiers de fonctionnalité

 Behat exécute des requêtes curl contre les URL de votre site Web, ce qui accélère le processus de test, mais fait également perdre à Behat la possibilité de tester les fonctionnalités nécessitant Javascript. Ainsi, pour tester les fonctionnalités, nous n'avons qu'à ajouter la balise @javascript avant chaque scénario nécessitant Javascript, comme ceci :

Fonctionnalité : vérifier la page de base CT
 Pour créer une page
 En tant qu'administrateur
 Je veux accéder à /node/add/page
 Pour que je puisse créer une page

@api @javascript
Scénario : CT de page de base
 Étant donné que je suis connecté en tant qu'utilisateur avec le rôle « administrateur »
 Quand je vais sur "/node/add/page"
Et j'entre "Titre de base de la page" pour "edit-title-0-value"
Et je remplis wysiwyg dans le champ "edit-body-0-value" avec "Basic page content"
Quand j'appuie sur "éditer-soumettre"
 Ensuite, je devrais voir "Page de base Le titre de la page de base a été créé"


Pour tester cela, exécutez vendor/bin/behat . Cela vous montrera les étapes non définies dans les scénarios car les scénarios doivent correspondre à une fonction.

béat


Vous pouvez soit copier-coller l'extrait de code dans le fichier de contexte FeatureContext.php ou exécuter vendor/bin/behat --dry-run --append-snippets .

Ensuite, vous pouvez écrire les définitions des fonctions dans FeatureContext.php comme indiqué :

 <?php

utilisez Behat\Mink\Exception\AttenteException ;
utilisez Drupal\DrupalExtension\Context\RawDrupalContext ;

/**
 * Définit les fonctionnalités de l'application à partir du contexte spécifique.
 */
la classe FeatureContext étend RawDrupalContext {

  /**
   * Le contexte vison.
   *
   * @var Drupal\DrupalExtension\Context\MinkContext
   */
  protégé $minkContext;

  /**
   * Initialise le contexte.
   *
   * Chaque scénario a sa propre instance de contexte.
   * Vous pouvez également passer des arguments arbitraires au
   * constructeur de contexte via behat.yml.
   */
  fonction publique __construct() {
  }

  /**
   * Remplissez wysiwyg sur le terrain.
   *
   * @Ensuite, je remplis wysiwyg sur le champ :locator avec :value
   */
  fonction publique iFillInWysiwygOnFieldWith($locator, $value) {
    $el = $this->getSession()->getPage()->findField($locator);
    si (vide($el)) {
      throw new ExpectationException('Impossible de trouver WYSIWYG avec le localisateur : ' . $locator, $this->getSession());
    }
    $fieldId = $el->getAttribute('id');
    if (vide($fieldId)) {
      throw new Exception('Impossible de trouver un identifiant pour le champ avec locator : ' . $locator);
    }
    $this->getSession()
      ->executeScript("CKEDITOR.instances[\"$fieldId\"].setData(\"$value\");");
  }

}

Maintenant, exécutez la commande vendor/bin/behat et tous les scénarios qui sont écrits doivent réussir. La fonction JS définie mappera l'énoncé du scénario " Et je remplis wysiwyg sur le champ "edit-body-0-value" avec "Contenu de la page de base ".