mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
minitest/ruby19 compatible performance test
This commit is contained in:
parent
3e9bb5459c
commit
25288c137c
1 changed files with 88 additions and 43 deletions
|
@ -3,12 +3,100 @@ begin
|
|||
|
||||
require 'fileutils'
|
||||
require 'rails/version'
|
||||
require 'active_support/concern'
|
||||
require 'active_support/core_ext/class/delegating_attributes'
|
||||
require 'active_support/core_ext/string/inflections'
|
||||
|
||||
module ActiveSupport
|
||||
module Testing
|
||||
module Performance
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
included do
|
||||
superclass_delegating_accessor :profile_options
|
||||
self.profile_options = DEFAULTS
|
||||
|
||||
if defined?(MiniTest::Assertions) && TestCase < MiniTest::Assertions
|
||||
include ForMiniTest
|
||||
else
|
||||
include ForClassicTestUnit
|
||||
end
|
||||
end
|
||||
|
||||
module ForMiniTest
|
||||
def run(runner)
|
||||
@runner = runner
|
||||
|
||||
run_warmup
|
||||
if profile_options && metrics = profile_options[:metrics]
|
||||
metrics.each do |metric_name|
|
||||
if klass = Metrics[metric_name.to_sym]
|
||||
run_profile(klass.new)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def run_test(metric, mode)
|
||||
result = '.'
|
||||
begin
|
||||
run_callbacks :setup
|
||||
setup
|
||||
metric.send(mode) { __send__ method_name }
|
||||
rescue Exception => e
|
||||
result = @runner.puke(self.class, method_name, e)
|
||||
ensure
|
||||
begin
|
||||
teardown
|
||||
run_callbacks :teardown, :enumerator => :reverse_each
|
||||
rescue Exception => e
|
||||
result = @runner.puke(self.class, method_name, e)
|
||||
end
|
||||
end
|
||||
result
|
||||
end
|
||||
end
|
||||
|
||||
module ForClassicTestUnit
|
||||
def run(result)
|
||||
return if method_name =~ /^default_test$/
|
||||
|
||||
yield(self.class::STARTED, name)
|
||||
@_result = result
|
||||
|
||||
run_warmup
|
||||
if profile_options && metrics = profile_options[:metrics]
|
||||
metrics.each do |metric_name|
|
||||
if klass = Metrics[metric_name.to_sym]
|
||||
run_profile(klass.new)
|
||||
result.add_run
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
yield(self.class::FINISHED, name)
|
||||
end
|
||||
|
||||
def run_test(metric, mode)
|
||||
run_callbacks :setup
|
||||
setup
|
||||
metric.send(mode) { __send__ @method_name }
|
||||
rescue ::Test::Unit::AssertionFailedError => e
|
||||
add_failure(e.message, e.backtrace)
|
||||
rescue StandardError, ScriptError => e
|
||||
add_error(e)
|
||||
ensure
|
||||
begin
|
||||
teardown
|
||||
run_callbacks :teardown, :enumerator => :reverse_each
|
||||
rescue ::Test::Unit::AssertionFailedError => e
|
||||
add_failure(e.message, e.backtrace)
|
||||
rescue StandardError, ScriptError => e
|
||||
add_error(e)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
DEFAULTS =
|
||||
if benchmark = ARGV.include?('--benchmark') # HAX for rake test
|
||||
{ :benchmark => true,
|
||||
|
@ -24,53 +112,10 @@ begin
|
|||
:output => 'tmp/performance' }
|
||||
end.freeze
|
||||
|
||||
def self.included(base)
|
||||
base.superclass_delegating_accessor :profile_options
|
||||
base.profile_options = DEFAULTS
|
||||
end
|
||||
|
||||
def full_test_name
|
||||
"#{self.class.name}##{method_name}"
|
||||
end
|
||||
|
||||
def run(result)
|
||||
return if method_name =~ /^default_test$/
|
||||
|
||||
yield(self.class::STARTED, name)
|
||||
@_result = result
|
||||
|
||||
run_warmup
|
||||
if profile_options && metrics = profile_options[:metrics]
|
||||
metrics.each do |metric_name|
|
||||
if klass = Metrics[metric_name.to_sym]
|
||||
run_profile(klass.new)
|
||||
result.add_run
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
yield(self.class::FINISHED, name)
|
||||
end
|
||||
|
||||
def run_test(metric, mode)
|
||||
run_callbacks :setup
|
||||
setup
|
||||
metric.send(mode) { __send__ @method_name }
|
||||
rescue ::Test::Unit::AssertionFailedError => e
|
||||
add_failure(e.message, e.backtrace)
|
||||
rescue StandardError, ScriptError => e
|
||||
add_error(e)
|
||||
ensure
|
||||
begin
|
||||
teardown
|
||||
run_callbacks :teardown, :enumerator => :reverse_each
|
||||
rescue ::Test::Unit::AssertionFailedError => e
|
||||
add_failure(e.message, e.backtrace)
|
||||
rescue StandardError, ScriptError => e
|
||||
add_error(e)
|
||||
end
|
||||
end
|
||||
|
||||
protected
|
||||
def run_warmup
|
||||
GC.start
|
||||
|
|
Loading…
Reference in a new issue