Guide d'annotation TestNG pour Selenium WebDriver

Paix, travail, mai, résidents de Khabrovsk! Pour ceux qui, comme nous, ont fait irruption dans la semaine de travail entre les vacances, nous avons préparé une traduction que nous voulons coïncider avec le début des inscriptions au cours Java QA Engineer , dont le lancement est prévu pour le 28 mai.



TestNG est un framework de test créé par Cédric Beust qui nous aide à répondre à bon nombre de nos besoins de test. TestNG est largement utilisé avec le sélénium. Vous voulez savoir ce que NG signifie? Cela signifie «nouvelle génération» . TestNG est similaire à JUnit, mais il est plus puissant lorsqu'il s'agit de contrôler le flux de votre programme. L'architecture du framework nous aide à rendre les tests plus structurés et à fournir de meilleurs points de validation.

Quelques fonctionnalités de TestNG qui méritent attention:

  • Annotations puissantes et variées pour prendre en charge vos cas de test.
  • Exécution de tests en parallèle, en utilisant des dépendances entre les tests.
  • La flexibilité pour exécuter vos tests sur différents ensembles de données, via le fichier TestNG.xml ou via le concept de fournisseurs de données.
  • Regroupement et hiérarchisation des cas de test.
  • Génération de rapports HTML, personnalisation à l'aide de différents plugins.
  • Génération de journaux d'exécution des tests.
  • Intégration facile avec Eclipse, Maven, Jenkins, etc.

En règle générale, le processus de test à l'aide de TestNG comprend les étapes suivantes:



Avant de passer aux annotations TestNG pour Selenium, nous décrivons les conditions préalables à la configuration de TestNG.

Prérequis:

  • Kit de développement Java
  • Eclipse ou tout autre IDE
  • TestNG installé dans Eclipse ou dans votre IDE

Remarque: les annotations Java ne peuvent être utilisées qu'avec Java version 1.5 et supérieure.

Si vous débutez avec TestNG, consultez l'article sur la façon d'exécuter le premier script d'automatisation avec TestNG .

Qu'est-ce qu'une annotation?

