{"id":2652,"date":"2024-03-16T09:34:36","date_gmt":"2024-03-16T08:34:36","guid":{"rendered":"https:\/\/ittester.sk\/non-classifiee\/testng-annotations\/"},"modified":"2024-10-22T14:06:18","modified_gmt":"2024-10-22T12:06:18","slug":"testng-annotations","status":"publish","type":"post","link":"https:\/\/ittester.sk\/fr\/tests-automatises\/tutoriel-testng\/testng-annotations\/","title":{"rendered":"Annotations TestNG"},"content":{"rendered":"\n<p>Dans ce tutoriel, nous allons \u00e9tudier toutes les annotations TestNG ainsi que les diff\u00e9rents attributs pris en charge. Une annotation est une \u00e9tiquette ou une m\u00e9tadonn\u00e9e qui fournit des informations suppl\u00e9mentaires sur une classe, une interface ou une m\u00e9thode. TestNG utilise ces annotations pour fournir plusieurs fonctionnalit\u00e9s qui aident \u00e0 construire un cadre de test robuste. \u00c0 ce stade, nous allons examiner en d\u00e9tail chacune des annotations de TestNG et \u00e9tudier leur syntaxe et leur utilisation.<\/p>\n\n<h2 class=\"wp-block-heading\">Table des mati\u00e8res<\/h2>\n<div class=\"wp-block-aioseo-table-of-contents\"><ul><li><a class=\"aioseo-toc-item\" href=\"#aioseo-test\">@Test<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-beforesuite\">@BeforeSuite<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-aftersuite\">@AfterSuite<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-beforeclass\">@BeforeClass<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-afterclass\">@AfterClass<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-beforetest\">@BeforeTest<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-aftertest\">@AfterTest<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-dataprovider\">@DataProvider<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-parameter\">@Parameter<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-listener\">@Listener<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-factory\">@Factory<\/a><\/li><\/ul><\/div>\n<h2 class=\"wp-block-heading\" id=\"aioseo-test\">@Test<\/h2>\n\n<p>@Test est l&rsquo;annotation la plus importante et la plus utilis\u00e9e de TestNG. Il est utilis\u00e9 pour d\u00e9signer une m\u00e9thode en tant que \u00ab\u00a0test\u00a0\u00bb. Ainsi, toute m\u00e9thode sur laquelle figure l&rsquo;annotation @Test est consid\u00e9r\u00e9e comme un test TestNG.<\/p>\n\n<p><strong>@Test<\/strong><\/p>\n\n<p><strong>public void sampleTest() {  <\/strong><\/p>\n\n<p><strong>  \/\/Toute logique de test<\/strong><\/p>\n\n<p><strong>  System.out.println(\u00ab\u00a0Hi ! ITtester.sk here !\u00a0\u00bb) ;  <\/strong><\/p>\n\n<p><strong>}<\/strong><\/p>\n\n<p>Examinons maintenant quelques attributs importants des annotations @Test :<\/p>\n\n<p><strong>1. description<\/strong> &#8211; l&rsquo;attribut \u00ab\u00a0description\u00a0\u00bb est utilis\u00e9 pour fournir une description de la m\u00e9thode d&rsquo;essai. Il contient g\u00e9n\u00e9ralement un r\u00e9sum\u00e9 d&rsquo;une ligne du test.<\/p>\n\n<p><strong>@Test(description = \u00ab\u00a0R\u00e9sum\u00e9 du test\u00a0\u00bb)<\/strong><\/p>\n\n<p><strong>2. dataProvider<\/strong> &#8211; Cet attribut permet de cr\u00e9er des tests bas\u00e9s sur des donn\u00e9es. Permet de sp\u00e9cifier le nom du fournisseur de donn\u00e9es pour le test.<\/p>\n\n<p><strong>@Test(dataProvider = \u00ab\u00a0nom du fournisseur de donn\u00e9es\u00a0\u00bb)<\/strong><\/p>\n\n<p><strong>3. priorit\u00e9<\/strong> &#8211; Cet attribut permet de classer les m\u00e9thodes de test par ordre de priorit\u00e9. La priorit\u00e9 par d\u00e9faut commence \u00e0 0 et les tests sont ex\u00e9cut\u00e9s dans l&rsquo;ordre croissant.<\/p>\n\n<p><strong>@Test(priorit\u00e9 = 2)<\/strong><\/p>\n\n<p><strong>4. enabled : cet<\/strong> attribut permet de d\u00e9terminer si la m\u00e9thode de test sera ex\u00e9cut\u00e9e avec l&rsquo;ensemble ou la classe.<\/p>\n\n<p><strong>@Test(enabled = false)<\/strong><\/p>\n\n<p><strong>5. groupes<\/strong> &#8211; utilis\u00e9s pour d\u00e9terminer les groupes auxquels la m\u00e9thode d&rsquo;essai appartient.<\/p>\n\n<p><strong>@Test(groups = { \u00ab\u00a0sanity\u00a0\u00bb, \u00ab\u00a0regression\u00a0\u00bb })<\/strong><\/p>\n\n<p><strong>7. dependsOnMethods<\/strong> &#8211; Utilis\u00e9 pour sp\u00e9cifier les m\u00e9thodes dont d\u00e9pend la m\u00e9thode de test. La m\u00e9thode de test n&rsquo;est ex\u00e9cut\u00e9e que lorsque les tests d\u00e9pendants ont \u00e9t\u00e9 ex\u00e9cut\u00e9s avec succ\u00e8s.<\/p>\n\n<p><strong>@Test(dependsOnMethods = { \u00ab\u00a0dependentTestMethodName\u00a0\u00bb })<\/strong><\/p>\n\n<p><strong>8. dependsOnGroups<\/strong> &#8211; Permet de sp\u00e9cifier les groupes dont d\u00e9pend la m\u00e9thode de test.<\/p>\n\n<p><strong>@Test(dependsOnGroups = { \u00ab\u00a0dependentGroup\u00a0\u00bb })<\/strong><\/p>\n\n<p><strong>9. alwaysRun<\/strong> &#8211; Si la valeur est True, la m\u00e9thode de test sera ex\u00e9cut\u00e9e m\u00eame si les m\u00e9thodes d\u00e9pendantes \u00e9chouent.<\/p>\n\n<p><strong>@Test(alwaysRun=True)<\/strong><\/p>\n\n<p><strong>10. timeOut<\/strong> &#8211; permet d&rsquo;entrer la valeur du timeout pour le test (en millisecondes). Si le test dure plus longtemps que le d\u00e9lai sp\u00e9cifi\u00e9, il est interrompu et marqu\u00e9 comme ayant \u00e9chou\u00e9.<\/p>\n\n<p><strong>@Test (timeOut = 500)<\/strong><\/p>\n\n<h2 class=\"wp-block-heading\" id=\"aioseo-beforesuite\">@BeforeSuite<\/h2>\n\n<p>La m\u00e9thode annot\u00e9e n&rsquo;est ex\u00e9cut\u00e9e qu&rsquo;une seule fois avant l&rsquo;ex\u00e9cution de tous les tests de cette suite.<\/p>\n\n<h2 class=\"wp-block-heading\" id=\"aioseo-aftersuite\">@AfterSuite<\/h2>\n\n<p>La m\u00e9thode annot\u00e9e n&rsquo;est ex\u00e9cut\u00e9e qu&rsquo;une seule fois apr\u00e8s l&rsquo;ex\u00e9cution de tous les tests de cette suite.<\/p>\n\n<h2 class=\"wp-block-heading\" id=\"aioseo-beforeclass\">@BeforeClass<\/h2>\n\n<p>La m\u00e9thode annot\u00e9e n&rsquo;est ex\u00e9cut\u00e9e qu&rsquo;une seule fois avant l&rsquo;appel de la premi\u00e8re m\u00e9thode de test de la classe actuelle.<\/p>\n\n<h2 class=\"wp-block-heading\" id=\"aioseo-afterclass\">@AfterClass<\/h2>\n\n<p>La m\u00e9thode annot\u00e9e n&rsquo;est ex\u00e9cut\u00e9e qu&rsquo;une seule fois apr\u00e8s l&rsquo;ex\u00e9cution de toutes les m\u00e9thodes de test de la classe actuelle.<\/p>\n\n<h2 class=\"wp-block-heading\" id=\"aioseo-beforetest\">@BeforeTest<\/h2>\n\n<p><test>La m\u00e9thode annot\u00e9e est ex\u00e9cut\u00e9e avant toute m\u00e9thode de test appartenant aux classes situ\u00e9es \u00e0 l&rsquo;int\u00e9rieur de la balise.<\/test><\/p>\n\n<h2 class=\"wp-block-heading\" id=\"aioseo-aftertest\">@AfterTest<\/h2>\n\n<p><test>La m\u00e9thode annot\u00e9e est ex\u00e9cut\u00e9e apr\u00e8s l&rsquo;ex\u00e9cution de toutes les m\u00e9thodes de test appartenant aux classes contenues dans la balise.<\/test><\/p>\n\n<h2 class=\"wp-block-heading\" id=\"aioseo-dataprovider\">@DataProvider<\/h2>\n\n<p>En utilisant @DataProvider, nous pouvons cr\u00e9er un cadre ax\u00e9 sur les donn\u00e9es dans lequel les donn\u00e9es sont transmises \u00e0 la m\u00e9thode de test appropri\u00e9e et plusieurs it\u00e9rations du test sont ex\u00e9cut\u00e9es pour diff\u00e9rentes valeurs de donn\u00e9es de test transmises par la m\u00e9thode @DataProvider. La m\u00e9thode annot\u00e9e par @DataProvider renvoie un tableau ou un objet 2D.<\/p>\n\n<p><strong>\/Le fournisseur de donn\u00e9es renvoie un tableau 2D d&rsquo;une matrice 3*2<\/strong><\/p>\n\n<p><strong>@DataProvider(name = \u00ab\u00a0dataProvider1\u00a0\u00bb)<\/strong><\/p>\n\n<p><strong>  public Object[][] dataProviderMethod1() {<\/strong><\/p>\n\n<p><strong>  return new Object[][] {{\u00ab\u00a0it\u00a0\u00bb, \u00ab\u00a0tester\u00a0\u00bb},{\u00ab\u00a0k1\u00a0\u00bb, \u00ab\u00a0r1\u00a0\u00bb},{\u00ab\u00a0k2\u00a0\u00bb, \u00ab\u00a0r2\u00a0\u00bb}} ;<\/strong><\/p>\n\n<p><strong>  }<\/strong><\/p>\n\n<p><strong>  \/\/Cette m\u00e9thode est li\u00e9e au fournisseur de donn\u00e9es ci-dessus.<\/strong><\/p>\n\n<p><strong>  \/Le sc\u00e9nario de test sera ex\u00e9cut\u00e9 3 fois avec des valeurs diff\u00e9rentes.<\/strong><\/p>\n\n<p><strong>  @Test(dataProvider = \u00ab\u00a0dataProvider1\u00a0\u00bb)<\/strong><\/p>\n\n<p><strong>  public void sampleTest(String str1, String str2) {<\/strong><\/p>\n\n<p><strong>  System.out.println(str1 + \u00a0\u00bb \u00a0\u00bb + str2) ;<\/strong><\/p>\n\n<p><strong>  }<\/strong><\/p>\n\n<h2 class=\"wp-block-heading\" id=\"aioseo-parameter\">@Param\u00e8tre<\/h2>\n\n<p>La balise @Parameter est utilis\u00e9e pour passer des param\u00e8tres aux scripts de test. La valeur de la balise @Parameter peut \u00eatre transmise via le fichier testng.xml.<\/p>\n\n<p>Exemple de fichier testng.xml avec la balise parameter :<\/p>\n\n<p><strong>&lt;@Test (timeOut = 500) suite name=\u00a0\u00bbsampleTestSuite\u00a0\u00bb&gt;<\/strong><\/p>\n\n<p><strong>   &lt;test name=\u00a0\u00bbsampleTest\u00a0\u00bb&gt;   <\/strong><\/p>\n\n<p><strong>      &lt;parameter name=\u00a0\u00bbsampleParamName\u00a0\u00bb value=\u00a0\u00bbsampleParamValue\u00a0\u00bb\/&gt;<\/strong><\/p>\n\n<p><strong>      &lt;classes&gt;<\/strong><\/p>\n\n<p><strong>         &lt;class name=\u00a0\u00bbTestFile\u00a0\u00bb \/&gt;<\/strong><\/p>\n\n<p><strong>      &lt;\/classes&gt;      <\/strong><\/p>\n\n<p><strong>   &lt;\/test&gt;<\/strong><\/p>\n\n<p><strong>&lt;\/suite&gt;<\/strong><\/p>\n\n<p>Exemple de script de test avec l&rsquo;annotation @Parameter :<\/p>\n\n<p><strong>public class TestFile {<\/strong><\/p>\n\n<p><strong>  @Test<\/strong><\/p>\n\n<p><strong>  @Parameters(\u00ab\u00a0sampleParamName\u00a0\u00bb)<\/strong><\/p>\n\n<p><strong>  public void parameterTest(String paramValue) {<\/strong><\/p>\n\n<p><strong>  System.out.println(\u00ab\u00a0sampleParamName = \u00a0\u00bb + sampleParamName) ;<\/strong><\/p>\n\n<p><strong>  }<\/strong><\/p>\n\n<h2 class=\"wp-block-heading\" id=\"aioseo-listener\">@Listener<\/h2>\n\n<p>TestNG nous fournit diff\u00e9rents types d&rsquo;\u00e9couteurs avec lesquels nous pouvons effectuer une action lorsqu&rsquo;un \u00e9v\u00e9nement est d\u00e9clench\u00e9. G\u00e9n\u00e9ralement, les auditeurs testNG sont utilis\u00e9s pour configurer les rapports et la journalisation.<\/p>\n\n<p><strong>@Listeners(PackageName.CustomizedListenerClassName.class)<\/strong><\/p>\n\n<p><strong>public class TestClass {  <\/strong><\/p>\n\n<p><strong>  WebDriver driver= new FirefoxDriver();@Test  <\/strong><\/p>\n\n<p><strong>  public void testMethod(){<\/strong><\/p>\n\n<p><strong>  \/\/tester la logique<\/strong><\/p>\n\n<p><strong>  }<\/strong><\/p>\n\n<p><strong>}  <\/strong><\/p>\n\n<h2 class=\"wp-block-heading\" id=\"aioseo-factory\">@Factory<\/h2>\n\n<p>L&rsquo;annotation @Factory contribue \u00e0 l&rsquo;ex\u00e9cution dynamique des cas de test. En utilisant l&rsquo;annotation @Factory, nous pouvons passer des param\u00e8tres \u00e0 l&rsquo;ensemble de la classe de test pendant l&rsquo;ex\u00e9cution du test. Les param\u00e8tres transmis peuvent \u00eatre utilis\u00e9s par une ou plusieurs m\u00e9thodes de test de cette classe.<\/p>\n\n<p>Dans l&rsquo;exemple suivant, la classe TestFactory ex\u00e9cute une m\u00e9thode de test dans la classe TestClass avec diff\u00e9rents jeux de param\u00e8tres &#8211; \u00ab\u00a0k1\u00a0\u00bb et \u00ab\u00a0k2\u00a0\u00bb.<\/p>\n\n<p><strong>public class TestClass{<\/strong><\/p>\n\n<p><strong>  private String str ;<\/strong><\/p>\n\n<p><strong> \n\/\/Constructor<\/strong><\/p>\n\n<p><strong>  public TestClass(String str) {<\/strong><\/p>\n\n<p><strong>  this.str = str ;<\/strong><\/p>\n\n<p><strong>  }<\/strong><\/p>\n\n<p><strong>  @Test<\/strong><\/p>\n\n<p><strong>  public void TestMethod() {<\/strong><\/p>\n\n<p><strong>  System.out.println(str) ;<\/strong><\/p>\n\n<p><strong>  }<\/strong><\/p>\n\n<p><strong>}<\/strong><\/p>\n\n<p><strong>public class TestFactory{<\/strong><\/p>\n\n<p><strong>  \/\/A cause de @Factory, la m\u00e9thode de test dans la classe TestClass<\/strong><\/p>\n\n<p><strong>  \/\/sera ex\u00e9cut\u00e9 deux fois avec les donn\u00e9es \u00ab\u00a0k1\u00a0\u00bb et \u00ab\u00a0k2\u00a0\u00bb.<\/strong><\/p>\n\n<p><strong>  @Factory<\/strong><\/p>\n\n<p><strong>  public Object[] factoryMethod() {<\/strong><\/p>\n\n<p><strong>  return new Object[] { new TestClass(\u00ab\u00a0K1\u00a0\u00bb), new TestClass(\u00ab\u00a0k2\u00a0\u00bb) } ;<\/strong><\/p>\n\n<p><strong>  }<\/strong><\/p>\n\n<p><strong>}<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>TestNG utilise des annotations (tags, m\u00e9tadonn\u00e9es) pour fournir des fonctionnalit\u00e9s qui aident \u00e0 construire un cadre de test robuste.  <\/p>\n","protected":false},"author":8,"featured_media":2653,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[46],"tags":[],"class_list":["post-2652","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutoriel-testng"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/ittester.sk\/fr\/wp-json\/wp\/v2\/posts\/2652","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ittester.sk\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ittester.sk\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ittester.sk\/fr\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/ittester.sk\/fr\/wp-json\/wp\/v2\/comments?post=2652"}],"version-history":[{"count":1,"href":"https:\/\/ittester.sk\/fr\/wp-json\/wp\/v2\/posts\/2652\/revisions"}],"predecessor-version":[{"id":2654,"href":"https:\/\/ittester.sk\/fr\/wp-json\/wp\/v2\/posts\/2652\/revisions\/2654"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ittester.sk\/fr\/wp-json\/wp\/v2\/media\/2653"}],"wp:attachment":[{"href":"https:\/\/ittester.sk\/fr\/wp-json\/wp\/v2\/media?parent=2652"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ittester.sk\/fr\/wp-json\/wp\/v2\/categories?post=2652"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ittester.sk\/fr\/wp-json\/wp\/v2\/tags?post=2652"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}