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 © 2009 Nick Gauthier. See LICENSE for details.