Publié: November 10, 2020
Créez de meilleurs tests parallèles grâce à l'exécution multithread.
Dans le monde trépidant d'aujourd'hui, un mise sur le marché plus rapide L'assurance qualité est une exigence essentielle pour les entreprises de toutes tailles. De ce fait, les entreprises attendent des équipes d'assurance qualité qu'elles fournissent rapidement un retour d'information sur leurs logiciels. automatisation des tests L'exécution parallèle réduit considérablement le temps de test et améliore l'efficacité opérationnelle. Cependant, il arrive que certains morceaux de code prennent plus de temps à s'exécuter, bloquant ainsi vos projets d'automatisation des tests. C'est là que l'exécution parallèle intervient. Les tests parallèles consistent à exécuter simultanément des scripts de test sur plusieurs navigateurs et plateformes.
Bien que l'exécution parallèle réduise considérablement les temps de test, elle présente certains défis. La séparation des scripts de test pour une exécution parallèle est une tâche complexe. Il convient également de prendre en compte l'utilisation des threads. safeL'exécution multithreadée est essentielle car plusieurs processus s'exécutent simultanément. Il est donc important de bien comprendre comment les threads interagissent entre eux. L'exécution multithreadée est ainsi un élément clé des projets de tests logiciels.
Aperçu de l'exécution multithread
Test d'intégration L'intégration logicielle consiste à intégrer logiquement des modules logiciels en un groupe et à tester leurs interactions. Elle se concentre sur la communication des données entre ces différents modules. L'exécution multithread, également une composante des tests d'intégration, teste les fonctionnalités spécifiques d'un thread. Un thread est la plus petite unité de travail exécutable par une machine. Ce test est généralement effectué au début des tests d'intégration et est principalement utilisé pour tester l'architecture client-serveur.
Dans un premier temps, les threads intégrés sont testés comme des sous-systèmes, puis comme un système complet. Ce test d'intégration, réalisé de manière incrémentale en testant les tâches de traitement séquentiellement, est également appelé test d'interaction des threads. Il est particulièrement adapté aux systèmes temps réel orientés objet. Généralement, l'exécution multithread commence par le test d'un seul thread individuel, puis se poursuit par le test de l'exécution multithreadée.
Vous pouvez effectuer une exécution multithread de deux manières :
- Test monothread : Les tests monothread consistent à tester une transaction d'application à la fois pour voir comment fonctionne la logique de l'application et comment effectuer les transactions de données d'entrée et de sortie comme prévu.
- Tests multithread : Les tests multithread consistent à exécuter simultanément plusieurs transactions d'une application. Ils peuvent s'exécuter sur une seule machine ou être répartis sur plusieurs. Les tests de threads sont essentiels dans l'architecture client-serveur, car un thread unique peut fonctionner correctement lorsqu'il n'interagit pas avec des objets gérés par d'autres threads. Cependant, ce même thread peut échouer dans un environnement multithread. L'interaction entre les threads est donc un aspect crucial à vérifier.
Lors de tests multithreadés, écrire du code reproductible pour les tests unitaires représente un défi majeur. De même, il est essentiel de tenir compte du fait que les ressources telles que la mémoire, le stockage et la vitesse varient d'un matériel à l'autre. Par conséquent, la rigueur dans l'écriture du code est primordiale. Une fois ces difficultés surmontées, vous pourrez pleinement profiter des avantages des tests multithreadés. Vous pourrez ainsi vérifier facilement les capacités, les performances et les fonctionnalités des applications client-serveur.
Exécution parallèle pour les tests de threads
En exécutant des tests en parallèle, vous pouvez réduire le temps d'exécution des tests tout en étant capable de tester le code multithreadé des applications. TestNG est un framework d'automatisation de tests populaire qui vous aide à exécuter des tests en parallèle pour une exécution multithreadée.
Voici un exemple pour vérifier l'ID du fil de discussion :
[java] public void ExperitestThreadOne() { long id = Thread.currentThread().getId(); System.out.println(“Experitest Thread id: ” + id); } [/java]
À présent, créons un petit script de test qui exécutera deux méthodes et vérifiera les identifiants des threads.
Ouvrez l'IDE Eclipse, créez un projet Java, puis une classe dans ce projet, et saisissez le code suivant :
[java] package ExperitestMultiThread; import org.testng.annotations.Test; public class ExperitestMTDemo { @Test public void ExperitestMethod1() { long id = Thread.currentThread().getId(); System.out.println(" L'identifiant du thread de la méthode 1 d'Experitest est : " + id); } @Test public void ExperitestMethod2() { long id = Thread.currentThread().getId(); System.out.println(" L'identifiant du thread de la méthode 2 d'Experitest est : " + id); } } [/java]
Maintenant, exécutez ce programme et vérifiez le résultat.

