Principes et caractéristiques
- Les paramètres sont gérés dans des fichiers XML.
- Un outil de requêtes HTTP est encapsulé à partir de HttpClient.
- Les cas de test sont organisés avec TestNG et exécutés via des fichiers XML.
- Les rapports de test utilisent la bibliothèque tiers ReportNG, avec Maven pour la gestion du projet.
Prérequis
Outils utilisés : Eclipse, Maven.
Bibliothèques tierces : dom4j, ReportNG, TestNG.
Points complexes : encapsulation des classes utilitaires pour HTTP et XML ; utilisation de dom4j ; application de CookieStore.
Conception du framework
Structure du projet
Le projet suit une architecture modulaire avec des packages distincts pour les classes utilitaires, les tests et les rapports.
Flux d'exécution des cas de test
Les cas de test sont lancés séquentiellement ou en parallèle selon la configuration TestNG, avec gestion des dépendances entre les tests.
Flux d'appels d'API
Chaque requête HTTP suit le cycle : envoi, réception, extraction des données, validation avec assertions.
Flux de script de suppervision
Un script principal coordonne l'exécution des suites de tests et collecte les résultats pour le reporting.
Implémentation du framework
Paramètres d'entrée
Les paramètres sont stockés dans des fichiers XML pour une gestion centralisée. Par exemple, pour tester l'endpoint de récupération des rôles avec les paramètres page et lignes, le fichier parametres.xml contient :
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<requete nom="ObtenirRoles">
<parametre cle="page" valeur="1"/>
<parametre cle="lignes" valeur="10"/>
</requete>
</configuration>
Une classe utilitaire GestionXML est encapsulée pour lire les fichiers XML avec dom4j. La méthode lireParametres retourne une Map contenant les paires clé-valeur :
public static Map<String, String> lireParametres(String nomRequete, String cheminFichier) {
// Logique de parsing XML
}
Une classe utilitaire GestionCookies gère le stockage des cookies via CookieStore. La méthode initialiserCookies extrait les cookies de la réponse HTTP :
public CookieStore initialiserCookies(HttpResponse reponse) {
// Initialisation du CookieStore à partir des headers
}
Un outil HTTP encapsulé fournit des méthodes pour les verbes REST, comme l'envoi de requêtes POST :
public CloseableHttpResponse envoyerRequetePost(String url, Map<String, String> parametres, CloseableHttpClient clientHttp, CookieStore stockageCookies) {
// Logique de construction et envoi de la requête
}
Paramètres de réponse
Un objet ReponseApi encapsule les données de réponse, incluant statut, code, type de contenu, corps, URL, méthode et cookies.
Une classe utilitaire TraitementReponse convertti la réponse HTTP brute en objet ReponseApi :
public ReponseApi traiterReponse(CloseableHttpResponse reponseHttp) {
// Extraction et formatage des données
}
Cas de test
Les tests sont gérés par TestNG avec paramétrage via fichiers XML. Un exemple de classe de test pour l'endpoint de récupération des rôles :
public class TestRecuperationRoles {
private static CookieStore stockageCookies;
private static GestionCookies gestionCookies = new GestionCookies();
private CloseableHttpClient clientHttp;
private OutilHttp outilHttp = OutilHttp.getInstance();
@Parameters({"url", "requete", "codeStatut", "cheminXml"})
@BeforeSuite
public void configurerAuthentification(String url, String requete, String codeStatut, String cheminXml) {
Map<String, String> parametres = GestionXML.lireParametres(requete, cheminXml);
clientHttp = HttpClients.createDefault();
CloseableHttpResponse reponse = outilHttp.envoyerRequetePost(url, parametres, clientHttp, stockageCookies);
stockageCookies = gestionCookies.initialiserCookies(reponse);
}
@Parameters({"url", "requete", "codeStatut", "contenuAttendu", "cheminXml"})
@Test(priority = 2)
public void testerRecuperationRoles(String url, String requete, String codeStatut, String contenuAttendu, String cheminXml) {
Map<String, String> parametres = GestionXML.lireParametres(requete, cheminXml);
clientHttp = HttpClients.custom().setDefaultCookieStore(stockageCookies).build();
CloseableHttpResponse reponse = outilHttp.envoyerRequetePost(url, parametres, clientHttp, stockageCookies);
ReponseApi resultat = new TraitementReponse().traiterReponse(reponse);
Assert.assertEquals("Succes", resultat.getStatut());
Assert.assertEquals(codeStatut, resultat.getCodeStatut());
Assert.assertTrue(resultat.getCorps().contains(contenuAttendu));
}
@AfterSuite
public void fermerClient() {
try {
clientHttp.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Le fichier XML de configuration pour TestNG définit les paramètres et l'ordre d'exécution :
<?xml version="1.0" encoding="UTF-8"?>
<suite name="SuiteTestRoles" parallel="classes" thread-count="5">
<parameter name="url" value="/api/authentification" />
<parameter name="requete" value="connexion" />
<parameter name="codeStatut" value="200" />
<parameter name="cheminXml" value="parametres.xml" />
<test name="TestRoles" preserve-order="true">
<parameter name="url" value="/api/roles" />
<parameter name="requete" value="ObtenirRoles" />
<parameter name="codeStatut" value="200" />
<parameter name="contenuAttendu" value="nomRole" />
<classes>
<class name="com.exemple.test.TestRecuperationRoles">
<methods>
<include name="testerRecuperationRoles" />
</methods>
</class>
</classes>
</test>
</suite>
Pour exécuter les tests, utilisez l'option "Run as TestNG Suite" dans l'IDE.
Rapports et organisation du projet
Les rapports sont générés avec ReportNG, intégré via Maven. Le fichier pom.xml configure les plugins nécessaires :
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.exemple</groupId>
<artifactId>framework-tests-api</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<encoding.source>UTF-8</encoding.source>
<fichierSuite>SuiteTestRoles.xml</fichierSuite>
</properties>
<dependencies>
<!-- Dépendances pour TestNG, HttpClient, dom4j, ReportNG -->
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
<configuration>
<suiteXmlFiles>
<suiteXmlFile>src/test/resources/${fichierSuite}</suiteXmlFile>
</suiteXmlFiles>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.5</version>
<configuration>
<properties>
<property>
<name>usedefaultlisteners</name>
<value>false</value>
</property>
<property>
<name>listener</name>
<value>org.uncommons.reportng.HTMLReporter</value>
</property>
</properties>
<workingDirectory>target/</workingDirectory>
</configuration>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
Pour exécuter tous les tests via Maven, placez les fichiers XML de suite dans le répertoire de test et lancez la commande mvn test. Les rapports HTML sont générés dans le répertoire target.