2009-11-12 2 views
4

Я хотел бы знать, сколько потребовалось для выполнения 10 самых трудоемких тестов. Как я могу сделать с rspec, любое предложение?Как я могу выполнить профилирование рубинов?

+1

Другим решением было бы знать, сколько взяли каждый тест, а не только 10 наиболее трудоёмким. –

+0

Возможно, [этот плагин] (http://github.com/timocratic/test_benchmark) может вам помочь. –

+0

Прямо сейчас я пытаюсь подключить rspec к модульному тесту ... –

ответ

7

Короткий ответ:

gem install minitest # Install MiniTest 
gem install minitest_tu_shim # Install Test::Unit shim 
use_minitest yes # Use MiniTest Test::Unit shim instead of stdlib Test::Unit 
ruby your_test.rb -v # Run your test in verbose mode 

Ruby 1.9 Использование MiniTest в качестве тестирования по умолчанию рамки вместо Test::Unit. MiniTest меньше, быстрее, имеет более полезные функции и в значительной степени обратно совместим с Test :: Unit. Одной из этих новых функций является измерение времени, которое каждый тест берет с флагом -v. При запуске е, что вы поместите этот флаг после того, как сценарий

Если, как в рельсах, вы используете Rake::TestTask для запуска тестов, вы можете либо указать его во время выполнения, запустив

rake test TESTOPTS='-v' 

или указать его в задаче, добавив -v атрибуту options, как так

Rake::TestTask.new do |t| 
    t.options = '-v' 
end 

Наконец, если вы используете рельсы и MiniTest просто не достаточно хорошо для вас, вы можете оценить test_benchmark plugi п. Использование легко. Добавьте следующую строку в config/environments/test.rb

config.gem "timocratic-test_benchmark", 
    :lib => 'test_benchmark', 
    :source => 'http://gems.github.com' 

Установите его с

RAILS_ENV='test' rake gems:install 

С тех пор, вы получите хороший отсортированный список, когда вы запускаете тесты

rake test:units 
[...] 
Test Benchmark Times: Suite Totals: 
7.124 test_destroy(FeedTest) 
7.219 test_create(FeedTest) 
7.646 test_subscribe_to_auto_discovery(FeedTest) 
9.339 test_auto_discover_updates_url(FeedTest) 
9.543 test_find_or_create_by_auto_discover_url(FeedTest) 
15.780 test_import_from_opml(FeedTest) 

Я К сожалению, MiniTest и плагин test_benchmark несовместимы друг с другом, но я настоятельно рекомендую вам попробовать MiniTest, так как это сделает ваш твой sts быстрее и будет поддерживаться в Ruby 1.9.

+0

Действительно классно! Большое спасибо! –

+0

В последних версиях драгоценного камня 'test-unit' также отображается время, взятое в подробном режиме. –

+0

oops Я тестировал это, и я получаю: ARGH! кто-то определил Test :: Unit :: TestCase вместо того, чтобы требовать /usr/local/lib/site_ruby/1.8/rubygems.rb:777:in 'report_activate_error ': не удалось найти тестовый блок RubyGem (= 1.2.3) (Gem :: LoadError) Любая идея? –

0

Возможно, выполните ваши юнит-тесты под профилем ruby, выполнив код с ruby -rprofile вместо ruby?

+0

Спасибо за ответ, я пытаюсь запустить его, как вы сказали, но я получаю это: /usr/lib/ruby/1.8/profiler. rb: 13: в 'hash ': bignum слишком большой, чтобы преобразовать в' long' (RangeError) –

1

Minitest :: Профиль - это новый камень, в котором перечислены верхние нарушители после стандартного тестового прогона.

https://github.com/nmeans/minitest-profile

+1

Мы использовали это, и это неплохо –

Смежные вопросы