En travaillant sur un projet open source GitHub créé pour montrer le fonctionnement du framework Selenium WebDriver avec Java, au fil de l’évolution du projet, il est devenu nécessaire de créer plusieurs testng.xml pour exécuter différents tests.
Ces fichiers multiples ont été créés pour séparer les tests et placer tous les tests liés à un site respectif dans un seul testng.xml (J’ai utilisé différents sites de démonstration pour montrer différentes actions qui peuvent être automatisées使用Selenium WebDriver).
Je vais donner quelques informations sur l’utilisation de plusieurs testng.xml fichiers et comment exécuter les tests. Comme Maven est l’outil de construction utilisé, un seul testng.xml est nécessaire pour exécuter tous les tests du projet. De plus, il existe des cas qui ont dû être débuggués pour les échecs des tests en exécutant un seul testng.xml fichier.
Dans ce projet, j’ai créé 9 testng.xml fichiers différents contenant plusieurs tests, et je exécute tous les tests dans ces 9 testng.xml fichiers différents en utilisant un seul testng.xml fichier. Oui, c’est possible !
Alors, jointez-moi sur cette aventure où je vais montrer comment exécuter plusieurs testng.xml fichiers en utilisant un seul testng.xml fichier. J’expliquerai également comment exécuter un seul testng.xml fichier sur les 9 disponibles et le lancer en ligne de commande à l’aide de Maven.
Exécution de plusieurs fichiers testng.xml en utilisant un seul fichier testng.xml.
Commençons par se concentrer sur l’exécution de tous les tests avec les 9 fichiers testng.xml différents. La solution est d’utiliser l’attribut <suite-files> </suitefiles>
dans votre fichier testng.xml et de fournir le chemin des autres fichiers testng.xml entre ces balises. Voici un exemple de fichier pour illustrer ce que je vais parler :
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Selenium 4 POC Tests ">
<suite-files>
<suite-file path="testng-saucedemo.xml"/>
<suite-file path="testng-automationpractice.xml"/>
<suite-file path="testng-theinternet.xml"/>
<suite-file path="testng-juice-shop.xml"/>
<suite-file path="testng-lambdatestecommerce.xml"/>
<suite-file path="testng-seleniumgrid-theinternet.xml"/>
<suite-file path="testng-lambdatest-selenium-playground.xml"/>
<!-- <suite-file path="testng-seleniumgrid-juiceshop.xml"/>-->
</suite-files>
</suite>
Une fois que ce fichier est exécuté, il exécutera les testng.xml respectifs dans l’ordre mis à jour entre les balises <suite-files>
. Donc, “testng-saucedemo.xml”
sera exécuté en premier, puis, “testng-automationpractice.xml”
sera exécuté, et ainsi de suite.
Tous les fichiers testng.xml fournis dans l’exemple précédent contiennent plusieurs tests. Donc, tous les tests dans les testng.xml respectifs seront exécutés et après l’achèvement, le prochain fichier XML sera sélectionné pour l’exécution.
Les contenus du fichier testng-saucedemo.xml sont les suivants :
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Sauce Demo Website Tests" parallel="tests" thread-count="4" verbose="2">
<test name="selenium 4 Tests with Chrome Browser">
<parameter name="browser" value="chrome"/>
<classes>
<class name="io.github.mfaisalkhatri.tests.saucedemo.SauceDemoTests">
<methods>
<include name="loginSauceDemoTest"/>
<include name="logOutSauceDemoTest"/>
</methods>
</class>
</classes>
</test> <!-- Test -->
<test name="selenium 4 Tests with Firefox Browser">
<parameter name="browser" value="firefox"/>
<classes>
<class name="io.github.mfaisalkhatri.tests.saucedemo.SauceDemoTests">
<methods>
<include name="loginSauceDemoTest"/>
<include name="logOutSauceDemoTest"/>
</methods>
</class>
</classes>
</test> <!-- Test -->
<test name="selenium 4 Tests with Edge Browser" enabled="false">
<parameter name="browser" value="edge"/>
<classes>
<class name="io.github.mfaisalkhatri.tests.saucedemo.SauceDemoTests">
<methods>
<include name="loginSauceDemoTest"/>
<include name="logOutSauceDemoTest"/>
</methods>
</class>
</classes>
</test> <!-- Test -->
<test name="selenium 4 Tests with Opera Browser" enabled="false">
<parameter name="browser" value="opera"/>
<classes>
<class name="io.github.mfaisalkhatri.tests.saucedemo.SauceDemoTests">
<methods>
<include name="loginSauceDemoTest"/>
<include name="logOutSauceDemoTest"/>
</methods>
</class>
</classes>
</test> <!-- Test -->
</suite> <!-- Suite -->
Une fois que tous les tests mis à jour dans ce fichier XML sont exécutés (importe s’il est réussi ou échoué), et que l’exécution est terminée, le fichier suivant sera sélectionné pour l’exécution d’un autre ensemble de tests.
L’exécution de dossiers de suite en parallèle n’est pas supporté par TestNG.
Exécution d’un seul fichier testng.xml en utilisant Maven.
Vous avez une option dans l’IDE de lancer vos tests en utilisant le fichier testng.xml en cliquant droit sur celui-ci et en sélectionnant l’option pour exécuter les tests. Cependant, lorsque vous avez à exécuter les tests dans le pipeline CI/CD, cette option ne suffit pas, car vous devez exécuter les tests en utilisant des commandes dans le pipeline automatisé.
Configurer Votre Projet Pour Exécuter le Fichier suite-xml En Ligne de Commande
Nous devons configurer les éléments suivants pour pouvoir exécuter le fichier testng.xml en utilisant Maven.
Mettez à jour le plugin Maven Surefire dans votre pom.xml :
Notez la balise <SuiteXmlFile>
sur l’image ci-dessus. La valeur pour suiteXmlFile
est définie comme ${suite-xml}
. Nous définirons la valeur par défaut pour cette déclaration dans le bloc des propriétés du fichier pom.xml comme suit :
Le chemin par défaut vers testng.xml est défini pour le fichier utilisé dans la section ci-dessus de ce blog et nous avons mis à jour le chemin vers les suite-files
dans celui-ci.
Ainsi, si nous exécutons la commande mvn clean install
ou mvn clean test
, Maven sélectionnera le fichier par défaut testng.xml en fonction du chemin de fichier mis à jour dans le bloc des propriétés et exécutera tous les tests.
Maintenant, la question qui vient à l’esprit est : « Que dois-je faire si je veux exécuter n’importe quel autre fichier testng.xml, est-ce possible ? »
La réponse est « Oui » : on peut exécuter n’importe quel fichier testng.xml dans notre projet en ajoutant -Dsuite-xml=<chemin du fichier testng.xml>
dans notre commande mvn
.
N’oubliez pas, nous avions précédemment défini cette configuration dans notre bloc du plugin Maven Surefire dans le pom.xml.
Nous devons simplement passer les valeurs pour la variable de propriété suite-xml
en ligne de commande, ce qui peut être fait en utilisant l’option -D
dans la commande mvn
:
mvn clean test -Dsuite-xml=<testng.xml file path>
Faisons maintenant un essai avec la ligne de commande et exécutons différents fichiers testng.xml à l’aide de Maven, comme nous venons d’apprendre.
Nous allons exécuter le fichier testng-internet.xml
, vérifier qu’il doit remplacer l’existant par défaut testng.xml, et n’exécuter que celui que nous passons dans la commande. Nous devons passer le chemin complet où le testng.xml est enregistré, et dans notre cas, il est disponible dans le dossier test-suite
, donc le chemin complet est test-suites\testng-theinternet.xml
. Voici la commande que nous allons exécuter (assurez-vous d’être dans le dossier racine du projet dans la fenêtre de la ligne de commande avant d’exécuter la commande Maven) :
mvn clean test -Dsuite-xml=test-suite\testng-theinternet.xml

L’option « -Dsuite-xml » peut être utilisée avec d’autres commandes Maven comme suit : mvn clean install/ mvn clean verify, etc.
Les tests ont été exécutés avec succès et les résultats ont été imprimés sur la console. Il est écrit que 32 tests ont été exécutés et réussis.
Pour confirmer que le fichier XML correct a été sélectionné et que les tests ont été exécutés, exécutons les tests pour le fichier testng-theinternet.xml
en utilisant l’IDE et vérifions le nombre de tests exécutés.
Nous pouvons voir que 32 tests ont été exécutés et réussis, ce qui confirme que les tests que nous avons exécutés en utilisant la commande mvn
ont été exécutés correctement pour le fichier testng.xml que nous avons fourni.
Conclusion
Nous pouvons avoir plusieurs fichiers testng.xml pour séparer les tests en fonction des différents modules/ sites Web dans notre projet, et ces multiples fichiers testng.xml peuvent être exécutés en utilisant un seul fichier testng.xml.
De même, nous pouvons exécuter un fichier testng.xml depuis la ligne de commande en utilisant le plugin Maven Surefire.
Source:
https://dzone.com/articles/working-with-multiple-testngxml-files