Une annotation est une étiquette qui fournit des informations supplémentaires sur une classe ou une méthode ( Note du traducteur: les annotations en java peuvent être appliquées non seulement aux classes et méthodes, mais aussi à d'autres éléments ). Pour les annotations, le préfixe «@» est utilisé. TestNG utilise des annotations pour aider à créer un cadre de test robuste. Examinons les annotations TestNG utilisées pour automatiser les tests avec Selenium.


@Test

Il s'agit de l'annotation la plus importante de TestNG, qui contient la logique principale du test . Toutes les fonctions automatisées sont dans la méthode avec l'annotation @Test . Il possède divers attributs avec lesquels le lancement de la méthode peut être configuré.

L'exemple de code ci-dessous vérifie la transition URL:

 @Test public void testCurrentUrl() throws InterruptedException { driver.findElement(By.xpath("//*[@id='app']/header/aside/ul/li[4]/a")) .click(); String currentUrl = driver.getCurrentUrl(); assertEquals( currentUrl, "https://automation.lambdatest.com/timeline/?viewType=build&page=1", "url did not matched"); } 

@BeforeTest

Une méthode avec cette annotation est exécutée avant l'exécution de la première méthode avec l'annotation @Test . (Note du traducteur: dans le cadre du test défini dans la section test du fichier de configuration xml) . Vous pouvez utiliser cette annotation dans TestNG avec Selenium pour configurer votre navigateur. Par exemple, lancez un navigateur et développez-le en plein écran, définissez des paramètres de navigateur spécifiques, etc.

Voici un exemple pour BeforeTest, dans lequel le navigateur se développe en plein écran:

 @BeforeTest public void profileSetup() { driver.manage().window().maximize(); } 

@AfterTest

Les méthodes marquées de cette annotation s'exécutent après toutes les méthodes @Test de votre test. ( Note du traducteur: dans le cadre du test défini dans la section test du fichier de configuration xml, la «classe actuelle» n'est pas correctement écrite dans l'original ). Il s'agit d'une annotation utile qui est utile pour fournir des résultats de test. Vous pouvez utiliser cette annotation pour créer un rapport sur vos tests et l'envoyer par courrier électronique aux parties intéressées.

Exemple de code:

 @AfterTest public void reportReady() { System.out.println("Report is ready to be shared, with screenshots of tests"); } 

@BeforeMethod

Les méthodes avec cette annotation sont exécutées avant chaque méthode @Test . Vous pouvez l'utiliser pour tester la connexion à la base de données avant d'exécuter le test. Ou, par exemple, lorsque vous testez une fonctionnalité qui dépend de la connexion de l'utilisateur, entrez le code pour entrer dans le système ici.
Voici un extrait de code illustrant la connexion LambdaTest:

 @BeforeMethod public void checkLogin() { driver.get("https://accounts.lambdatest.com/login"); driver.findElement(By.xpath("//input[@name='email']")).sendKeys("sadhvisingh24@gmail.com"); driver.findElement(By.xpath("//input[@name='password']")).sendKeys("activa9049"); driver.findElement(By.xpath("//*[@id='app']/section/form/div/div/button")).click(); } 

@AfterMethod

Les méthodes avec cette annotation sont lancées après chaque méthode @Test . Vous pouvez utiliser cette annotation pour prendre des captures d'écran chaque fois que vous exécutez le test.
Voici un extrait de code montrant comment faire une capture d'écran:

 @AfterMethod public void screenShot() throws IOException { TakesScreenshot scr = ((TakesScreenshot) driver); File file1 = scr.getScreenshotAs(OutputType.FILE); FileUtils.copyFile(file1, new File(":\\test-output\\test1.PNG")); } 

@BeforeClass

Une méthode avec cette annotation s'exécutera avant la première méthode de test dans la classe actuelle. Vous pouvez utiliser cette annotation pour configurer les propriétés du navigateur, initialiser le pilote, ouvrir un navigateur avec l'URL souhaitée, etc.

Exemple de code pour BeforeClass:

 @BeforeClass public void appSetup() { driver.get(url); } 

@AfterClass

Une méthode avec cette annotation s'exécutera après la dernière méthode de test de la classe actuelle. Cette annotation dans TestNG peut être utilisée pour effectuer des actions de nettoyage des ressources une fois le test terminé, telles que la fermeture du pilote, etc.
Voici un exemple d'extrait de code montrant la fermeture du pilote:

 @AfterClass public void closeUp() { driver.close(); } 

@BeforeSuite

Une suite de tests (suite) peut être composée de plusieurs classes, cette annotation est exécutée avant toutes les méthodes de test de toutes les classes. Cette annotation marque le point d'entrée au démarrage. L' @BeforeSuite dans TestNG peut être utilisée pour exécuter des fonctions courantes, telles que la configuration et l'exécution de Selenium ou de pilotes Web distants, etc.
Un exemple d'annotation @BeforeSuite dans TestNG montrant la configuration du pilote:

 @BeforeSuite public void setUp() { System.setProperty( "webdriver.chrome.driver", ":\\selenium\\chromedriver.exe"); driver = new ChromeDriver(); } 

@AfterSuite

Cette annotation dans TestNG démarre après l'exécution de toutes les méthodes de test de toutes les classes. Cette annotation peut être utilisée pour nettoyer avant de terminer les tests lorsque vous utilisez plusieurs classes, par exemple, la fermeture de pilotes, etc.
Ci-dessous, un extrait de code pour l'annotation @AfterSuite dans TestNG pour Selenium:

 @AfterSuite public void cleanUp() { System.out.println("All close up activities completed"); } 

@BeforeGroups

TestNG peut regrouper des tests en utilisant l'attribut group dans les annotations @Test . Par exemple, si vous souhaitez que toutes les fonctions similaires liées à la gestion des utilisateurs soient combinées, vous pouvez marquer les tests, tels que le tableau de bord (panneau utilisateur), le profil (profil), les transactions (transactions) et similaires, dans un groupe, tels que user_management. L' @BeforeGroups dans TestNG permet de lancer certaines actions devant le groupe de test spécifié. Cette annotation peut être utilisée si le groupe se concentre sur une fonctionnalité, comme indiqué dans l'exemple ci-dessus. L' @BeforeGroup peut contenir une fonction de connexion requise pour exécuter des tests dans un groupe, par exemple, tester un panneau utilisateur, un profil utilisateur, etc.

Un exemple d'utilisation de @BeforeGroups :

 @BeforeGroups("urlValidation") public void setUpSecurity() { System.out.println("url validation test starting"); } 

@AfterGroups

Cette annotation est lancée après l'exécution de toutes les méthodes de test du groupe spécifié.

Exemple de code pour l'annotation @AfterGroups dans TestNG pour Selenium:

 @AfterGroups("urlValidation") public void tearDownSecurity() { System.out.println("url validation test finished"); } 

Exemple

Le code ci-dessous montre des exemples d'utilisation de toutes les annotations décrites ci-dessus:

 import org.apache.commons.io.FileUtils; import org.openqa.selenium.By; import org.openqa.selenium.OutputType; import org.openqa.selenium.TakesScreenshot; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.testng.annotations.*; import java.io.File; import java.io.IOException; import java.util.concurrent.TimeUnit; import static org.testng.Assert.assertEquals; public class AnnotationsTestNG { private WebDriver driver; private String url = "https://www.lambdatest.com/"; @BeforeSuite public void setUp() { System.setProperty( "webdriver.chrome.driver", ":\\selenium\\chromedriver.exe"); driver = new ChromeDriver(); driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS); System.out.println("The setup process is completed"); } @BeforeTest public void profileSetup() { driver.manage().window().maximize(); System.out.println("The profile setup process is completed"); } @BeforeClass public void appSetup() { driver.get(url); System.out.println("The app setup process is completed"); } @BeforeMethod public void checkLogin() { driver.get("https://accounts.lambdatest.com/login"); driver.findElement(By.xpath("//input[@name='email']")).sendKeys("sadhvisingh24@gmail.com"); driver.findElement(By.xpath("//input[@name='password']")).sendKeys("activa9049"); driver.findElement(By.xpath("//*[@id='app']/section/form/div/div/button")).click(); System.out.println("The login process on lamdatest is completed"); } @Test(groups = "urlValidation") public void testCurrentUrl() throws InterruptedException { driver.findElement(By.xpath("//*[@id='app']/header/aside/ul/li[4]/a")).click(); Thread.sleep(6000); String currentUrl = driver.getCurrentUrl(); assertEquals(currentUrl, "https://automation.lambdatest.com/timeline/?viewType=build&page=1", "url did not matched"); System.out.println("The url validation test is completed"); } @AfterMethod public void screenShot() throws IOException { TakesScreenshot scr = ((TakesScreenshot) driver); File file1 = scr.getScreenshotAs(OutputType.FILE); FileUtils.copyFile(file1, new File(":\\test-output\\test1.PNG")); System.out.println("Screenshot of the test is taken"); } @AfterClass public void closeUp() { driver.close(); System.out.println("The close_up process is completed"); } @AfterTest public void reportReady() { System.out.println("Report is ready to be shared, with screenshots of tests"); } @AfterSuite public void cleanUp() { System.out.println("All close up activities completed"); } @BeforeGroups("urlValidation") public void setUpSecurity() { System.out.println("url validation test starting"); } @AfterGroups("urlValidation") public void tearDownSecurity() { System.out.println("url validation test finished"); } } 

