Implemented retries for failed scenarios
This commit is contained in:
parent
71745f9deb
commit
f1c5aca087
64
Rakefile
64
Rakefile
@ -89,61 +89,35 @@ task "cucumber:debug" do
|
||||
ENV['TEST_DEBUG'] = nil
|
||||
end
|
||||
|
||||
# Cucumber::Rake::Task.new(:cucumber) do |t|
|
||||
# t.cucumber_opts = "features --format pretty"
|
||||
# end
|
||||
|
||||
namespace :cucumber do
|
||||
directory 'tmp'
|
||||
@rerun_file = 'tmp/rerun.txt'
|
||||
|
||||
FAILING_CUCUMBER_SCENARIOS_FILENAME = 'log/rerun.txt'
|
||||
|
||||
Cucumber::Rake::Task.new(:all) do |task|
|
||||
task.cucumber_opts = "features --format pretty --format rerun --out tmp/rerun.txt"
|
||||
Cucumber::Rake::Task.new(:start) do |task|
|
||||
task.cucumber_opts = "features --format pretty -f rerun --out #{FAILING_CUCUMBER_SCENARIOS_FILENAME}"
|
||||
end
|
||||
|
||||
desc 'Run cucumber features'
|
||||
task run: :tmp do
|
||||
retry_on_failure do
|
||||
run_features
|
||||
end
|
||||
clean_up
|
||||
exit @exit_status
|
||||
Cucumber::Rake::Task.new(:retry) do |task|
|
||||
task.cucumber_opts = "@#{FAILING_CUCUMBER_SCENARIOS_FILENAME}"
|
||||
end
|
||||
|
||||
def retry_on_failure
|
||||
rm_rf @rerun_file
|
||||
@retries = 0
|
||||
|
||||
task :run do
|
||||
exception = nil
|
||||
begin
|
||||
@exit_status = 0
|
||||
yield
|
||||
rescue SystemExit => e
|
||||
@exit_status = e.status
|
||||
if retry?(exception: e)
|
||||
@retries += 1
|
||||
retry
|
||||
result = Rake::Task['cucumber:start'].execute
|
||||
rescue Exception => e
|
||||
begin
|
||||
puts "\nRetrying failed scenarios...\n"
|
||||
Rake::Task['cucumber:retry'].execute
|
||||
rescue Exception => e2
|
||||
exception = e2
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def run_features
|
||||
if File.exists? @rerun_file
|
||||
Cucumber::Rake::Task::ForkedCucumberRunner.new(['lib'], Cucumber::BINARY, [
|
||||
'features',
|
||||
'--format', 'pretty',
|
||||
'@tmp/rerun.txt',
|
||||
'--format', 'rerun',
|
||||
'--out', 'tmp/rerun.txt'
|
||||
], true, []).run
|
||||
else
|
||||
Rake::Task['cucumber:all'].invoke
|
||||
if File.exists?("#{FAILING_CUCUMBER_SCENARIOS_FILENAME}")
|
||||
File.delete("#{FAILING_CUCUMBER_SCENARIOS_FILENAME}")
|
||||
end
|
||||
end
|
||||
|
||||
def retry?(exception: nil)
|
||||
@retries < 2 && !exception.success?
|
||||
end
|
||||
|
||||
def clean_up
|
||||
rm_rf @rerun_file.pathmap("%d")
|
||||
raise exception unless exception.nil?
|
||||
end
|
||||
end
|
||||
|
@ -57,7 +57,7 @@ Feature: Conference Schedule
|
||||
When I click on 'Reaching New Immigrants' link
|
||||
Then I should see 'The Shop'
|
||||
And see '1027 Flatbush Ave'
|
||||
And see 'More info'
|
||||
And see 'Details'
|
||||
And see 'Close'
|
||||
|
||||
When I click on the 'Close' button
|
||||
|
@ -6,18 +6,20 @@ Then /^(.*) should get (.+) '(.+)' emails?$/i do |to, amount, subject|
|
||||
address = email_address(to)
|
||||
|
||||
attempt_to do
|
||||
emails = emails_to(address, subject)
|
||||
attempt_to do
|
||||
emails = emails_to(address, subject)
|
||||
|
||||
unless emails.length == (str_to_num(amount))
|
||||
email_log = []
|
||||
ActionMailer::Base.deliveries.each do |mail|
|
||||
email_log << "\t#{mail.to.join(', ')}: #{mail.subject}"
|
||||
unless emails.length == (str_to_num(amount))
|
||||
email_log = []
|
||||
ActionMailer::Base.deliveries.each do |mail|
|
||||
email_log << "\t#{mail.to.join(', ')}: #{mail.subject}"
|
||||
end
|
||||
total_emails = ActionMailer::Base.deliveries.length
|
||||
fail "Failed to find #{amount} email#{amount == 1 ? '' : 's'} to #{address} with #{subject} in the subject amoung #{total_emails} total email#{total_emails == 1 ? '' : 's'}:\n#{email_log.join("\n")}"
|
||||
end
|
||||
total_emails = ActionMailer::Base.deliveries.length
|
||||
fail "Failed to find #{amount} email#{amount == 1 ? '' : 's'} to #{address} with #{subject} in the subject amoung #{total_emails} total email#{total_emails == 1 ? '' : 's'}:\n#{email_log.join("\n")}"
|
||||
end
|
||||
|
||||
TestState.last_email = emails.first
|
||||
TestState.last_email = emails.first
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -35,7 +35,6 @@ Then /^(?:I )?click (?:on )?(?:the )?(a )?'(.+?)'( button| link)?(?: beside '(.+
|
||||
end
|
||||
element.click
|
||||
rescue Exception => e
|
||||
puts text
|
||||
raise e
|
||||
end
|
||||
sleep(1) # let any aimations or page loads to complete
|
||||
|
Loading…
x
Reference in New Issue
Block a user