2016-11-12 4 views
1

Dies ist eine Interviewfrage, die mein Wicket nahm. Wir haben eine Selen-Test-Klasse mit 5,6 Selen-Tests. Test 3 wird ausgeführt, und ein Netzwerkfehler ist aufgetreten. Sobald das Netzwerk wieder aufgebaut ist, wird das Framework so konfiguriert, dass es an der Stelle beginnt, an der es fehlgeschlagen ist, wie beim 3. Test. Und sollte den bereits ausgeführten Test 1 & ausführen 2. Angenommen Framework ist junit.Testausführung nach Netzwerkausfall fortsetzen

Antwort

2

Ich kann Javaguy auf seine Antwort nicht zustimmen. Ich denke, dass die Frage vollkommen gültig ist. Es gibt einen großen Unterschied zwischen Komponententests als Konzept und JUnit als Werkzeug.

Was in Javaguys Antwort beschrieben wurde, ist Komponententests. Diese können wirklich nichts anderes als die Klasse in den Speicher laden und schreiben. Aber sicherlich Tests, die Selenium-Web-Treiber verwenden, sind keine Unit-Tests. Und es ist gültig, eine JUnit als Rahmen für die Implementierung dieser Tests zu wählen. Natürlich können wir darüber streiten, ob die JUnit das beste Werkzeug dafür ist, aber es ist eine andere Geschichte, unter dem Strich, wenn JUnit als ein Implementierungswerkzeug für diese Tests gewählt wurde, ist dies eine gültige Wahl.

Nun zu Ihrer Frage. Es gibt viele verschiedene Möglichkeiten, um zu erreichen, was Sie wollen.

  1. Erstellen Sie eine JUnit-Regel, mit der der Test erneut ausgeführt werden kann. Im Allgemeinen sind Regeln ähnlich wie Interzeptoren oder Aspekte, wenn Sie mit der AOP-Terminologie vertraut sind. Sie fangen den Test ab, so dass er fehlschlägt, sie können ihn erneut ausführen. Here Sie können eine Frage finden, die die Regeln erklärt und einige Links zur Verfügung stellt.

  2. Implementieren Sie einen benutzerdefinierten Runner. Dieser Ansatz funktioniert nur, wenn Sie keine anderen Läufer verwenden, da JUnit nur einen Platz für Läufer bereitstellt. Dieser benutzerdefinierte Runner wird die Testanrufe erneut abfangen und bei Netzwerkausfall erneut starten/das Netzwerk anpingen und warten und nur dann, wenn es zurückkommt, erneut ausgeführt werden. Dann können Sie @RunWith Annotation verwenden, um Ihren tatsächlichen Runner auf Test zu aktivieren.

  3. Anwendbare Lösung. Angenommen, Selen-Web-Treiber ist die einzige Sache, die in Ihrem Test tatsächlich abhängig von Netzwerk ist, wickeln Selen-Treiber Anrufe in Ihre Anrufe. Stellen Sie try/catch für alle Anrufe in Selen bereit, und wenn Sie die Ausnahme abfangen, versuchen Sie es erneut. Sie können sogar Aspekte dafür verwenden oder den Wrapper manuell implementieren.

  4. Es gibt auch einige Lösungen auf der Ebene von Jenkins/Ihr Build-Tool, aber ich denke, diese tatsächlich ...

    out of scope sind

this helps

Verwandte Themen