Rapport TestNG:



Sortie console:



Note du traducteur:

  • pour exécuter le test, modifiez le chemin d'accès à chromedriver.exe dans la méthode setUp () et le chemin d'accès au dossier de capture d'écran dans la méthode screenShot (). De plus, pour une exécution réussie du test, la méthode checkLogin () doit avoir un nom d'utilisateur et un mot de passe valides.
  • Dépendances maven utilisées:

 <dependencies> <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>6.14.3</version> <scope>test</scope> </dependency> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-chrome-driver</artifactId> <version>3.141.59</version> <scope>test</scope> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.6</version> <scope>test</scope> </dependency> </dependencies> 
Séquence d'annotations TestNG pour le sélénium

Les annotations décrites ci-dessus sont exécutées lors de l'exécution dans l'ordre suivant:

  • Avant
  • Avant le test
  • Avant la classe
  • BeforeGroups
  • Avant la méthode
  • Test
  • Aftermethod
  • Aftergroups
  • Afterclass
  • Aftertest
  • Aftersuite

Voici l'ordre de leur exécution:



Attributs utilisés avec des annotations dans TestNG

Les annotations dans TestNG ont des attributs que vous pouvez utiliser pour personnaliser. Ils aident à configurer l'ordre d'exécution des méthodes de test.

