.feature

Gherkin

Le langage de spécification BDD qui permet d'écrire des scénarios de test en langage naturel, compréhensibles aussi bien par les développeurs que par les parties prenantes non techniques.

Pour les non-initiés

Qu'est-ce que Gherkin ?

Imaginez que vous devez expliquer comment fonctionne une application à la fois aux développeurs qui vont la construire et aux utilisateurs qui vont s'en servir. Comment faire pour que tout le monde comprenne exactement la même chose ? C'est là qu'intervient Gherkin : un langage simple qui permet de décrire le comportement attendu d'un logiciel en utilisant des phrases compréhensibles par tous.

Gherkin est comme un traducteur universel entre le monde des affaires et celui de la technologie. Il permet d'écrire des scénarios qui décrivent précisément comment l'application doit se comporter dans différentes situations, en utilisant un format standardisé mais en langage naturel.

Ce que Gherkin apporte à votre projet

Communication claire

Un langage commun entre les parties prenantes métier, les développeurs et les testeurs, évitant les malentendus coûteux pendant le développement.

Documentation vivante

Des spécifications qui servent à la fois de documentation et de tests automatisés, garantissant que la documentation reste toujours à jour avec le code.

Tests automatisés

Transformation facile des spécifications en tests exécutables, permettant de vérifier en permanence que l'application fait bien ce qu'elle est censée faire.

Validation des exigences

Possibilité de vérifier très tôt que les besoins métier sont bien compris et correctement implémentés, réduisant les risques de développer les mauvaises fonctionnalités.

En résumé, Gherkin est un outil puissant qui permet de créer une compréhension partagée des fonctionnalités d'une application entre tous les acteurs d'un projet. Il transforme des phrases simples comme "Étant donné que je suis sur la page d'accueil, quand je clique sur connexion, alors je devrais voir un formulaire" en spécifications précises qui peuvent être comprises par tous et transformées en tests automatiques.

Pour les développeurs

Fonctionnement technique

Gherkin est un langage spécifique au domaine (DSL) conçu pour décrire le comportement d'un logiciel sans spécifier comment ce comportement est implémenté. Il est au cœur du développement piloté par le comportement (BDD) et est utilisé avec des frameworks comme Icône CucumberCucumber, SpecFlow, Icône BehatBehat et autres.

Syntaxe et structure

