Parallel your specs
A long time ago
many, many commits ago
Build was green
and fast :)
Tests were even faster
But winter finally came
Actually it was summer
and build was slow :-(
Save time
&
get faster feedback
Parallel specs
splitting your test suite
Test suite example
1_fast_spec.rb
2_fast_spec.rb
3_fast_spec.rb
4_fast_spec.rb
5_slow_spec.rb
6_slow_spec.rb
7_slow_spec.rb
8_super_slow_spec.rb
Balancing
split all test files across N nodes:
Node 1
1_fast_spec.rb
2_fast_spec.rb
Node 2
3_fast_spec.rb
4_fast_spec.rb
Node 3
5_slow_spec.rb
6_slow_spec.rb
Node 4
7_slow_spec.rb
8_super_slow_spec.rb
It ends up like this...
Time for the rescue
let's split tests based on the time execution
with Knapsack gem
The Epic Split
Node 1
8_super_slow_spec.rb
Node 2
7_slow_spec.rb
4_fast_spec.rb
1_fast_spec.rb
Node 3
6_slow_spec.rb
3_fast_spec.rb
Node 4
5_slow_spec.rb
2_fast_spec.rb
How about time
How to set up Knapsack?
# Gemfile
gem 'knapsack'
# Gemfile
gem 'knapsack'
spec_helper.rb
require 'knapsack'
Knapsack::Adapters::RspecAdapter.bind
Rakefile
require 'knapsack' Knapsack.load_tasks
Generate time execution report
for your spec files
$ KNAPSACK_GENERATE_REPORT=true \ bundle exec rspec spec
run it on CI machine
Commit generated report
into your repository
knapsack_report.json
Setup your CI server
$ CI_NODE_TOTAL=2 CI_NODE_INDEX=0 \ bundle exec rake knapsack:rspec
Note for CircleCI users
circleci.yml
test:
override:
- bundle exec rake knapsack:rspec: # required colon at the end
parallel: true # 4 spaces indentation
github.com/ArturT/knapsack
badly needed
Happy coding
Sources:
Why knapsack?
Artur Trzop @ lunarlogic.io
VII 2014
Knapsack to parallel your specs
By ArturT
Knapsack to parallel your specs
Parallel specs across CI server nodes based on each spec file's time execution.
- 3,764