Exécution parallèle des tests dans TestNG

Dans les tests automatisés, nous souhaitons souvent réduire le temps d’exécution des tests afin d’obtenir des résultats aussi rapidement que possible. Lorsque nous exécutons des tests Selenium à l’aide du package testNG, les tests sont par défaut exécutés en série. Mais TestNG fournit un support inhérent pour l’exécution de tests en parallèle. Grâce à ce tutoriel, nous serons en mesure d’exécuter des tests en parallèle dans Selenium ou tout autre outil d’automatisation des tests compatible avec Java.
Avant de commencer l’exécution parallèle, examinons brièvement le fichier testNG.xml (ceux qui sont familiers avec le fichier testng.xml peuvent sauter cette section et passer au paragraphe suivant – « Exécution parallèle des tests »).
Le fichier testng.xml facilite l’exécution des tests et le regroupement de plusieurs tests différents provenant de la même classe ou de classes différentes. Ce fichier XML comporte plusieurs balises pour la suite, les tests, les classes et/ou les paquets, la balise racine étant la suite.
Exemple de fichier testNG.xml :
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="ITtesterTestSuite" verbose="1" >
<test name="parallelExecutionTests" >
<classes>
<class name="testsInParallel" />
<class name="testsInParallel" />
</classes>
</test>
</suite>
Lorsque vous cliquez avec le bouton droit de la souris sur le fichier testng.xml et que vous l’exécutez en tant qu’ensemble TestNG, TestNG trouve les tests avec l’annotation @Test dans la classe testsInParallel.java et commence à exécuter les tests.
Exécution de tests en parallèle
Pour exécuter les tests en parallèle, il suffit d’ajouter ces deux paires clé-valeur dans la suite :
- parallel= »{methods/tests/classes} »
- thread-count= »{nombre de threads que vous voulez exécuter en même temps} ».
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="ITtesterTestSuite" verbose="1" parallel="methods" thread-count="5">
<test name="parallelExecutionTestsA" >
<classes>
<class name="testsInParallelA1" />
<class name="testsInParallelA2" />
</classes>
</test>
<test name="parallelExecutionTestsB" >
<classes>
<class name="testsInParallelB1" />
<class name="testsInParallelB2" />
</classes>
</test>
</suite>
Examinons l’objectif des trois options qui peuvent être définies comme valeur pour le paramètre « parallel ».
methods – la valeur de la méthode pour l’attribut parallel exécute tous les tests indépendamment sur des threads séparés (maximum de threads disponibles). Dans l’exemple ci-dessus, toutes les méthodes de test répertoriées dans les quatre classes seront exécutées en parallèle dans un maximum de 5 threads.
tests – la valeur du test exécutera les méthodes énumérées dans l’indicateur de test dans le même fil d’exécution. Dans l’exemple ci-dessus, toutes les méthodes de test sous l’étiquette « parallelExecutionTestsA » sont exécutées dans le même thread, et toutes les méthodes de test sous l’étiquette « parallelExecutionTestsB » sont exécutées dans le même thread. Il y aura donc deux threads qui exécuteront chacun les méthodes de test en parallèle, mais indépendamment l’un de l’autre, dans le cadre des tests parallelExecutionTestsA et parallelExecutionTestsB.
class – la valeur de class déclenchera toutes les méthodes de test répertoriées dans la classe dans le même thread et chaque méthode de la classe sera déclenchée dans un autre thread. Il y aurait donc quatre threads exécutant des tests dans quatre classes – testsInParallelA1,testsInParallelA2,testsInParallelB1,testsInParallelB2.