Un fichier Gherkin (généralement avec l'extension .feature) est organisé selon une structure précise qui facilite à la fois la lisibilité humaine et l'interprétation par les outils d'automatisation :

  • Feature: Décrit une fonctionnalité ou une capacité du système
  • Background: Définit des étapes qui sont communes à tous les scénarios de la fonctionnalité
  • Scenario: Décrit un cas de test spécifique
  • Given-When-Then: Structure fondamentale pour décrire les étapes d'un scénario :
    • Given (Étant donné) : Établit le contexte initial
    • When (Quand) : Décrit l'action déclenchante
    • Then (Alors) : Spécifie le résultat attendu
    • And, But : Conjonctions pour chainer plusieurs étapes du même type

Exemples de Gherkin et cas d'usage

Exemple de base : Feature avec scénarios

Voici un exemple simple montrant la structure d'une fonctionnalité d'authentification avec deux scénarios : une connexion réussie et un échec de connexion.

Feature d'authentification utilisateur
# language: fr Feature: Authentification utilisateur sur le site e-commerce En tant qu'utilisateur inscrit Je veux pouvoir me connecter au site Afin d'accéder à mon compte et gérer mes commandes Background: Given le site e-commerce est accessible And la base de données utilisateur est opérationnelle Scenario: Connexion réussie avec identifiants valides Given je suis sur la page de connexion When je saisis "user@example.com" dans le champ email And je saisis "password123" dans le champ mot de passe And je clique sur le bouton "Se connecter" Then je dois être redirigé vers la page "Mon compte" And je dois voir le message "Bienvenue, User" And mon nom d'utilisateur doit apparaître dans l'en-tête Scenario: Échec de connexion avec mot de passe incorrect Given je suis sur la page de connexion When je saisis "user@example.com" dans le champ email And je saisis "mauvais_mot_de_passe" dans le champ mot de passe And je clique sur le bouton "Se connecter" Then je dois rester sur la page de connexion And je dois voir le message d'erreur "Identifiants incorrects" And les champs de formulaire doivent être vidés

Scenario Outline : Tests paramétrés

Les Scenario Outlines permettent d'exécuter le même scénario plusieurs fois avec des données différentes, évitant la répétition de code.

Scenario Outline pour tester plusieurs cas de recherche
# language: fr Feature: Recherche de produits sur le site e-commerce En tant qu'utilisateur Je veux pouvoir rechercher des produits par différents critères Afin de trouver rapidement ce que je cherche Scenario Outline: Recherche de produits par catégorie et mot-clé Given je suis sur la page d'accueil du site When je sélectionne la catégorie "<catégorie>" And je saisis "<mot_clé>" dans la barre de recherche And je clique sur le bouton rechercher Then je dois voir au moins <nombre> résultats And tous les résultats doivent appartenir à la catégorie "<catégorie>" And tous les résultats doivent contenir "<mot_clé>" dans leur description ou titre Examples: | catégorie | mot_clé | nombre | | Électronique | smartphone | 5 | | Vêtements | chemise | 10 | | Cuisine | robot | 3 | | Jardin | tondeuse | 2 | | Livres | programmation | 7 |

Data Tables : Organisation de données complexes

Les tables de données permettent de fournir des entrées structurées pour les étapes d'un scénario.

Utilisation de Data Tables pour gérer le panier d'achat
# language: fr Feature: Panier d'achat En tant qu'utilisateur Je veux pouvoir ajouter plusieurs produits à mon panier Afin de les commander en une seule fois Scenario: Ajouter plusieurs produits au panier et vérifier le total Given je suis connecté sur le site e-commerce And mon panier est vide When j'ajoute les produits suivants à mon panier: | Produit | Quantité | Prix unitaire | | Smartphone Galaxy S22 | 1 | 799.99€ | | Coque de protection | 2 | 19.99€ | | Chargeur rapide | 1 | 29.99€ | Then mon panier doit contenir 4 articles au total And le sous-total doit être de 869.96€ And les frais de livraison standard doivent être affichés And je dois pouvoir accéder à la page de commande

Fonctionnalités avancées : Tags, Background et scénarios multiples

Un exemple plus complet utilisant des tags pour catégoriser les scénarios, un background commun et plusieurs scénarios liés.

Feature complète avec fonctionnalités avancées
# language: fr @paiement @critique Feature: Processus de paiement et confirmation de commande En tant qu'utilisateur avec des articles dans mon panier Je veux pouvoir finaliser ma commande avec différentes méthodes de paiement Afin de recevoir les produits que j'ai sélectionnés Background: Given je suis connecté avec l'utilisateur "client_test@example.com" And j'ai les produits suivants dans mon panier: | Produit | Quantité | Prix unitaire | | Écran LCD 24" | 2 | 199.99€ | | Clavier mécanique | 1 | 89.99€ | And je suis sur la page de paiement @carte_bancaire Scenario: Paiement réussi par carte bancaire When je sélectionne "Carte bancaire" comme méthode de paiement And je renseigne les informations de carte suivantes: | Numéro de carte | Date d'expiration | CVV | | 4111 1111 1111 1111 | 12/25 | 123 | And je valide mon paiement Then je dois être redirigé vers la page de confirmation And je dois recevoir un email à "client_test@example.com" avec les détails de ma commande And le statut de ma commande doit être "Paiement accepté" @paypal Scenario: Paiement réussi via PayPal When je sélectionne "PayPal" comme méthode de paiement And je clique sur "Payer avec PayPal" And je me connecte sur PayPal avec: | Email | Mot de passe | | paypal@example.com | testpwd123 | And je confirme le paiement sur PayPal Then je dois être redirigé vers la page de confirmation And le statut de ma commande doit être "Paiement accepté" And ma commande doit être enregistrée dans l'historique de mon compte @echec_paiement Scenario: Échec de paiement par carte expirée When je sélectionne "Carte bancaire" comme méthode de paiement And je renseigne les informations de carte suivantes: | Numéro de carte | Date d'expiration | CVV | | 4111 1111 1111 1111 | 01/20 | 123 | And je valide mon paiement Then je dois voir le message d'erreur "Carte expirée" And je dois pouvoir choisir une autre méthode de paiement And mon panier doit toujours contenir mes produits

Bonnes pratiques pour écrire du Gherkin efficace

  • Restez centrés sur le comportement - Décrivez ce que le système doit faire, pas comment il le fait
  • Utilisez le langage du domaine - Employez la terminologie métier comprise par toutes les parties prenantes
  • Un scénario = un comportement spécifique - Testez un seul aspect du comportement par scénario
  • Évitez la duplication - Utilisez Background, Scenario Outlines et Step Definitions pour éviter de répéter du code
  • Gardez les scénarios indépendants - Chaque scénario doit pouvoir s'exécuter seul sans dépendre d'autres scénarios
  • Nommez clairement - Donnez des titres descriptifs à vos features et scénarios pour faciliter la compréhension
  • Respectez la structure Given-When-Then - Suivez ce format pour maintenir la clarté des scénarios

Intégration avec les frameworks de test

Les fichiers Gherkin ne sont pas directement exécutables. Ils doivent être associés à du code qui implémente les étapes décrites. Ce code est généralement appelé "Step Definitions" et fait le lien entre les phrases en langage naturel et le code qui teste réellement l'application.

Gherkin est utilisé principalement avec les frameworks suivants :

  • Cucumber - Le framework BDD le plus populaire, disponible pour Java, JavaScript, Ruby, etc.
  • SpecFlow - L'équivalent de Cucumber pour .NET
  • Behat - Framework BDD pour PHP
  • Behave - Framework BDD pour Python
  • Cypress-cucumber-preprocessor - Extension permettant d'utiliser Gherkin avec Cypress

L'intégration de Gherkin dans un processus de développement agile permet de créer une boucle de feedback continue, où les spécifications écrites en collaboration deviennent des tests automatisés qui vérifient en permanence que l'application répond aux attentes métier définies.

Applications concrètes

Cas d'usage

Spécification collaborative

Ateliers de spécification collaboratifs (ou "Specification by Example") où les développeurs, testeurs et représentants métier définissent ensemble les comportements attendus de l'application.

Tests d'acceptation automatisés

Transformation des scénarios Gherkin en tests automatisés de bout en bout qui vérifient que l'application répond aux critères d'acceptation définis par le métier.

Documentation vivante

Création d'une documentation toujours à jour car liée directement au code et aux tests, servant à la fois de référence technique et de documentation fonctionnelle.

Rapports de couverture fonctionnelle

Génération de rapports visuels montrant la couverture des fonctionnalités métier par les tests, permettant d'identifier les zones à risque non couvertes.

Intégration continue

Exécution automatique des tests BDD basés sur Gherkin dans les pipelines CI/CD, garantissant que chaque livraison respecte les comportements attendus.

Validation réglementaire

Documentation claire et tests vérifiables pour les applications dans des domaines réglementés (finance, santé, etc.), facilitant les audits et la conformité.

Industries utilisant Gherkin

Banque & Finance
E-commerce
Santé
Assurance
Télécommunications
Transport
Services publics
Logiciels B2B