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 !