Fermer

mars 27, 2024

DiscussionLocal à la rescousse ! / Blogs / Perficient

DiscussionLocal à la rescousse !  / Blogs / Perficient


Les cadres d’automatisation modernes bénéficient grandement de l’exécution de tests en parallèle. Cependant, cela peut introduire des complexités lorsqu’il s’agit de ressources partagées telles que les rapports d’étendue. L’exécution de tests en parallèle peut entraîner un chaos dans les résultats, car plusieurs tests peuvent mettre à jour le même rapport simultanément. Ce blog s’attaque à un obstacle courant : comment garantir la sécurité des threads dans les rapports d’étendue lors des tests Selenium parallèles à l’aide de la classe ThreadLocal.

Le problème : le choc des tests

Les rapports d’étendue fournissent des rapports de test magnifiques et détaillés, mais lors de l’exécution de tests en parallèle, plusieurs problèmes surviennent :

  • Rapports écrasés : Un test peut écraser les données du rapport d’un autre, conduisant à des résultats inexacts ou incomplets.
  • Étapes mélangées : Avec plusieurs threads, les étapes de test de différents tests pourraient être mélangées dans le rapport, créant ainsi une confusion.

Utiliser ThreadLocal pour résoudre les problèmes de concurrence

ThreadLocal est une classe Java qui fournit des variables locales de thread. Chaque thread accédant à la variable possède sa propre copie initialisée indépendamment de la variable. Cela fait de ThreadLocal une solution idéale pour gérer les ressources spécifiques à un thread, telles que les instances Extent Test.

Voici comment ThreadLocal aide à maîtriser la concurrence dans les rapports d’étendue :

  1. Stockage spécifique au thread : Chaque thread exécutant un scénario de test obtient sa propre copie de l’objet ExtentTest dans la variable ThreadLocal.
  2. Mises à jour isolées : Les tests mettent à jour leur propre objet ExtentTest sans affecter les autres objets exécutés simultanément.
  3. Rapports propres : Une fois le test terminé, son objet ExtentTest spécifique est utilisé pour générer un rapport clair et organisé.

Implémentation de ThreadLocal avec des rapports d’étendue :

Voyons comment implémenter ThreadLocal avec Extent Reports et Selenium pour des tests parallèles ; Vous trouverez ci-dessous l’explication du code étape par étape du processus :

Ce code implémente le ITestListener interface dans TestNG, vous permettant d’écouter les événements de test tels que le début, la réussite, l’échec et la fin du test. Le Rapports d’étendue et ÉtendueTest les cours viennent du Bibliothèque ExtentReportsqui génère des rapports HTML lors des tests Selenium.

Explication:

  1. Une variable ThreadLocal « test » est créée pour stocker l’objet ExtentTest.
  2. Dans onTestStart, un nouvel objet ExtentTest est créé en fonction du nom du scénario de test et stocké dans le test.
  3. Les méthodes suivantes telles que onTestSuccess et onTestFailure accèdent et mettent à jour l’objet ExtentTest spécifique au thread actuel.
  4. Dans onFinish, le rapport est vidé pour générer le rapport final avec les informations de chaque test.

Trois classes principales de la bibliothèque ExtentReports

  1. ExtentSparkReporter : Cette classe crée un fichier de rapport HTML pour vos résultats de test. Il vous permet de personnaliser l’apparence du rapport, par exemple en définissant le nom du rapport et le titre du document. Dans votre code, vous créez une instance d’ExtentSparkReporter et l’attachez à votre objet ExtentReports pour générer le fichier de rapport HTML.
  2. Rapports d’étendue : Cette classe est la principale classe de reporting dans ExtentReports. Il est utilisé pour créer et gérer le rapport de test global. Vous pouvez attacher un ou plusieurs objets ExtentSparkReporter à un objet ExtentReports pour générer différents types de rapports (par exemple, HTML, PDF). Dans votre code, vous créez une instance de ExtentReports et y attachez ExtentSparkReporter.
  3. Test d’étendue : Cette classe représente un test dans votre rapport de test. Vous créez une instance de ExtentTest pour chaque méthode de test de votre suite de tests. Vous pouvez utiliser l’objet ExtentTest pour enregistrer les étapes de test, réussir ou échouer un test, ajouter des captures d’écran, etc. Dans votre code, vous créez un objet ThreadLocal pour stocker une instance unique de ExtentTest pour chaque méthode de test exécutée en parallèle. Cela garantit que chaque méthode de test possède sa propre instance ExtentTest et évite les problèmes de concurrence lors de la mise à jour du rapport Extent.

Considérations supplémentaires

  • Rinçage approprié : Assurez-vous que le rapport d’étendue est vidé de manière appropriée pour capturer toutes les données de test.
  • Générateur d’ExtendReports Thread-Safe : Si vous utilisez une classe génératrice ExtentReports personnalisée, assurez-vous qu’elle est thread-safe pour gérer la création de rapports simultanés.
  • Configuration d’exécution parallèle : Pour que cette approche soit efficace, configurez votre suite ou framework TestNG pour exécuter des tests en parallèle.

Conclusion

Dans ce blog, nous avons appris à utiliser la classe ThreadLocal pour la concurrence et différentes classes d’ExtentReport. En utilisant ThreadLocal, vous pouvez gérer avec succès les problèmes de concurrence qui se produisent lors de l’utilisation de la bibliothèque de rapports d’étendue avec l’exécution de tests simultanés dans Selenium. Cette technique garantit des rapports précis et bien organisés, améliorant considérablement vos efforts d’analyse des tests et de débogage. N’oubliez pas que les cadres d’automatisation solides nécessitent une compréhension de la concurrence. Alors, exploitez la puissance de ThreadLocal pour surmonter vos problèmes de tests parallèles !






Source link