Ces attributs sont:

  • description : vous pouvez spécifier une description de la méthode de test.
    Par exemple, @Test (description = "ce test vérifie la connexion").
  • alwaysRun : cet attribut garantit que la méthode de test sera toujours exécutée, même si les tests dont elle dépend sont abandonnés. Lorsque la valeur de l'attribut est vraie, cette méthode s'exécutera toujours.
    Par exemple, @Test (alwaysRun = true).
  • dataProvider : définit le nom du fournisseur de données pour la méthode de test. Supposons que vous allez exécuter vos tests dans plusieurs navigateurs, puis dans la méthode de test avec l'attribut dataProvider, vous pouvez ajouter des paramètres pour le navigateur et sa version, qui seront transmis à la méthode par le fournisseur de données. Dans ce cas, le test contenant cet attribut utilisera cette entrée pour exécuter les tests dans plusieurs navigateurs.
    Par exemple, @Test (dataProvider = "cross-browser-testing").
  • dependOnMethods : fournit des informations sur l'ordre dans lequel les tests sont exécutés. Un test avec cet attribut ne sera exécuté que si le test dont il dépend est réussi. Si le test dont dépend la méthode tombe, le test ne démarre pas.
    Par exemple, @Test (depenOnmethod = "login").
  • groupes : permet de regrouper vos méthodes de test centrées sur une fonctionnalité en un seul groupe.
    Par exemple, @Test (groups = ”Payment_Module”).
    Cet attribut vous permet également de contrôler les tests à exécuter. Lorsque vous exécutez des tests, vous pouvez ignorer certains groupes ou, inversement, exécuter uniquement certains groupes. Il vous suffit de spécifier les groupes nécessaires dans le fichier TestNG.xml. Dans la balise include , spécifiez les groupes que vous souhaitez exécuter et dans la balise d' exclude que vous souhaitez ignorer.
  • dependOnGroups : exécute les fonctions des deux attributs mentionnés ci-dessus, c'est-à-dire qu'il détermine la dépendance de la méthode de test sur le groupe spécifié. Cette méthode de test ne sera lancée qu'une fois le groupe de tests spécifié terminé.
    Par exemple, @Test (depenOnMethods = "Payment_Module").
  • priorité : nous aide à hiérarchiser les méthodes de test. Lorsque TestNG exécute les méthodes de test, il peut le faire dans un ordre aléatoire. Dans un scénario où vous souhaitez que vos tests s'exécutent dans le bon ordre, vous pouvez utiliser l'attribut Priority. La priorité par défaut pour toutes les méthodes de test est 0. Premièrement, les tests sont exécutés avec une valeur de priorité inférieure.
    Par exemple, @Test (priorité = 1), @Test (priorité = 2). Dans ce cas, le test avec une priorité égale à un sera exécuté en premier, puis le test avec la priorité deux.
  • enabled : cet attribut est utilisé lorsque vous devez ignorer et ne pas exécuter de test spécifique. Tout ce que vous avez à faire est de le mettre sur faux.
    Par exemple, @Test (enabled = false).
  • timeout : définit la durée pendant laquelle le test doit être terminé. Si l'exécution du test dépasse la durée spécifiée par l'attribut, le test échoue avec une exception qui lance org.testng.internal.thread.ThreadTimeoutException
    Par exemple, @Test ( @Test = 500). Veuillez noter que l'heure est indiquée en millisecondes .
  • invocationCount : fonctionne comme une boucle. Le test s'exécutera autant de fois que spécifié dans invocationCount.
    Par exemple, @Test (invocationCount = 5) sera exécuté 5 fois.
  • invocationTimeOut : utilisé en conjonction avec l'attribut invocationCount ci-dessus. La valeur de cet attribut avec invocationCount indique que le test sera exécuté autant de fois que spécifié dans invocationCount et pendant le temps spécifié dans l'attribut invocationTimeOut.
    Par exemple, @Test (invocationCount = 5, invocationTimeOut = 20).
  • expectExceptions : Aide à gérer les exceptions qui devraient être levées dans la méthode de test. Si l'exception spécifiée dans l'attribut est levée par la méthode de test, le test a réussi. Sinon, l'absence d'une exception ou la levée d'une autre exception non spécifiée dans l'attribut échouera au test.
    Par exemple, @Test ( @Test = {ArithmeticException.class}).

