multitest
Caveats
Multitest is still very young, it is in active development and is no where near complete or robust.
Multitest currently only works in a rails environment. It’s only because I use “constantize”.
If you depend on fixture data in your database, you may have data inconsistency errors. I like to use an empty DB and then use factories with transactional tests, and this runs great.
Installation
gem install ngauthier-multitest
Usage
in your Rakefile:
require 'multitest'
require 'multitest/tasks'
on the commandline:
rake multitest
rake multitest:units multitest:functionals multitest:integration
Configuration
in your Rakefile:
Multitest.cores = 8
Benchmarks
This is one of our largest apps.
Normal suite
time rake test
259.03user 27.50system 5:14.76elapsed 91%CPU
2 Cores
time rake multitest
213.86user 23.38system 2:41.24elapsed 147%CPU
4 Cores
time rake multitest
223.18user 24.53system 2:08.96elapsed 192%CPU
Note the wall-time differences of 5:14 vs 2:41. 195% speedup on two cores. On 4 cores there is only a speedup of 243%, but that’s still quicker. If you send me impressive benchmarks, I’ll be happy to put them up here (8 cores anyone?).
Require Errors
If you get require errors like:
Running multitest:units
rake aborted!
no such file to load -- test_helper
Then you may want to use more absolute paths in your tests. For example, if you had:
# test/unit/my_class.rb
require 'test_helper'
class MyClass < ActiveSupport::TestCase
end
You should change it to:
# test/unit/my_class.rb
require File.join(File.dirname(__FILE__), '..', 'test_helper')
class MyClass < ActiveSupport::TestCase
end
Note on Patches/Pull Requests
-
Fork the project.
-
Make your feature addition or bug fix.
-
Add tests for it. This is important so I don’t break it in a future version unintentionally.
-
Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
-
Send me a pull request. Bonus points for topic branches.
Copyright
Copyright © 2009 Nick Gauthier. See LICENSE for details.