Si vous vérifiez le résultat, les deux méthodes s'exécutent dans un seul thread, de manière séquentielle.
À présent, exécutons les deux méthodes en parallèle. Pour ce faire, créez un nouveau fichier nommé TestNG.xml et ajoutez-y le code suivant.
[xml] [/xml]
Vous pouvez également cliquer avec le bouton droit sur votre projet et sélectionner TestNG -> Convertir en TestNG.
Maintenant, choisissez le mode parallèle -> méthodes et le nombre de threads à 2, puis enregistrez le fichier.

Exécutez le fichier TestNG.xml en tant que suite TestNG :

Vous pouvez constater que chaque méthode s'exécute dans un thread distinct. (Thread 14, 15, 14)
De même, vous pouvez exécuter des tests en parallèle basés sur des tests, des suites de tests, etc.
TestNG vous permet également d'exécuter des tests en parallèle dans un environnement multithread en utilisant les attributs « threadPoolSize » et « invocationCount ».
Voici un exemple de la manière d'exécuter des tests parallèles dans un environnement multithread.
[java] package ExperitestMultiThread; import org.testng.annotations.Test; public class ExperitestMT { @Test(threadPoolSize = 4, invocationCount = 8, timeOut = 1000) public void ExperitestMTEnvironment() { Long id = Thread.currentThread().getId(); System.out.println(“Experitest multithreaded testing is now running on Thread: ” + id); } } [/java]
Dans cet exemple, nous avons défini la taille du pool de threads (threadPoolSize) à 4. Cela signifie que le programme s'exécutera sur 4 threads différents. De même, nous avons défini le nombre d'appels (invocationCount) à 8, ce qui signifie que la méthode sera exécutée 8 fois.
Créez maintenant un fichier testng.xml et ajoutez-y le code suivant :
[xml] [/xml]
Lorsque vous exécuterez le fichier testng.xml, il exécutera la même méthode 8 fois en utilisant 4 threads.

