{"id":1228,"date":"2024-03-16T09:34:36","date_gmt":"2024-03-16T08:34:36","guid":{"rendered":"https:\/\/ittester.sk\/automatisiertes-testen\/testng-annotations\/"},"modified":"2024-07-11T09:43:36","modified_gmt":"2024-07-11T07:43:36","slug":"testng-annotations","status":"publish","type":"post","link":"https:\/\/ittester.sk\/de\/automatisiertes-testen\/testng-anleitung\/testng-annotations\/","title":{"rendered":"TestNG-Bemerkungen"},"content":{"rendered":"\n<p>In diesem Tutorial werden wir alle TestNG-Annotationen zusammen mit den verschiedenen unterst\u00fctzten Attributen untersuchen. Eine Anmerkung ist ein Tag oder ein Metadatum, das zus\u00e4tzliche Informationen \u00fcber eine Klasse, Schnittstelle oder Methode liefert. TestNG verwendet diese Annotationen, um verschiedene Funktionen bereitzustellen, die beim Aufbau eines robusten Test-Frameworks helfen. An dieser Stelle werden wir einen detaillierten Blick auf jede der TestNG-Annotationen werfen und ihre Syntax und Verwendung untersuchen.<\/p>\n\n<h2 class=\"wp-block-heading\">Inhalts\u00fcbersicht<\/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 ist die wichtigste und am h\u00e4ufigsten verwendete Annotation von TestNG. Es wird verwendet, um eine Methode als &#8222;Test&#8220; zu bezeichnen. Jede Methode, \u00fcber der die @Test-Annotation zu sehen ist, wird also als TestNG-Test betrachtet.<\/p>\n\n<p><strong>@Test<\/strong><\/p>\n\n<p><strong>public void sampleTest() {  <\/strong><\/p>\n\n<p><strong>  \/\/Beliebige Testlogik<\/strong><\/p>\n\n<p><strong>  System.out.println(&#8222;Hallo! ITtester.sk hier!&#8220;);  <\/strong><\/p>\n\n<p><strong>}<\/strong><\/p>\n\n<p>Schauen wir uns nun einige wichtige Attribute der @Test-Anmerkungen an:<\/p>\n\n<p><strong>1. Beschreibung<\/strong> &#8211; Das Attribut &#8222;Beschreibung&#8220; dient der Beschreibung der Pr\u00fcfmethode. Sie enth\u00e4lt in der Regel eine einzeilige Zusammenfassung des Tests.<\/p>\n\n<p><strong>@Test(description = &#8222;Testzusammenfassung&#8220;)<\/strong><\/p>\n\n<p><strong>2. dataProvider<\/strong> &#8211; Dieses Attribut hilft bei der Erstellung datengesteuerter Tests. Dient zur Angabe des Namens des Datenanbieters f\u00fcr den Test.<\/p>\n\n<p><strong>@Test(dataProvider = &#8222;Name des Datenanbieters&#8220;)<\/strong><\/p>\n\n<p><strong>3. Priorit\u00e4t<\/strong> &#8211; Dieses Attribut hilft bei der Priorisierung von Testmethoden. Die Standardpriorit\u00e4t beginnt bei 0 und die Tests werden in aufsteigender Reihenfolge ausgef\u00fchrt.<\/p>\n\n<p><strong>@Test(Priorit\u00e4t = 2)<\/strong><\/p>\n\n<p><strong>4. enabled-Dieses<\/strong> Attribut wird verwendet, um zu bestimmen, ob die Testmethode mit dem Set oder der Klasse ausgef\u00fchrt wird oder nicht.<\/p>\n\n<p><strong>@Test(aktiviert = false)<\/strong><\/p>\n\n<p><strong>5. Gruppen<\/strong> &#8211; dient zur Bestimmung der Gruppen, zu denen die Pr\u00fcfmethode geh\u00f6rt.<\/p>\n\n<p><strong>@Test(groups = { &#8222;sanity&#8220;, &#8222;regression&#8220; })<\/strong><\/p>\n\n<p><strong>7. dependsOnMethods<\/strong> &#8211; Dient zur Angabe der Methoden, von denen die Pr\u00fcfmethode abh\u00e4ngt. Die Testmethode wird erst dann ausgef\u00fchrt, wenn die abh\u00e4ngigen Tests erfolgreich durchgef\u00fchrt worden sind.<\/p>\n\n<p><strong>@Test(dependsOnMethods = { &#8222;dependentTestMethodName&#8220; })<\/strong><\/p>\n\n<p><strong>8. dependsOnGroups<\/strong> &#8211; Dient zur Angabe der Gruppen, von denen die Pr\u00fcfmethode abh\u00e4ngt.<\/p>\n\n<p><strong>@Test(dependsOnGroups = { &#8222;dependentGroup&#8220; })<\/strong><\/p>\n\n<p><strong>9. alwaysRun<\/strong> &#8211; Wenn auf True gesetzt, wird die Testmethode auch dann ausgef\u00fchrt, wenn die abh\u00e4ngigen Methoden fehlschlagen.<\/p>\n\n<p><strong>@Test(alwaysRun=True)<\/strong><\/p>\n\n<p><strong>10. timeOut<\/strong> &#8211; dient zur Eingabe des Timeout-Wertes f\u00fcr den Test (in Millisekunden). Dauert der Test l\u00e4nger als der angegebene Timeout-Wert, wird der Test abgebrochen und als fehlgeschlagen markiert.<\/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>Die kommentierte Methode wird nur einmal ausgef\u00fchrt, bevor alle Tests in dieser Suite durchgef\u00fchrt werden.<\/p>\n\n<h2 class=\"wp-block-heading\" id=\"aioseo-aftersuite\">@AfterSuite<\/h2>\n\n<p>Die kommentierte Methode wird nur einmal ausgef\u00fchrt, nachdem alle Tests in dieser Suite durchgef\u00fchrt wurden.<\/p>\n\n<h2 class=\"wp-block-heading\" id=\"aioseo-beforeclass\">@BeforeClass<\/h2>\n\n<p>Die kommentierte Methode wird nur einmal ausgef\u00fchrt, bevor die erste Testmethode in der aktuellen Klasse aufgerufen wird.<\/p>\n\n<h2 class=\"wp-block-heading\" id=\"aioseo-afterclass\">@AfterClass<\/h2>\n\n<p>Die kommentierte Methode wird nur einmal ausgef\u00fchrt, nachdem alle Testmethoden in der aktuellen Klasse ausgef\u00fchrt worden sind.<\/p>\n\n<h2 class=\"wp-block-heading\" id=\"aioseo-beforetest\">@BeforeTest<\/h2>\n\n<p><test>Die kommentierte Methode wird ausgef\u00fchrt, bevor eine Testmethode, die zu Klassen innerhalb des Tags geh\u00f6rt, ausgef\u00fchrt wird.<\/test><\/p>\n\n<h2 class=\"wp-block-heading\" id=\"aioseo-aftertest\">@AfterTest<\/h2>\n\n<p><test>Die kommentierte Methode wird ausgef\u00fchrt, nachdem alle Testmethoden, die zu Klassen innerhalb des Tags geh\u00f6ren, ausgef\u00fchrt wurden.<\/test><\/p>\n\n<h2 class=\"wp-block-heading\" id=\"aioseo-dataprovider\">@Datenprovider<\/h2>\n\n<p>Mit @DataProvider k\u00f6nnen wir ein datengesteuertes Framework erstellen, in dem Daten an die entsprechende Testmethode \u00fcbergeben werden und mehrere Iterationen des Tests f\u00fcr verschiedene Werte der von der @DataProvider-Methode \u00fcbergebenen Testdaten ausgef\u00fchrt werden. Die mit der @DataProvider-Anmerkung versehene Methode gibt ein 2D-Array oder -Objekt zur\u00fcck.<\/p>\n\n<p><strong>\/\/Datenanbieter, der ein 2D-Array einer 3*2-Matrix zur\u00fcckgibt<\/strong><\/p>\n\n<p><strong>@DataProvider(name = &#8222;dataProvider1&#8220;)<\/strong><\/p>\n\n<p><strong>  public Object[][] dataProviderMethod1() {<\/strong><\/p>\n\n<p><strong>  return new Object[][] {{&#8222;it&#8220;, &#8222;tester&#8220;},{&#8222;k1&#8220;, &#8222;r1&#8220;},{&#8222;k2&#8220;, &#8222;r2&#8220;}};<\/strong><\/p>\n\n<p><strong>  }<\/strong><\/p>\n\n<p><strong>  \/\/Diese Methode ist an den obigen Datenanbieter gebunden<\/strong><\/p>\n\n<p><strong>  \/\/Der Testfall wird 3 Mal mit verschiedenen Werten ausgef\u00fchrt<\/strong><\/p>\n\n<p><strong>  @Test(dataProvider = &#8222;dataProvider1&#8220;)<\/strong><\/p>\n\n<p><strong>  public void sampleTest(String str1, String str2) {<\/strong><\/p>\n\n<p><strong>  System.out.println(str1 + &#8220; &#8220; + str2);<\/strong><\/p>\n\n<p><strong>  }<\/strong><\/p>\n\n<h2 class=\"wp-block-heading\" id=\"aioseo-parameter\">@Parameter<\/h2>\n\n<p>Der @Parameter-Tag wird verwendet, um Parameter an Testskripte zu \u00fcbergeben. Der Wert des @Parameter-Tags kann \u00fcber die Datei testng.xml \u00fcbergeben werden.<\/p>\n\n<p>Beispiel f\u00fcr die Datei testng.xml mit dem Parameter-Tag:<\/p>\n\n<p><strong>@Test (timeOut = 500)&lt;suite name=&#8220;sampleTestSuite&#8220;&gt;<\/strong><\/p>\n\n<p><strong>   &lt;test name=&#8220;sampleTest&#8220;&gt;   <\/strong><\/p>\n\n<p><strong>      &lt;parameter name=&#8220;sampleParamName&#8220; value=&#8220;sampleParamValue&#8220;\/&gt;<\/strong><\/p>\n\n<p><strong>      &lt;Klassen&gt;<\/strong><\/p>\n\n<p><strong>         &lt;class name=&#8220;TestFile&#8220; \/&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>Beispiel f\u00fcr ein Testskript mit @Parameter-Anmerkung:<\/p>\n\n<p><strong>public class TestFile {<\/strong><\/p>\n\n<p><strong>  @Test<\/strong><\/p>\n\n<p><strong>  @Parameter(&#8222;sampleParamName&#8220;)<\/strong><\/p>\n\n<p><strong>  public void parameterTest(String paramValue) {<\/strong><\/p>\n\n<p><strong>  System.out.println(&#8222;sampleParamName = &#8220; + 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 bietet uns verschiedene Arten von Listenern, mit denen wir eine Aktion ausf\u00fchren k\u00f6nnen, wenn ein Ereignis ausgel\u00f6st wird. Typischerweise werden testNG-Listener verwendet, um Berichte und Protokollierung zu konfigurieren.<\/p>\n\n<p><strong>@Listeners(Paketname.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>  \/\/Logik testen<\/strong><\/p>\n\n<p><strong>  }<\/strong><\/p>\n\n<p><strong>}  <\/strong><\/p>\n\n<h2 class=\"wp-block-heading\" id=\"aioseo-factory\">@Fabrik<\/h2>\n\n<p>Die Annotation @Factory hilft bei der dynamischen Ausf\u00fchrung von Testf\u00e4llen. Mit der @Factory-Annotation k\u00f6nnen wir Parameter an die gesamte Testklasse \u00fcbergeben, w\u00e4hrend der Test l\u00e4uft. Die \u00fcbergebenen Parameter k\u00f6nnen von einer oder mehreren Testmethoden dieser Klasse verwendet werden.<\/p>\n\n<p>Im folgenden Beispiel f\u00fchrt die Klasse TestFactory eine Testmethode in der Klasse TestClass mit verschiedenen Parameters\u00e4tzen aus &#8211; &#8222;k1&#8220; und &#8222;k2&#8220;.<\/p>\n\n<p><strong>public class TestClass{<\/strong><\/p>\n\n<p><strong>  private String str;<\/strong><\/p>\n\n<p><strong>  \/\/Konstrukteur<\/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>  \/\/Durch @Factory, die Testmethode in der Klasse TestClass<\/strong><\/p>\n\n<p><strong>  \/\/wird zweimal mit den Daten &#8222;k1&#8220; und &#8222;k2&#8220; ausgef\u00fchrt<\/strong><\/p>\n\n<p><strong>  @Fabrik<\/strong><\/p>\n\n<p><strong>  public Object[] factoryMethod() {<\/strong><\/p>\n\n<p><strong>  return new Object[] { new TestClass(&#8222;K1&#8220;), new TestClass(&#8222;k2&#8220;) };<\/strong><\/p>\n\n<p><strong>  }<\/strong><\/p>\n\n<p><strong>}<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>TestNG verwendet Annotationen (Tags, Metadaten), um Funktionen bereitzustellen, die beim Aufbau eines robusten Test-Frameworks helfen.  <\/p>\n","protected":false},"author":8,"featured_media":1552,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[25],"tags":[],"class_list":["post-1228","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-testng-anleitung"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/ittester.sk\/de\/wp-json\/wp\/v2\/posts\/1228","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ittester.sk\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ittester.sk\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ittester.sk\/de\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/ittester.sk\/de\/wp-json\/wp\/v2\/comments?post=1228"}],"version-history":[{"count":2,"href":"https:\/\/ittester.sk\/de\/wp-json\/wp\/v2\/posts\/1228\/revisions"}],"predecessor-version":[{"id":1554,"href":"https:\/\/ittester.sk\/de\/wp-json\/wp\/v2\/posts\/1228\/revisions\/1554"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ittester.sk\/de\/wp-json\/wp\/v2\/media\/1552"}],"wp:attachment":[{"href":"https:\/\/ittester.sk\/de\/wp-json\/wp\/v2\/media?parent=1228"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ittester.sk\/de\/wp-json\/wp\/v2\/categories?post=1228"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ittester.sk\/de\/wp-json\/wp\/v2\/tags?post=1228"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}