{"id":1232,"date":"2024-03-18T10:08:36","date_gmt":"2024-03-18T09:08:36","guid":{"rendered":"https:\/\/ittester.sk\/automatisiertes-testen\/test-rerun-testng\/"},"modified":"2024-07-11T09:43:35","modified_gmt":"2024-07-11T07:43:35","slug":"test-rerun-testng","status":"publish","type":"post","link":"https:\/\/ittester.sk\/de\/automatisiertes-testen\/testng-anleitung\/test-rerun-testng\/","title":{"rendered":"Wiederholung fehlgeschlagener Tests in TestNG"},"content":{"rendered":"\n<p>In diesem Beitrag erfahren Sie, wie Sie fehlgeschlagene Testf\u00e4lle mit TestNG wiedergeben k\u00f6nnen. Wir werden zwei Ans\u00e4tze untersuchen, um dies zu erreichen, n\u00e4mlich die Verwendung der Datei testng-failed.xml und die Implementierung des testNG IRetryAnalyzer.<\/p>\n\n<h2 class=\"wp-block-heading\"><strong>Inhalts\u00fcbersicht<\/strong><\/h2>\n<div class=\"wp-block-aioseo-table-of-contents\"><ul><li><a class=\"aioseo-toc-item\" href=\"#aioseo-opatovne-spustenie-neuspesnych-testov-pomocou-suboru-testng-failed-xml\">Op\u00e4tovn\u00e9 spustenie ne\u00faspe\u0161n\u00fdch testov pomocou s\u00faboru testng-failed.xml<\/a><ul><li><a class=\"aioseo-toc-item\" href=\"#aioseo-kedy-pouzit\">Kedy pou\u017ei\u0165?<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-ako-to-dosiahnut\">Ako to dosiahnu\u0165?<\/a><\/li><\/ul><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-automaticke-opakovanie-neuspesnych-testov-pomocou-iretryanalyzer\">Automatick\u00e9 opakovanie ne\u00faspe\u0161n\u00fdch testov pomocou IRetryAnalyzer<\/a><ul><li><a class=\"aioseo-toc-item\" href=\"#aioseo-kedy-pouzivat\">Kedy pou\u017e\u00edva\u0165?<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-ako-to-dosiahnut\">Ako to dosiahnu\u0165?<\/a><\/li><\/ul><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-snippet\">Snippet<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-vystup-testu\">V\u00fdstup testu<\/a><\/li><\/ul><\/div>\n<h2 class=\"wp-block-heading\" id=\"aioseo-opatovne-spustenie-neuspesnych-testov-pomocou-suboru-testng-failed-xml\">Neustart fehlgeschlagener Tests mit der Datei testng-failed.xml<\/h2>\n\n<h3 class=\"wp-block-heading\" id=\"aioseo-kedy-pouzit\">Wann ist sie zu verwenden?<\/h3>\n\n<p>Manchmal m\u00fcssen wir als Testautomatisierer nur die vom Testautomatisierungswerkzeug gemeldeten fehlgeschlagenen Tests ausf\u00fchren, nachdem wir einige Fehler behoben haben. Wenn Sie nur fehlgeschlagene Tests durchf\u00fchren, k\u00f6nnen Sie die Fehlerbehebung schnell \u00fcberpr\u00fcfen.<\/p>\n\n<h3 class=\"wp-block-heading\" id=\"aioseo-ako-to-dosiahnut\">Wie kann dies erreicht werden?<\/h3>\n\n<p>Es ist relativ einfach, nur fehlgeschlagene Tests auszuf\u00fchren, da TestNG hierf\u00fcr eine nat\u00fcrliche Unterst\u00fctzung bietet. Wenn eine Testsuite mit der Datei testng.xml ausgef\u00fchrt wird, wird die Datei testng-failed.xml nach der Ausf\u00fchrung des Tests im Ordner test-output erstellt. Sp\u00e4ter k\u00f6nnen wir diese Datei genau wie die Datei testng.xml ausf\u00fchren. Da in dieser Datei nur fehlgeschlagene Tests gespeichert werden, werden bei der Ausf\u00fchrung dieser Datei nur fehlgeschlagene Tests ausgef\u00fchrt.<\/p>\n\n<h2 class=\"wp-block-heading\" id=\"aioseo-automaticke-opakovanie-neuspesnych-testov-pomocou-iretryanalyzer\">Automatische Wiederholung von fehlgeschlagenen Tests mit IRetryAnalyzer<\/h2>\n\n<h3 class=\"wp-block-heading\" id=\"aioseo-kedy-pouzivat\">Wann ist sie zu verwenden?<\/h3>\n\n<p>Manchmal erscheinen im Testausf\u00fchrungsbericht Fehler, die nicht durch Probleme in der Anwendung verursacht werden. Die Ursache f\u00fcr diese Probleme kann mit der Einrichtung der Testumgebung oder mit einem gelegentlichen Serverproblem zusammenh\u00e4ngen. Um sicherzustellen, dass es sich bei den im Testbericht gemeldeten Fehlern um echte und nicht nur um Einzelf\u00e4lle handelt, k\u00f6nnen wir die fehlgeschlagenen Testf\u00e4lle erneut ausf\u00fchren, um falsch negative Testergebnisse in den Testberichten auszuschlie\u00dfen.<\/p>\n\n<h3 class=\"wp-block-heading\" id=\"aioseo-ako-to-dosiahnut\">Wie kann dies erreicht werden?<\/h3>\n\n<p>Um fehlgeschlagene Testf\u00e4lle w\u00e4hrend des eigentlichen Testlaufs automatisch zu wiederholen, m\u00fcssen wir die von TestNG bereitgestellte Schnittstelle IRetryAnalyzer implementieren. Die Schnittstelle IRetryAnalyzer bietet Methoden zur Steuerung der Wiederholung von Testl\u00e4ufen. Hier wird die retry()-Methode von IRetryAnalyzer au\u00dfer Kraft gesetzt, um sicherzustellen, dass der Test im Falle eines Fehlers mit der angegebenen Wiederholungsgrenze durchgef\u00fchrt wird. Dank der Kommentare in dem Schnipsel ist das verst\u00e4ndlich.<\/p>\n\n<h2 class=\"wp-block-heading\" id=\"aioseo-snippet\">Schnipsel<\/h2>\n\n<pre class=\"wp-block-code\"><code>package com.artoftesting.test;\n\nimport org.testng.IRetryAnalyzer;\n\nimport org.testng.ITestResult;\n\npublic class RetryAnalyzer implements IRetryAnalyzer {\n\n\u00a0\/\/Counter to keep track of retry attempts\n\n\u00a0int retryAttemptsCounter = 0;\n\n\u00a0\/\/The max limit to retry running of failed test cases\n\n\u00a0\/\/Set the value to the number of times we want to retry\n\n\u00a0int maxRetryLimit = 1;\n\n\u00a0\/\/Method to attempt retries for failure tests\n\n\u00a0public boolean retry(ITestResult result) {\n\n\u00a0if (!result.isSuccess()) {\n\n\u00a0if(retryAttemptsCounter &lt; maxRetryLimit){\n\n\u00a0retryAttemptsCounter++;\n\n\u00a0return true;\n\n\u00a0}\n\n\u00a0}\n\n\u00a0return false;\n\n\u00a0}\u00a0\n\n}<\/code><\/pre>\n\n<p>In diesem Beispiel erstellen wir eine Dummy-Testmethode und lassen sie absichtlich mit der Methode assert.fail() fehlschlagen. Hier setzen wir das retryAnalyzer-Attribut der @Test-Annotation mit Hilfe der oben erstellten Klasse RetryAnalyzer.class.<\/p>\n\n<pre class=\"wp-block-code\"><code>@Test(retryAnalyzer = RetryAnalyzer.class)\n\n\u00a0\u00a0\u00a0\u00a0public void intentionallyFailingTest(){\n\n\u00a0\u00a0\u00a0\u00a0\u00a0System.out.println(\"Executing Test\");\n\n\u00a0\u00a0\u00a0\u00a0\u00a0Assert.fail(\"Failing Test\");\n\n\u00a0\u00a0\u00a0\u00a0}<\/code><\/pre>\n\n<h2 class=\"wp-block-heading\" id=\"aioseo-vystup-testu\">Test-Ausgang<\/h2>\n\n<p><strong>===============================================<\/strong><\/p>\n\n<p><strong>Test-Suite<\/strong><\/p>\n\n<p><strong>Durchgef\u00fchrte Tests insgesamt: 2, Fehlschl\u00e4ge: 1, \u00dcbersprungene Tests: 1<\/strong><\/p>\n\n<p><strong>===============================================<\/strong><\/p>\n\n<p>Hier k\u00f6nnen wir sehen, dass die Anzahl der Durchl\u00e4ufe der Methode mit 2 angezeigt wird, mit einem Fehler und einem \u00dcberspringen. Wenn die Testmethode zum ersten Mal fehlschl\u00e4gt, wird sie als \u00fcbersprungen markiert, und der Test wird dann aufgrund der in RetryAnalyzer vorgesehenen Logik erneut ausgef\u00fchrt.<\/p>\n\n<p>Jetzt gibt es nur noch ein Problem: Wir m\u00fcssen das Attribut retryAnalyzer in jeder @Test-Anmerkung festlegen. Um dies zu bewerkstelligen, k\u00f6nnen wir die Schnittstelle IAnnotationTransformer implementieren. Diese Schnittstelle bietet die M\u00f6glichkeit, die testNG-Anmerkung im laufenden Betrieb zu \u00e4ndern. Wir erstellen also eine Klasse, die die Schnittstelle IAnnotationTransformer implementiert, und legen RetryAnalyzer f\u00fcr @Test-Annotationen fest.<\/p>\n\n<pre class=\"wp-block-code\"><code>package com.ittester.test;\n\nimport java.lang.reflect.Constructor;\n\nimport java.lang.reflect.Method;\n\nimport org.testng.IAnnotationTransformer;\n\nimport org.testng.IRetryAnalyzer;\n\nimport org.testng.annotations.ITestAnnotation;\n\npublic class FailureRetryListener implements IAnnotationTransformer {\n\n\u00a0\/\/Overriding the transform method to set the RetryAnalyzer\n\n\u00a0public void transform(ITestAnnotation testAnnotation, Class testClass,\u00a0\n\n\u00a0Constructor testConstructor, Method testMethod) {\n\n\u00a0IRetryAnalyzer retry = testAnnotation.getRetryAnalyzer();\n\n\u00a0if (retry == null)\n\n\u00a0testAnnotation.setRetryAnalyzer(RetryAnalyzer.class);\n\n\u00a0}\n\n}<\/code><\/pre>\n\n<p>Nachdem der Listener erstellt wurde, k\u00f6nnen wir ihn in der Datei testNG.xml wie folgt angeben<\/p>\n\n<pre class=\"wp-block-code\"><code>&lt;listeners>\n\n\u00a0\u00a0\u00a0&lt;listener class-name=\"com.ittester.test.FailureRetryListener\"\/>\n\n&lt;\/listeners><\/code><\/pre>\n\n<p>Jetzt m\u00fcssen wir retryAnalyzer nicht mehr in jeder @Test-Anmerkung festlegen. Wenn wir einen H\u00f6rer in der Datei testng.xml angegeben haben, funktioniert er f\u00fcr alle Tests.<\/p>\n\n<p>PS: Wenn Sie die Wiederholungsfunktionalit\u00e4t nur einer begrenzten Anzahl von Testmethoden hinzuf\u00fcgen m\u00f6chten, setzen Sie einfach die @Test-Annotation mit dem retryAnalyzer-Attribut unter Verwendung der RetryAnalyzer.class.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In diesem Artikel erfahren Sie, wie Sie mit TestNG fehlgeschlagene Testf\u00e4lle wiederholen k\u00f6nnen. Wir pr\u00fcfen zwei Ans\u00e4tze, um dies zu erreichen.<\/p>\n","protected":false},"author":8,"featured_media":1561,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[25],"tags":[],"class_list":["post-1232","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\/1232","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=1232"}],"version-history":[{"count":2,"href":"https:\/\/ittester.sk\/de\/wp-json\/wp\/v2\/posts\/1232\/revisions"}],"predecessor-version":[{"id":1563,"href":"https:\/\/ittester.sk\/de\/wp-json\/wp\/v2\/posts\/1232\/revisions\/1563"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ittester.sk\/de\/wp-json\/wp\/v2\/media\/1561"}],"wp:attachment":[{"href":"https:\/\/ittester.sk\/de\/wp-json\/wp\/v2\/media?parent=1232"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ittester.sk\/de\/wp-json\/wp\/v2\/categories?post=1232"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ittester.sk\/de\/wp-json\/wp\/v2\/tags?post=1232"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}