def run testrun, opts={}
opts = parse_opts testrun.options, opts
Stella.ld "testrun opts: #{opts.inspect}"
threads = []
testrun.stime = Stella.now
testrun.running!
opts[:concurrency].times do
threads << Thread.new do
client = Stella::Client.new opts
Benelux.current_track "client_#{client.clientid.shorten}"
begin
opts[:repetitions].times do |idx|
Stella.li '%-61s %s' % [testrun.plan.desc, testrun.plan.planid.shorten(12)] if Stella.noise >= 2 && !Stella.quiet?
testrun.plan.usecases.each_with_index do |uc,i|
if opts[:usecases].nil? || opts[:usecases].member?(uc.class)
Benelux.current_track.add_tags :usecase => uc.id
Stella.rescue {
Stella.li ' %-60s %s' % [uc.desc, uc.ucid.shorten(12)] if Stella.noise >= 1 && !Stella.quiet?
client.execute uc do |session|
Stella.li ' %3d %-4s %-76s' % [session.status, session.http_method.upcase, session.uri] if Stella.noise >= 1 && !Stella.quiet?
if Stella.noise >= 2 && !Stella.quiet?
Stella.li ' %s' % [session.req.header.dump.split(/\n/).join("\n ")]
Stella.li
Stella.li ' %s' % [session.res.header.dump.split(/\n/).join("\n ")]
Stella.li ''
end
end
}
if client.exception
if Stella.noise >= 1
Stella.li ' %4s %s (%s)' % ['', client.exception.message, client.exception.class]
end
break if Stella::TestplanQuit === client.exception
end
else
end
Benelux.current_track.remove_tags :usecase
end
end
rescue Interrupt
Stella.li "Skipping..."
testrun.etime = Stella.now
testrun.fubar!
exit 1
rescue => ex
Stella.li ex.message
Stella.li ex.backtrace if Stella.debug?
end
end
end
begin
threads.each { |thread| thread.join }
timeline = Benelux.merge_tracks
rescue Interrupt
Stella.li "Skipping..."
testrun.etime = Stella.now
testrun.fubar!
exit 1
end
begin
testrun.etime = Stella.now
testrun.report = Stella::Report.new timeline, testrun.runid
testrun.report.process
testrun.report.fubars? ? testrun.fubar! : testrun.done!
rescue Interrupt
Stella.li "Exiting..."
testrun.etime = Stella.now
testrun.fubar!
exit 1
rescue => ex
Stella.li ex.message
Stella.li ex.backtrace if Stella.debug?
testrun.etime = Stella.now
testrun.fubar!
end
Benelux.reset
testrun
end