Ci-dessus, les attributs utilisés avec les annotations dans TestNG avec Selenium. Voici un extrait de code illustrant l'utilisation des attributs ci-dessus:

 import static org.testng.Assert.assertEquals; import java.io.File; import java.io.IOException; import org.apache.commons.io.FileUtils; import org.openqa.selenium.By; import org.openqa.selenium.OutputType; import org.openqa.selenium.TakesScreenshot; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.testng.annotations.AfterClass; import org.testng.annotations.AfterGroups; import org.testng.annotations.AfterMethod; import org.testng.annotations.AfterSuite; import org.testng.annotations.AfterTest; import org.testng.annotations.BeforeClass; import org.testng.annotations.BeforeGroups; import org.testng.annotations.BeforeSuite; import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; public class AnnotationsTest { private WebDriver driver; private String url = "https://www.lambdatest.com/"; @BeforeSuite public void setUp() { System.setProperty( "webdriver.chrome.driver", ":\\selenium\\chromedriver.exe"); driver = new ChromeDriver(); System.out.println("The setup process is completed"); } @BeforeTest public void profileSetup() { driver.manage().window().maximize(); System.out.println("The profile setup process is completed"); } @BeforeClass public void appSetup() { driver.get(url); System.out.println("The app setup process is completed"); } @Test(priority = 2) public void checkLogin() { driver.get("https://accounts.lambdatest.com/login"); driver.findElement(By.xpath("//input[@name='email']")).sendKeys("sadhvisingh24@gmail.com"); driver.findElement(By.xpath("//input[@name='password']")).sendKeys("xxxxx"); driver.findElement(By.xpath("//*[@id='app']/section/form/div/div/button")).click(); System.out.println("The login process on lamdatest is completed"); } @Test(priority = 0, description = "this test validates the sign-up test") public void signUp() throws InterruptedException { WebElement link = driver.findElement(By.xpath("//a[text()='Free Sign Up']")); link.click(); WebElement organization = driver.findElement(By.xpath("//input[@name='organization_name']")); organization.sendKeys("LambdaTest"); WebElement firstName = driver.findElement(By.xpath("//input[@name='name']")); firstName.sendKeys("Test"); WebElement email = driver.findElement(By.xpath("//input[@name='email']")); email.sendKeys("User622@gmail.com"); WebElement password = driver.findElement(By.xpath("//input[@name='password']")); password.sendKeys("TestUser123"); WebElement phoneNumber = driver.findElement(By.xpath("//input[@name='phone']")); phoneNumber.sendKeys("9412262090"); WebElement termsOfService = driver.findElement(By.xpath("//input[@name='terms_of_service']")); termsOfService.click(); WebElement button = driver.findElement(By.xpath("//button[text()='Signup']")); button.click(); } @Test(priority = 3, alwaysRun = true, dependsOnMethods = "check_login", description = "this test validates the URL post logging in", groups = "url_validation") public void testCurrentUrl() throws InterruptedException { driver.findElement(By.xpath("//*[@id='app']/header/aside/ul/li[4]/a")).click(); String currentUrl = driver.getCurrentUrl(); assertEquals( currentUrl, "https://automation.lambdatest.com/timeline/?viewType=build&page=1", "url did not matched"); System.out.println("The url validation test is completed"); } @Test(priority = 1, description = "this test validates the logout functionality", timeOut = 25000) public void logout() throws InterruptedException { Thread.sleep(6500); driver.findElement(By.xpath("//*[@id='userName']")).click(); driver.findElement(By.xpath("//*[@id='navbarSupportedContent']/ul[2]/li/div/a[5]")).click(); } @Test(enabled = false) public void skipMethod() { System.out.println("this method will be skipped from the test run using the attribute enabled=false"); } @Test(priority = 6, invocationCount = 5, invocationTimeOut = 20) public void invocationcountShowCaseMethod() { System.out.println("this method will be executed by 5 times"); } @AfterMethod() public void screenshot() throws IOException { TakesScreenshot scr = ((TakesScreenshot) driver); File file1 = scr.getScreenshotAs(OutputType.FILE); FileUtils.copyFile(file1, new File(":\\test-output\\test1.PNG")); System.out.println("Screenshot of the test is taken"); } @AfterClass public void closeUp() { driver.close(); System.out.println("The close_up process is completed"); } @AfterTest public void reportReady() { System.out.println("Report is ready to be shared, with screenshots of tests"); } @AfterSuite public void cleanUp() { System.out.println("All close up activities completed"); } @BeforeGroups("urlValidation") public void setUpSecurity() { System.out.println("url validation test starting"); } @AfterGroups("urlValidation") public void tearDownSecurity() { System.out.println("url validation test finished"); } } 

Sortie vers la console:



Rapport TestNG:



Annotations supplémentaires dans TestNG

Il y a quelques annotations plus utiles pour nous aider à atteindre nos objectifs.

@DataProvider

