0
我最近決定爲我們的Rails 3.0應用的測試套件編寫一個簡單的測試運行時分析器。這是一個非常簡單(讀:哈克)腳本,每次測試的時間增加了一個全球性的,然後將結果在運行結束時輸出:覆蓋rake測試:單元跑步者
require 'test/unit/ui/console/testrunner'
module ProfilingHelper
def self.included mod
$test_times ||= []
mod.class_eval do
setup :setup_profiling
def setup_profiling
@test_start_time = Time.now
end
teardown :teardown_profiling
def teardown_profiling
@test_took_time = Time.now - @test_start_time
$test_times << [name, @test_took_time]
end
end
end
end
class ProfilingRunner < Test::Unit::UI::Console::TestRunner
def finished(elapsed_time)
super
tests = $test_times.sort{|x,y| y[1] <=> x[1]}.first(100)
output("Top 100 slowest tests:")
tests.each do |t|
output("#{t[1].round(2)}s: \t #{t[0]}")
end
end
end
Test::Unit::AutoRunner::RUNNERS[:profiling] = proc do |r|
ProfilingRunner
end
這讓我跑套房像這樣rake test:xxx TESTOPTS="--runner=profiling"
並獲得附加到默認跑步者輸出結尾的前100名測試列表。它適用於test:functionals
和test:integration
,甚至是test:units TEST='test/unit/an_example_test.rb'
。但是,如果我沒有指定test:units
的測試,則TESTOPTS似乎被忽略。
這是爲什麼在這種情況下需要的是超越我,所以,如果有人可以幫我找到這個問題的答案,將不勝感激。 – RubberDucky