Как я могу профилировать выполнение юнит-тестов ruby? - PullRequest
4 голосов
/ 12 ноября 2009

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

Ответы [ 3 ]

7 голосов
/ 13 ноября 2009

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

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. При запуске убедитесь, что вы ставите этот флаг после скрипта

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

rake test TESTOPTS='-v'

или укажите его в задаче, добавив -v к атрибуту options, например

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

Наконец, если вы используете рельсы, а MiniTest вам не подходит, вы можете по достоинству оценить плагин test_benchmark. Использование легко. Добавьте следующую строку к вашему 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, так как это сделает ваши тесты быстрее и будет работать поддерживается в Ruby 1.9.

0 голосов
/ 19 февраля 2015

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

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

0 голосов
/ 12 ноября 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...