Une méthode avec cette annotation est utilisée pour fournir des données à une méthode de test dans laquelle l'attribut dataProvider est défini. Cette méthode aide à créer des tests basés sur les données dans lesquels plusieurs ensembles de valeurs d'entrée peuvent être passés. La méthode doit renvoyer un tableau ou un objet bidimensionnel.

L'annotation @DataProvider a deux attributs:

  • nom - cet attribut est utilisé pour indiquer le nom du fournisseur de données. S'il n'est pas spécifié, le nom de méthode par défaut est utilisé.
  • parallèle - cet attribut vous permet d'exécuter des tests en parallèle avec différentes données. Avoir cet attribut est l'un des avantages de TestNG par rapport à Junit. La valeur par défaut est false.

L'exemple ci-dessous montre l'utilisation de l'annotation @DataProvider avec le nom donné et les attributs parallèles.

 @DataProvider(name = "SetEnvironment", parallel = true) public Object[][] getData() { Object[][] browserProperty = new Object[][]{ {Platform.WIN8, "chrome", "70.0"}, {Platform.WIN8, "chrome", "71.0"} }; return browserProperty; } 

@Factory

Cette annotation permet d'exécuter plusieurs classes de test via une seule classe de test. Autrement dit, il définit et crée des tests de manière dynamique.

L'extrait de code ci-dessous montre l'utilisation de l'annotation @Factory , qui aide à appeler les méthodes de classe de test.

 import org.testng.annotations.Test; import org.testng.annotations.Factory; class FactorySimplyTest1 { @Test public void testMethod1() { System.out.println("This is to test for method 1 for Factor Annotation"); } } class FactorySimpleTest2 { @Test public void testMethod2() { System.out.println("This is to test for method 2 for Factor Annotation"); } } public class FactoryAnnotation { @Factory() @Test public Object[] getTestFactoryMethod() { Object[] factoryTest = new Object[2]; factoryTest[0] = new FactorySimplyTest1(); factoryTest[1] = new FactorySimpleTest2(); return factoryTest; } } 

Sortie console:



@Parameters

Cette annotation vous permet de passer des paramètres à vos tests via le fichier TestNG.xml. Ceci est utile lorsque vous devez transférer une quantité limitée de données vers vos tests. Pour les ensembles de données complexes et volumineux, il est préférable d'utiliser l'annotation @DataProvider ou Excel.

Exemple d'utilisation:

 @Parameters({"username", "password"}) @Test() public void checkLogin(String username, String password) { driver.get("https://accounts.lambdatest.com/login"); driver.findElement(By.xpath("//input[@name='email']")).sendKeys(username); driver.findElement(By.xpath("//input[@name='password']")).sendKeys(password); driver.findElement(By.xpath("//*[@id='app']/section/form/div/div/button")).click(); System.out.println("The login process on lamdatest is completed"); } 

Dans le fichier TestNG.xml, les paramètres sont définis comme suit:

 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="Suite"> <test thread-count="5" name="Annotations"> <parameter name="username" value="sadhvisingh24@gmail.com" /> <parameter name="password" value="XXXXX" /> <classes> <class name="Parameter_annotation"/> </classes> </test> <!-- Annotations --> </suite> <!-- Suite --> 

@Listener

Cette annotation facilite la journalisation et les rapports. Il existe plusieurs écouteurs:

  • IExecutionListener
  • IAnnotationTransformer
  • ISuiteListener
  • ITestListener

Mais nous laisserons la description de ces auditeurs et leur utilisation pour un autre article.

C'est tout!

Le point clé à considérer lorsque vous travaillez avec toutes ces annotations et attributs est que vous devez utiliser Java version 1.5 ou supérieure, car les annotations ne sont pas prises en charge dans les versions antérieures de java.

Toutes les annotations et les attributs TestNG ci-dessus contribuent à améliorer la structure et la lisibilité du code. Cela permet de fournir des rapports détaillés, ce qui rend les rapports d'état plus faciles et plus utiles. L'utilisation de ces annotations dans TestNG for Selenium est entièrement à la hauteur des besoins de votre entreprise. Par conséquent, il est important de choisir les bonnes annotations et de les utiliser correctement. Vous pouvez essayer ces annotations dans TestNG sur la grille de sélénium LambdaTest dès maintenant!

Ceux qui ont lu jusqu'à la fin sont invités à un webinaire ouvert gratuit, qui aura lieu le 14 mai par notre professeur, Dmitry Eremin . Eh bien, selon la tradition établie, nous attendons vos commentaires, amis.

Source: https://habr.com/ru/post/fr450872/


All Articles