Développement

Les tests Gherkin, c’est quoi ?

Découvrez comment Gherkin facilite la communication entre développeurs, testeurs et parties prenantes grâce à son langage simple et structuré. Cet article explore son utilité, sa structure et son implémentation en Java avec Cucumber pour des tests automatisés efficaces.

Par

Intro

Dans le monde du développement logiciel, la communication efficace entre les membres d'une équipe est cruciale pour livrer des produits de qualité. Les tests Gherkin peuvent être une solution pour combler le fossé entre développeurs, testeurs et parties prenantes non techniques.

Dans cet article, nous allons explorer ce qu'est Gherkin, pourquoi il est utile, et comment l'utiliser efficacement dans vos projets.

Qu’est-ce que Gherkin ?

Gherkin est un langage simple et structuré basé sur du texte naturel. Il permet de décrire les cas de test sous forme de scénarios en utilisant des mots-clés spécifiques.

Les tests Gherkin reposent sur l'approche BDD (Behavior-Driven Development), qui place les comportements attendus du logiciel au centre du processus de conception et de développement.

Gherkin est facilement interprétable par des outils comme Cucumber ou SpecFlow.

Structure d’un scénario Gherkin :

Un test Gherkin est écrit sous forme de scénario décrivant un comportement attendu de l'application, en utilisant les mots-clés suivants :

Exemple de scénario :

Feature: User Login

	Scenario: Successful login
		Given the user is on the login page
		When the user enters valid credentials
		And clicks the "Login" button
		Then the user is redirected to the dashboard

Pourquoi utiliser Gherkin ?

Favorise la collaboration : Gherkin encourage une écriture commune des tests entre les développeurs, testeurs et experts métiers, grâce à son format lisible par tous.

Documentation vivante : Chaque scénario écrit en Gherkin n’est pas seulement un test automatisé mais aussi une documentation fonctionnelle. Contrairement aux documents traditionnels qu’on oublie de modifier et qui deviennent obsolètes, les tests Gherkin évoluent avec le code

Automatisation simplifiée : Avec des outils comme Cucumber, Behave (pour Python) ou SpecFlow (pour .NET), les scénarios Gherkin peuvent être directement reliés à du code automatisé.

Comment écrire des tests Gherkin en Java avec Cucumber ?

1. Structure du projet

src 

├── main 
│   └── java 
│       └── com.example 
│           └── [code métier ici] 
└── test 
    └── java 
        └── com.example 
            ├── runner 
            │   └── CucumberTestRunner.java 
            └── stepdefinitions 
                └── LoginSteps.java 
    └── resources 
        └── features 
            └── login.feature 

2. Fichier Gherkin

Reprenons l’exemple de tout à l’heure :

login.feature

Feature: User Login

	Scenario: Successful login
		Given the user is on the login page
		When the user enters valid credentials
		And clicks the "Login" button
		Then the user is redirected to the dashboard

3. Step Definitions en Java

Ces étapes correspondent au fichier Gherkin et contiennent le code Java pour exécuter les tests.

LoginSteps.java

package com.example.stepdefinitions;

import io.cucumber.java.en.*;

public class LoginSteps {
    private String username;
    private String password;
    private String pageMessage;

    @Given("the user is on the login page")
    public void theUserIsOnTheLoginPage() {
        System.out.println("User navigates to the login page.");
    }

    @When("the user enters valid credentials")
    public void theUserEntersValidCredentials() {
        username = "validUser";
        password = "validPassword";
        System.out.println("User enters valid credentials: " + username + "/" + password);
    }

    @And("clicks the {string} button")
    public void clicksTheButton(String button) {
        System.out.println("User clicks the " + button + " button.");
    }

    @Then("the user is redirected to the dashboard")
    public void theUserIsRedirectedToTheDashboard() {
        pageMessage = "Dashboard";
        System.out.println("Redirected to: " + pageMessage);
        assert pageMessage.equals("Dashboard");
    }
}

4. Le Runner

Afin de configurer Cucumber :

CucumberTestRunner.java

package com.example.runner;

import org.junit.runner.RunWith;
import io.cucumber.junit.Cucumber;
import io.cucumber.junit.CucumberOptions;

@RunWith(Cucumber.class)
@CucumberOptions(
    features = "src/test/resources/features", // Chemin vers le fichier .feature
    glue = "com.example.stepdefinitions", // Package des step definitions
    plugin = {"pretty", "html:target/cucumber-report.html"}, // Génération de rapports
    monochrome = true // Sortie lisible
)
public class CucumberTestRunner {
}

5. Les Dépendances Maven

Et enfin, les dépendances Maven :

<dependency>
	<groupId>io.cucumber</groupId>
	<artifactId>cucumber-java</artifactId>
	<version>7.14.0</version>
</dependency>

<dependency>
	<groupId>io.cucumber</groupId>
	<artifactId>cucumber-junit</artifactId>
	<version>7.14.0</version>
	<scope>test</scope>
</dependency>

<dependency>
	<groupId>junit</groupId>
	<artifactId>junit</artifactId>
	<version>4.13.2</version>
	<scope>test</scope>
</dependency>

Et voilà, vous n’avez plus qu’à tester sur votre IDE ou avec un mvn test !

Les autres articles à explorer