test_benchmark icon indicating copy to clipboard operation
test_benchmark copied to clipboard

*NOT ACTIVELY MAINTAINED* Rails plugin (and/or ruby gem) for benchmarking your test::units: a rework of the original by topfunky

h1. Not actively maintained

h1. Test Benchmark

A ruby gem and rails plugin to show you how slow your Test::Unit tests run. Useful for troubleshooting/isolating slow tests. Available from http://github.com/timocratic/test_benchmark/

Sample output:


  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)

h2. Install and enable

h3. As a Rails Plugin

./script/plugin install git://github.com/timocratic/test_benchmark.git

h3. As a Ruby gem

h4. Install

  • Update to RubyGems 1.2.0+ before proceeding!!
  • gem sources -a http://gems.github.com (you only have to do this once)
  • sudo gem install timocratic-test_benchmark

h4. Enable

  • require 'rubygems'
  • require 'test_benchmark

h3. As a (frozen) gem in rails

I recommend this method. It makes updating simple, and if I had more config in the future, that will be easily done only in your test environment

h4. in config/environments/test.rb


config.gem "timocratic-test_benchmark", :lib => 'test_benchmark', :source => 'http://gems.github.com', :version => '0.4.2' #update to whatever version number is current

h4. from the console


RAILS_ENV=test GEM=timocratic-test_benchmark rake gems:install
RAILS_ENV=test GEM=timocratic-test_benchmark rake gems:unpack #optional, but suggested step - 'freezing' the gem

h2. Options and disabling temporarily

By default the top 15 slowest tests are output to the console (and in Rails the whole list is dumped to test.log). To see the full dump in your console (as well as get a per-file/suite breakdown) set the env variable BENCHMARK to 'full':

BENCHMARK=full rake test

To disable completely, run with it set to 'false' instead.

You can also customize the number of results through the Test::Unit::UI::Console::TestRunner.set_test_benchmark_limits(set_display_limit, set_suite_display_limit) method. For example, putting this line in your test_helper.rb file will output a summary of 5 slowest tests and 3 slowest test classes:


Test::Unit::UI::Console::TestRunner.set_test_benchmark_limits(5, 3)

And this will disable output entirely:


Test::Unit::UI::Console::TestRunner.set_test_benchmark_limits(0, 0)