Ici, vous pouvez voir que le programme est exécuté dans 4 threads différents (Thread 14, 15, 16, 17).
Exécution multithread sur la plateforme DécouvrirTest
Pour exécuter plusieurs cas de test en parallèle, vous avez besoin de ressources de calcul suffisantes. DécouvrirTest propose une plateforme d'automatisation de tests performante qui vous permettra d'exécuter des tests en parallèle sur plusieurs navigateurs et plateformes.
Voici un exemple qui exécute des classes de test en mode parallèle :
Créez un projet Java et deux classes dans ce projet. Dans la première classe (ExperitestSearch.java), ajoutez le code suivant :
[java] private static final String ACCESS_KEY = "Entrez votre clé d'accès ici"; private RemoteWebDriver driver; private URL url; private DesiredCapabilities dc = new DesiredCapabilities(); @BeforeMethod public void setUp() throws Exception { url = new URL("https://cloud.seetest.io/wd/hub"); dc.setCapability(CapabilityType.BROWSER_NAME, BrowserType.CHROME); dc.setCapability(CapabilityType.PLATFORM, Platform.ANY); dc.setCapability("accessKey", ACCESS_KEY); dc.setCapability("testName", "Démo de démarrage rapide du navigateur Chrome"); driver = new RemoteWebDriver(url, dc); long id = Thread.currentThread().getId(); System.out.println(" L'identifiant du thread de la méthode de configuration de la recherche Experitest est : " + id); @Test public void browserTestGoogleSearch() { driver.get(“https://www.google.com”); new WebDriverWait(driver, 10).until(ExpectedConditions.presenceOfElementLocated(By.name(“q”))); WebElement searchBar = driver.findElement(By.name(“q”)); searchBar.click(); searchBar.sendKeys(“Experitest”); searchBar.sendKeys(Keys.ENTER); long id = Thread.currentThread().getId(); System.out.println(” L'identifiant du thread de la méthode de test de recherche Experitest est : ” + id); } @AfterMethod public void tearDown() { System.out.println(“URL du rapport : “ + driver.getCapabilities().getCapability(“reportUrl”)); driver.quit(); long id = Thread.currentThread().getId(); System.out.println(" L'identifiant du thread de la méthode de nettoyage de la recherche Experitest est : " + id); } [/java]
private static final String ACCESS_KEY = "Entrez votre clé d'accès ici";
Ce programme se connectera à la plateforme DécouvrirTest, ouvrira un navigateur Google et recherchera le mot-clé « Experitest ». Une fois les résultats de la recherche affichés, il fermera le navigateur. Il affichera ensuite les identifiants des threads pour chaque méthode.
Créez maintenant une autre classe (DécouvrirTestSearch.java) et ajoutez le code suivant :
[java] package ExperitestMultiThread; import org.openqa.selenium.*; import org.openqa.selenium.remote.BrowserType; import org.openqa.selenium.remote.CapabilityType; import org.openqa.selenium.remote.DesiredCapabilities; import org.openqa.selenium.remote.RemoteWebDriver; import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.WebDriverWait; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import java.net.URL; public class DécouvrirTestSearch { private static final String ACCESS_KEY = “Entrez votre clé d'accès ici”; private RemoteWebDriver driver; private URL url; private DesiredCapabilities dc = new DesiredCapabilities(); @BeforeMethod public void setUp() throws Exception { url = new URL(“https://cloud.seetest.io/wd/hub”); dc.setCapability(CapabilityType.BROWSER_NAME, BrowserType.FIREFOX); dc.setCapability(CapabilityType.PLATFORM, Platform.ANY); dc.setCapability(“accessKey”, ACCESS_KEY); dc.setCapability(“testName”, “Démo de démarrage rapide du navigateur Firefox”); driver = new RemoteWebDriver(url, dc); long id = Thread.currentThread().getId(); System.out.println(” L'identifiant du thread de la méthode de configuration de la recherche DécouvrirTest est : ” + id); } @Test public void browserTestGoogleSearch() { driver.get(“https://www.google.com”); new WebDriverWait(driver, 10).until(ExpectedConditions.presenceOfElementLocated(By.name(“q”))); WebElement searchBar = driver.findElement(By.name(“q”)); searchBar.click(); searchBar.sendKeys(“DécouvrirTest”); searchBar.sendKeys(Keys.ENTER); long id = Thread.currentThread().getId(); System.out.println(” L'identifiant du thread de la méthode de test de recherche DécouvrirTest est : ” + id); } @AfterMethod public void tearDown() { System.out.println(“URL du rapport : “ + driver.getCapabilities().getCapability(“reportUrl”)); driver.quit(); long id = Thread.currentThread().getId(); System.out.println(” L'identifiant du thread de la méthode de nettoyage de recherche DécouvrirTest est : ” + id); } } [/java]
Ce programme se connectera à la plateforme cloud DécouvrirTest, ouvrira le navigateur Firefox, ouvrira le site de recherche Google et recherchera le mot-clé « DécouvrirTest ».
Nous avons maintenant créé deux classes. L'étape suivante consiste à les exécuter en parallèle. Créez donc un fichier TestNG.xml et ajoutez-y le code suivant.
[xml] [/xml]
Maintenant, exécutez le fichier TestNG.xml.

Vous pouvez constater que les deux classes sont exécutées simultanément dans des threads différents (threads 16 et 15). De même, vous pouvez exécuter des méthodes, des tests et des suites de tests en parallèle grâce au framework TestNG.
Résumé
L'exécution multithread est une méthode puissante pour exécuter des tests en parallèle. Grâce aux puissants frameworks d'automatisation de tests DécouvrirTest et TestNG, vous pouvez Créez de meilleurs tests parallèles et exécutez-les facilement dans un environnement multithread. sans se soucier des ressources de calcul. Cependant, il est important de noter que les scripts écrits pour les tests multithread doivent être indépendants les uns des autres et reproductibles. Ils doivent fournir les mêmes résultats à chaque fois avec les mêmes entrées et versions d'application. Il est également important d'utiliser des threads.safe Dans vos tests, vous pouvez utiliser des variables. En suivant les bonnes pratiques de test multithread, vous pouvez non seulement créer de meilleurs tests parallèles pour l'exécution multithread, mais aussi optimiser les ressources tout en réduisant considérablement les temps d'exécution.
Vous aimerez aussi
Votre test CarPlay a été réussi. Qu'a vu le conducteur ?
Si votre équipe développe une application compatible avec Apple CarPlay, la validation…
Choisir la bonne DeployModèle de test – SaaS, sur site ou hybride
Voici une question qui revient plus souvent qu'elle ne le devrait :…
La bêta d'iOS 27 est disponible. Testez vos applications avec Digital.ai Essai.
Apple a commencé le déploiement de la version bêta d'iOS 27 pour les développeurs…