Git Product home page Git Product logo

parallel_specs's Introduction

Speedup RSpec + Test::Unit + Cucumber by running parallel on multiple CPUs.

Setup

sudo gem install parallel
script/plugin install git://github.com/grosser/parallel_specs.git

1: Add to config/database.yml

test:
  database: xxx_test<%= ENV['TEST_ENV_NUMBER'] %>

2: Create additional database(s)

script/db_console
create database xxx_test2;
...

3: Copy development schema (repeat after migrations)

rake parallel:prepare

4: Run!

rake parallel:spec          # RSpec
rake parallel:test          # Test::Unit
rake parallel:features      # Cucumber

rake parallel:spec[1] --> force 1 CPU --> 86 seconds
rake parallel:spec    --> got 2 CPUs? --> 47 seconds
rake parallel:spec    --> got 4 CPUs? --> 26 seconds
...

Test just a subfolder (e.g. use one integration server per subfolder) rake parallel:spec[models] rake parallel:test[something/else]

partial paths are OK too...
rake parallel:test[functional] == rake parallel:test[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

Even process runtimes (for specs only atm)

Add to your spec/parallel_spec.opts (or spec/spec.opts) : --format ParallelSpecs::SpecRuntimeLogger:tmp/parallel_profile.log It will log test runtime and partition the test-load accordingly.

TIPS

  • [RSpec] add a spec/parallel_spec.opts to use different options, e.g. no --drb (default: spec/spec.opts)
  • [RSpec] if something looks fishy try to delete script/spec
  • [RSpec] if script/spec is missing parallel:spec uses just spec (which solves some issues with double-loaded environment.rb)
  • [RSpec] 'script/spec_server' or spork do not work in parallel
  • [RSpec] ./script/generate rspec if you are running rspec from gems (this plugin uses script/spec which may fail if rspec files are outdated)
  • [Bundler] if you have a .bundle/environment.rb then bundle exec xxx will be used to run tests
  • with zsh this would be rake "parallel:prepare[3]"

TODO

  • make spec runtime recording/evaluating work with sub-folders
  • add gem + cli interface parallel_specs + parallel_tests + parallel_features -> non-rails projects
  • build parallel:bootstrap idea/basics
  • make jRuby compatible basics
  • make windows compatible (does anyone care ?)

Authors

inspired by pivotal labs

###Contributors (alphabetical)

Michael Grosser
[email protected]
Hereby placed under public domain, do what you want, just do not hold me accountable...

parallel_specs's People

Contributors

grosser avatar joakimk avatar hone avatar thiagopradi avatar mifix avatar willbryant avatar kpumuk avatar mhorbul avatar rdeshpande avatar

Stargazers

 avatar  avatar Alex B. avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.