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

You will need to have Gemcutter in your list of gem sources.

gem install 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.