Ich versuche, ein bestehendes System des automatisierten Selenium-Tests zu verbessern. Mein Ziel ist es, die Tests zu wiederholen, die wegen Verbindungsproblemen fehlschlagen. Ich habe diesen Thread gefunden und versucht, diesem Thema zu folgen Wie die erneute Ausführung fehlgeschlagen ist JUnit testet sofort? das hat sich als ziemlich nützlich erwiesen.
In meinem Fall besteht die Suite aus Klassen, also habe ich versucht @Rule durch @ClassRule zu ersetzen, um für jeden Versuch auch die @Before und @After Teile zu wiederholen. Es tut mir leid für meine Ignoranz, aber wo soll ich diese Regel platzieren? In meiner Suite-Klasse? Oder in den Klassen, die den Test darstellen?
Ich bin der ursprüngliche Beantworter von Wie kann ich die fehlgeschlagene JUnit erneut ausführen? Tests sofort?
Wenn ich das richtig verstanden habe, liegt das Problem daran, dass @Before
vor dem Code in RetryRule
ausgeführt wird und danach @After
.
Ihr aktuelles Verhalten ist also ungefähr so:
%Vor% Aber Sie können Ihre @Before
und @After
als Regel implementieren - es gibt eine Regel ExterneRessource , die genau das tut. Sie würden in der Regel @Before
und @After
implementieren:
Dann brauchen Sie nicht @Before
und @After
. Sie können diese Regeln dann verketten, indem Sie RuleChain . Dies zwingt eine Reihenfolge der Ausführung zu Ihren Regeln:
Ihre endgültige Lösung wäre also etwa so:
%Vor% Beachten Sie, dass Sie, wenn Sie RuleChain
verwenden, nicht mehr die @Rule
-Anmerkung für ExternalResource
und RetryRule
benötigen, sondern für die RuleChain
.
Möge dies das Problem lösen:
1) Testklasse sollte von junit.framework.TestCase
2) Führen Sie Ihre Tests mit so etwas aus
%Vor% Am Ende enthält result
will die letzten Ergebnisse des Testlaufs. Nachdem Sie analysiert haben, welcher Test fehlgeschlagen ist, können Sie ihn erneut ausführen.