2016-09-22 4 views
0

Laufende Gurke in CircleCI mit Selenium Manchmal versagen die Tests aufgrund der Leistung von CircleCI. Ein häufiger Fehler ist ein Net::ReadTimeout Fehler, der nie lokal vorkommt. Ich möchte die Schritte von diesem Fehler retten und sie erneut versuchen, aber ich mache nicht wollen alle fehlgeschlagenen Tests erneut ausführen.Rerun Cucumber Schritt nur im Falle eines spezifischen Fehlers

Ich könnte bauen eine Rettung in den spezifischen Schritt (en), die diesen Fehler auslösen scheinen, aber im Idealfall wäre ich in der Lage, Cucumber eine Liste von Fehlern, die es einmal oder zweimal rettet, um diesen Schritt erneut auszuführen endlich den Fehler passieren lassen.

Etwas wie:

# support/env.rb 
Cucumber.retry_errors = { 
    # error => number of retries 
    "Net::ReadTimeoutError" => 2 
} 

Ist so etwas gibt es?

Antwort

0

Ich wäre überrascht, wenn Sie etwas gefunden haben, wie Sie in Gurke suchen.

Das erneute Ausführen eines fehlgeschlagenen Schritts, nur um wirklich sicherzustellen, dass es sich um einen tatsächlichen Fehler und nicht nur um einen zufälligen Netzwerkfehler handelt, löst aus meiner Sicht das falsche Problem.

Mein Ansatz wäre zu sehen, ob die Verifikation, die Sie suchen, ohne ein Netzwerk möglich ist. Ich könnte auch überlegen, andere Werkzeuge als Cucumber zu verwenden, wenn ich wirklich ein paar Mal wiederholen muss, um sicherzustellen, dass ein Fehler wirklich ein Fehler ist. Dies würde mich jedoch zu einem weiteren Kaninchenloch führen. Wie oft sollten Sie laufen, was ist der Schwellenwert? Sollten drei von fünf Hinrichtungen für Sie bestanden werden, um einen bestandenen Test zu erklären? Es wird sehr hässlich in meinen Augen.

0

Es sieht so aus, als ob dieses Selenium lange dauert, um die Assets beim ersten Test zu kompilieren. Nachfolgende Tests verwenden die kompilierten Assets und haben kein Problem. Nachdem ich this Github issue angesehen habe, habe ich das Zeitlimit für Selenium erhöht.

Capybara.register_driver :chrome do |app| 
    http_client = Selenium::WebDriver::Remote::Http::Default.new 
    http_client.timeout = 120 # default is 60 seconds 
    Capybara::Selenium::Driver.new(app, browser: :chrome, http_client: http_client) 
end 
Verwandte Themen