tchandy / parallel_specs forked from grosser/parallel_specs

Rails: 2 CPUs = 2x Testing Speed

This URL has Read+Write access

tchandy (author)
Sun Aug 02 14:43:32 -0700 2009
commit  ce94543424d80cc710c4094a4b4fa58c81e757b4
tree    f2d9224d21a2380f1c0f7144b963e77e49c58906
parent  0731f4bfdb96fd520c7e338eadce760a6a0cb6b5
name age message
file .gitignore Thu Jun 04 00:18:17 -0700 2009 Added ignore for local scripts. [joakimk]
file README.markdown Loading commit data...
file Rakefile Sun May 17 22:52:33 -0700 2009 starting TDD approach [grosser]
directory lib/
directory spec/
directory tasks/
README.markdown

Rake tasks to run tests or specs in parallel, to use multiple CPUs and speedup test runtime. more documentation and great illustrations

Setup

script/plugin install git://github.com/grosser/parallel_specs.git

Add <%= ENV['TEST_ENV_NUMBER'] %> to the database name for the test environment in config/database.yml,
it is '' for process 1, and '2' for process 2.

test:
  adapter: mysql
  database: xxx_test<%= ENV['TEST_ENV_NUMBER'] %>
  username: root

Create the databases

mysql -u root
create database xxx_test; #should normally exist...
create database xxx_test2;
...

Run like hell :D

rake parallel:prepare[2] #db:reset for 2 databases

rake parallel:spec[1] --> 1 cpu  --> 86 seconds
#OR for Test::Unit
rake parallel:test[1]

rake parallel:spec    --> 2 cpus --> 47 seconds
rake parallel:spec[4] --> 4 cpus --> 26 seconds
...

Just some subfolders please (e.g. set up one integration server to check each subfolder)

rake parallel:spec[2,models]
rake parallel:test[2,something/else]

partial paths are OK too...
rake parallel:test[2,functional] == rake parallel:test[2,fun]

Example output

2 processes for 210 specs, ~ 105 specs per process
... test output ...

Results:
877 examples, 0 failures, 11 pending
843 examples, 0 failures, 1 pending

Took 29.925333 seconds

TIPS

  • 'script/spec_server' or spork do not work in parallel
  • ./script/generate rspec if you are running rspec from gems (this plugin uses script/spec which may fail if rspec files are outdated)
  • with zsh this would be rake "parallel:prepare[3]"

TODO

  • find out how many CPUs the user has here
  • build parallel:bootstrap idea/basics

Authors

inspired by pivotal labs

Contributors

Michael Grosser
grosser.michael@gmail.com
Hereby placed under public domain, do what you want, just do not hold me accountable...