parallel_tests 0.4.11 → 0.4.12
Sign up to get free protection for your applications and to get access to all the features.
- data/Readme.md +9 -7
- data/VERSION +1 -1
- data/bin/parallel_test +10 -2
- data/lib/parallel_tests/tasks.rb +4 -4
- data/parallel_tests.gemspec +2 -2
- data/spec/integration_spec.rb +5 -0
- metadata +4 -4
data/Readme.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
Speedup Test::Unit + RSpec + Cucumber by running parallel on multiple CPUs.
|
1
|
+
Speedup Test::Unit + RSpec + Cucumber by running parallel on multiple CPUs(or cores).
|
2
2
|
|
3
3
|
Setup for Rails
|
4
4
|
===============
|
@@ -90,8 +90,9 @@ Options are:
|
|
90
90
|
-m, --multiply-processes [FLOAT] use given number as a multiplier of processes to run
|
91
91
|
-r, --root [PATH] execute test commands from this path
|
92
92
|
-e, --exec [COMMAND] execute this code parallel and with ENV['TEST_ENV_NUM']
|
93
|
-
-o, --test-options '[OPTIONS]'
|
93
|
+
-o, --test-options '[OPTIONS]' execute test commands with those options
|
94
94
|
-t, --type [TYPE] which type of tests to run? test, spec or features
|
95
|
+
--non-parallel execute same commands but do not in parallel, needs --exec
|
95
96
|
-v, --version Show Version
|
96
97
|
-h, --help Show this.
|
97
98
|
|
@@ -112,14 +113,15 @@ You can run any kind of code with -e / --execute
|
|
112
113
|
TIPS
|
113
114
|
====
|
114
115
|
- [Capybara + Selenium] add to env.rb: `Capybara.server_port = 8888 + ENV['TEST_ENV_NUMBER'].to_i`
|
115
|
-
- [RSpec] add a `spec/parallel_spec.opts` to use different options, e.g. no --drb (default: `spec/spec.opts`)
|
116
|
+
- [RSpec] add a `spec/parallel_spec.opts` to use different options, e.g. no --drb (default: `spec/spec.opts`)
|
116
117
|
- [RSpec] if something looks fishy try to delete `script/spec`
|
117
118
|
- [RSpec] if `script/spec` is missing parallel:spec uses just `spec` (which solves some issues with double-loaded environment.rb)
|
118
119
|
- [RSpec] 'script/spec_server' or [spork](http://github.com/timcharper/spork/tree/master) do not work in parallel
|
119
120
|
- [RSpec] `./script/generate rspec` if you are running rspec from gems (this plugin uses script/spec which may fail if rspec files are outdated)
|
120
121
|
- [Bundler] if you have a `Gemfile` then `bundle exec` will be used to run tests
|
121
122
|
- [Capybara setup](https://github.com/grosser/parallel_tests/wiki)
|
122
|
-
- [Sphinx setup](https://github.com/grosser/parallel_tests/wiki)
|
123
|
+
- [Sphinx setup](https://github.com/grosser/parallel_tests/wiki)
|
124
|
+
- [SQL schema format] use :ruby schema format to get faster parallel:prepare`
|
123
125
|
- with zsh this would be `rake "parallel:prepare[3]"`
|
124
126
|
|
125
127
|
TODO
|
@@ -129,7 +131,7 @@ TODO
|
|
129
131
|
|
130
132
|
Authors
|
131
133
|
====
|
132
|
-
inspired by [pivotal labs](http://pivotallabs.com/users/miked/blog/articles/849-parallelize-your-rspec-suite)
|
134
|
+
inspired by [pivotal labs](http://pivotallabs.com/users/miked/blog/articles/849-parallelize-your-rspec-suite)
|
133
135
|
|
134
136
|
### [Contributors](http://github.com/grosser/parallel_tests/contributors)
|
135
137
|
- [Charles Finkel](http://charlesfinkel.com/)
|
@@ -149,6 +151,6 @@ inspired by [pivotal labs](http://pivotallabs.com/users/miked/blog/articles/849-
|
|
149
151
|
- [xxx](https://github.com/xxx)
|
150
152
|
- [Levent Ali](http://purebreeze.com/)
|
151
153
|
|
152
|
-
[Michael Grosser](http://
|
153
|
-
|
154
|
+
[Michael Grosser](http://grosser.it)<br/>
|
155
|
+
michael@grosser.it<br/>
|
154
156
|
Hereby placed under public domain, do what you want, just do not hold me accountable...
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.4.
|
1
|
+
0.4.12
|
data/bin/parallel_test
CHANGED
@@ -24,6 +24,7 @@ BANNER
|
|
24
24
|
opts.on("-e", '--exec [COMMAND]', "execute this code parallel and with ENV['TEST_ENV_NUM']"){|path| options[:execute] = path }
|
25
25
|
opts.on("-o", "--test-options '[OPTIONS]'", "execute test commands with those options"){|arg| options[:test_options] = arg }
|
26
26
|
opts.on("-t", "--type [TYPE]", "which type of tests to run? test, spec or features"){|type| options[:type] = type }
|
27
|
+
opts.on("--non-parallel", "execute same commands but do not in parallel, needs --exec"){|type| options[:non_parallel] = true }
|
27
28
|
opts.on('-v', '--version', 'Show Version'){ puts ParallelTests::VERSION; exit}
|
28
29
|
opts.on("-h", "--help", "Show this.") { puts opts; exit }
|
29
30
|
end.parse!
|
@@ -35,8 +36,15 @@ num_processes = options[:count] || Parallel.processor_count
|
|
35
36
|
num_processes = num_processes * (options[:multiply] || 1)
|
36
37
|
|
37
38
|
if options[:execute]
|
38
|
-
|
39
|
-
|
39
|
+
runs = (0...num_processes).to_a
|
40
|
+
results = if options[:non_parallel]
|
41
|
+
runs.map do |i|
|
42
|
+
ParallelTests.execute_command(options[:execute], i)
|
43
|
+
end
|
44
|
+
else
|
45
|
+
Parallel.map(runs, :in_processes => num_processes) do |i|
|
46
|
+
ParallelTests.execute_command(options[:execute], i)
|
47
|
+
end
|
40
48
|
end.flatten
|
41
49
|
abort if results.any?{|r| r[:exit_status] != 0 }
|
42
50
|
else
|
data/lib/parallel_tests/tasks.rb
CHANGED
@@ -2,7 +2,7 @@ namespace :parallel do
|
|
2
2
|
def run_in_parallel(cmd, options)
|
3
3
|
count = (options[:count] ? options[:count].to_i : nil)
|
4
4
|
executable = File.join(File.dirname(__FILE__), '..', '..', 'bin', 'parallel_test')
|
5
|
-
command = "#{executable} --exec '#{cmd}' -n #{count}"
|
5
|
+
command = "#{executable} --exec '#{cmd}' -n #{count} #{'--non-parallel' if options[:non_parallel]}"
|
6
6
|
abort unless system(command)
|
7
7
|
end
|
8
8
|
|
@@ -23,8 +23,9 @@ namespace :parallel do
|
|
23
23
|
Rake::Task['db:schema:dump'].invoke
|
24
24
|
Rake::Task['parallel:load_schema'].invoke(args[:count])
|
25
25
|
else
|
26
|
-
# there is no separate dump / load for schema_format :sql
|
27
|
-
|
26
|
+
# there is no separate dump / load for schema_format :sql -> do it safe and slow
|
27
|
+
args = args.to_hash.merge(:non_parallel => true) # normal merge returns nil
|
28
|
+
run_in_parallel('rake db:test:prepare --trace', args)
|
28
29
|
end
|
29
30
|
end
|
30
31
|
|
@@ -37,7 +38,6 @@ namespace :parallel do
|
|
37
38
|
# just load the schema (good for integration server <-> no development db)
|
38
39
|
desc "load dumped schema for test databases via db:schema:load --> parallel:load_schema[num_cpus]"
|
39
40
|
task :load_schema, :count do |t,args|
|
40
|
-
puts args.inspect
|
41
41
|
run_in_parallel('rake db:test:load', args)
|
42
42
|
end
|
43
43
|
|
data/parallel_tests.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{parallel_tests}
|
8
|
-
s.version = "0.4.
|
8
|
+
s.version = "0.4.12"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Michael Grosser"]
|
12
|
-
s.date = %q{2011-02-
|
12
|
+
s.date = %q{2011-02-18}
|
13
13
|
s.email = %q{grosser.michael@gmail.com}
|
14
14
|
s.executables = ["parallel_spec", "parallel_cucumber", "parallel_test"]
|
15
15
|
s.files = [
|
data/spec/integration_spec.rb
CHANGED
@@ -63,6 +63,11 @@ describe 'CLI' do
|
|
63
63
|
result.split("\n").sort.should == %w["" "2" "3" "4"]
|
64
64
|
end
|
65
65
|
|
66
|
+
it "can exec given command non-parallel" do
|
67
|
+
result = `#{executable} -e 'ruby -e "sleep(rand(10)/100.0); puts ENV[:TEST_ENV_NUMBER.to_s].inspect"' -n 4 --non-parallel`
|
68
|
+
result.split("\n").should == %w["" "2" "3" "4"]
|
69
|
+
end
|
70
|
+
|
66
71
|
it "exists with success if all sub-processes returned success" do
|
67
72
|
system("#{executable} -e 'cat /dev/null' -n 4").should == true
|
68
73
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: parallel_tests
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 23
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 4
|
9
|
-
-
|
10
|
-
version: 0.4.
|
9
|
+
- 12
|
10
|
+
version: 0.4.12
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Michael Grosser
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-02-
|
18
|
+
date: 2011-02-18 00:00:00 +01:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|