Ich möchte eine Testklasse einschließlich seiner @BeforeMethod
erneut ausführen, wenn eine der @Test
schlägt fehl. Ich habe die TestNG-Wiederholungslogik bereits implementiert, um die fehlgeschlagenen Testfälle erneut auszuführen, aber ich möchte die gesamte Klasse ausführen.Gibt es trotzdem eine Testklasse erneut zu starten, wenn es fehlschlägt
Antwort
Es ist möglich, dies zu tun. Dafür benötigen Sie eine Implementierung von org.testng.ITestListener in testNg.xml als Zuhörer org.testng.ITestListener
<listeners>
<listener class-name="com.xyar.OnTestFailureClass" />
</listeners
OnTestFailureClass
muss implementieren registrieren.
onTestFailure Umsetzung wie folgt:
public void onTestFailure(ITestResult result) {
XmlSuite suite = new XmlSuite();
suite.setName("rerunFailedTestClasses");
XmlTest test = new XmlTest(suite);
test.setName(result.getTestName());
List<XmlClass> classes = new ArrayList<XmlClass>();
classes.add(result.getTestClass().getXmlClass());
test.setXmlClasses(classes) ;
List<XmlSuite> suites = new ArrayList<XmlSuite>();
suites.add(suite);
TestNG tng = new TestNG();
tng.setXmlSuites(suites);
tng.run();
}
VORSICHT
Sie haben einen guten Grund müssen Sie den Test erneut ausführen. Die Wiederholung des Tests muss gewünscht sein, wenn Sie sicher sind, dass die zweite Iteration zum Erfolg führt. Wenn dies nicht der Fall ist, werden Sie eine Endlosschleife eingeben, in der fehlgeschlagene Tests weiterhin ausgeführt werden und fehlgeschlagen werden.
Wenn Sie einen Testfall unabhängig vom Testergebnis nur n-mal ausführen möchten, müssen Sie eine Logik für den Zähler in der onTestFailure
-Methode erstellen.
----------------------------- UPDATE --------------- ---------------------
Entdeckt eine elegantere Lösung Implementieren Sie IRetryAnalyzer-Schnittstelle. Diese Schnittstelle wurde von TestNG speziell für den Zweck bereitgestellt, einen fehlgeschlagenen Test erneut zu versuchen. Es gab an, wie oft der Wiederholungsversuch durchgeführt werden musste.
import org.testng.IRetryAnalyzer;
import org.testng.ITestResult;
public class RetryAnalyzerImpl implements IRetryAnalyzer{
private int retryCount = 0;
private int maxRetryCount = 3;
public boolean retry(ITestResult result) {
if(retryCount < maxRetryCount)
{
retryCount++;
return true;
}
return false;
}
}
Sie verwenden müssen folgende Anmerkungen
@Test(retryAnalyzer=Retry.class)
jedoch zu vermeiden, dieses Attribut zu Ihren allen Testmethoden, den folgenden Ansatz zu nehmen, die durch diesen Link verwiesen wird ‚TestNG retryAnalyzer only works when defined in methods @Test, does not work in class' @Test‘
@BeforeSuite(alwaysRun = true)
public void beforeSuite(ITestContext context) {
for (ITestNGMethod method : context.getAllTestMethods()) {
method.setRetryAnalyzer(new RetryAnalyzerImpl());
}
}
Dies sollte Ihnen hoffentlich mit t estng-results.xml Bericht.
Bitte sehen Sie sich an: http://testng.org/doc/documentation-main.html#rerunning Alle fehlgeschlagenen Tests sind in der separaten XML-Suite enthalten, die erneut ausgeführt werden kann.
<suite name="allSuites">
<suite-files>
<suite-file path="yourSuite.xml" />
<suite-file path="testng-failed.xml" />
...
</suite-files>
</suite>
Sie sollten nicht manuell ausgeführt werden, können Sie eine Suite haben, besteht aus mehreren Suiten. Bitte sehen Sie eine aktualisierte Antwort. –
Eine andere Möglichkeit ist eine Bat-Datei, die ausgeführt wird: 'java org.testng.TestNG yourSuite.xml' und dann ' java org.testng.TestNG testng-failed.xml' in diesem Fall 'testng-failed.xml' wird sicher erstellt und gestartet direkt nach der tatsächlichen Suite fertig –
- 1. Gibt es trotzdem Protokollfunktion?
- 2. Gibt es trotzdem eine lange OPENQUERY
- 3. Wenn Assert fehlschlägt, gibt es einen Fehler?
- 4. Gibt es trotzdem, View anzuzeigen, ohne es zu Nav Controller
- 5. Gibt es eine Möglichkeit, den Grund herauszufinden, wenn ftp_put fehlschlägt?
- 6. Gibt es trotzdem ID oder Wert zu MAPIFolder zu speichern
- 7. Gibt es trotzdem geplante lokale Benachrichtigungen anzuzeigen
- 8. Gibt es trotzdem JS-Bibliotheken in Riak?
- 9. Gibt es eine Möglichkeit, Bindungen in WPF erneut zu verwenden?
- 10. Gibt es in Lua trotzdem ein Sicherheitsproblem?
- 11. Gibt es trotzdem JSON-LD Schema nicht inline zu verwenden
- 12. Gibt es trotzdem eine Vereinfachung dieser IBOutletConnection-Anweisung?
- 13. Gibt es trotzdem einen PHP4 mysql Client zu aktualisieren?
- 14. Gibt es trotzdem ein Gerät mit PHP zu kommunizieren?
- 15. Gibt es eine Möglichkeit, eine exe automatisch erneut auszuführen, nachdem es einmal ausgeführt
- 16. Gibt es trotzdem eine zuverlässige Berechnung der Höhe eines UITextView?
- 17. erfordern eine Datei erneut, wenn es geändert wird
- 18. Gibt es eine Möglichkeit RPM Installation parallel zu starten?
- 19. Gibt es eine Möglichkeit, Postgres auf Heroku neu zu starten?
- 20. Gibt es eine Möglichkeit, Fortschrittsbalken in Oberflächendarstellungen automatisch zu starten?
- 21. Gibt es eine Möglichkeit, eine MKMapView zu drehen und trotzdem das Google Logo zu zeigen?
- 22. Wakanda v10 Git: Wenn GUI Push fehlschlägt, Git glaubt, es gibt nichts zu wiederholen versuchen
- 23. Gibt es eine Option, StackTrace zu drucken, wenn der Test in GTEST auf GCC fehlschlägt?
- 24. Wie bekomme ich Windows SCM meinen Dienst neu zu starten, wenn es fehlschlägt
- 25. Wiederholen Sie eine asynchrone Anfrage, wenn es fehlschlägt?
- 26. Gibt es trotzdem eine InitializeComponent eine andere Contentpage von einer anderen Seite zB über einen "Klick"?
- 27. Wie Java-Prozess zu starten, wenn es aus Skript sterben
- 28. Gibt es trotzdem Leistungsindikatoren auf OS X Mountain Lion?
- 29. Jquery: Gibt es trotzdem die Einzigartigkeit eines Elements?
- 30. Gibt es trotzdem, um die generierten Schlüssel zu erhalten, wenn Spring JDBC batchUpdate verwendet?
ja, es funktioniert und lief gescheitert Klassen wieder, aber nur Problem, das ich hier konfrontiert, erstellt es keinen Bericht im Xml-Format ähnliche testng-result.xml für die erneut ausgeführten Klassen. Aus diesem Grund wird mein Jenkins Build gescheitert. –