parallel_tests 1.0.5 → 1.0.6
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +3 -0
- data/Gemfile.lock +1 -1
- data/Readme.md +1 -1
- data/lib/parallel_tests/cli.rb +6 -4
- data/lib/parallel_tests/version.rb +1 -1
- data/spec/parallel_tests/cli_spec.rb +63 -0
- data/spec/parallel_tests/gherkin/runner_behaviour.rb +2 -1
- metadata +54 -35
- checksums.yaml +0 -7
data/.travis.yml
CHANGED
data/Gemfile.lock
CHANGED
data/Readme.md
CHANGED
@@ -184,7 +184,7 @@ Options are:
|
|
184
184
|
--no-symlinks Do not traverse symbolic links to find test files
|
185
185
|
--ignore-tags [PATTERN] When counting steps ignore scenarios with tags that match this pattern
|
186
186
|
--nice execute test commands with low priority.
|
187
|
-
--only-group [
|
187
|
+
--only-group INT[, INT] Group the files, but only run the group(s) specified here. Requires group-by filesize (will be set automatically if group-by is blank and only-group is specified)
|
188
188
|
-v, --version Show Version
|
189
189
|
-h, --help Show this.
|
190
190
|
|
data/lib/parallel_tests/cli.rb
CHANGED
@@ -36,9 +36,11 @@ module ParallelTests
|
|
36
36
|
groups = @runner.tests_in_groups(options[:files], num_processes, options)
|
37
37
|
|
38
38
|
test_results = if options[:only_group]
|
39
|
-
|
40
|
-
|
41
|
-
|
39
|
+
groups_to_run = options[:only_group].collect{|i| groups[i - 1]}
|
40
|
+
report_number_of_tests(groups_to_run)
|
41
|
+
execute_in_parallel(groups_to_run, groups_to_run.size, options) do |group|
|
42
|
+
run_tests(group, groups_to_run.index(group), 1, options)
|
43
|
+
end
|
42
44
|
else
|
43
45
|
report_number_of_tests(groups)
|
44
46
|
|
@@ -124,7 +126,7 @@ TEXT
|
|
124
126
|
options[:isolate] = true
|
125
127
|
end
|
126
128
|
|
127
|
-
opts.on("--only-group [
|
129
|
+
opts.on("--only-group INT[, INT]", Array) { |groups| options[:only_group] = groups.map(&:to_i) }
|
128
130
|
|
129
131
|
opts.on("-e", "--exec [COMMAND]", "execute this code parallel and with ENV['TEST_ENV_NUM']") { |path| options[:execute] = path }
|
130
132
|
opts.on("-o", "--test-options '[OPTIONS]'", "execute test commands with those options") { |arg| options[:test_options] = arg }
|
@@ -33,6 +33,30 @@ describe ParallelTests::CLI do
|
|
33
33
|
it "parses nice as nice" do
|
34
34
|
call(["--nice"]).should == defaults.merge(:nice => true)
|
35
35
|
end
|
36
|
+
|
37
|
+
context "parse only-group" do
|
38
|
+
it "group_by should be set to filesize" do
|
39
|
+
call(["--only-group", '1']).should == defaults.merge(:group_by=>:filesize, :only_group => [1])
|
40
|
+
end
|
41
|
+
|
42
|
+
it "raise error when group_by isn't filesize" do
|
43
|
+
expect{
|
44
|
+
call(["--only-group", '1', '--group-by', 'steps'])
|
45
|
+
}.to raise_error(RuntimeError)
|
46
|
+
end
|
47
|
+
|
48
|
+
context "with group_by default to filesize" do
|
49
|
+
let(:defaults_with_filesize){defaults.merge(:group_by => :filesize)}
|
50
|
+
|
51
|
+
it "with multiple groups" do
|
52
|
+
call(["--only-group", '4,5']).should == defaults_with_filesize.merge(:only_group => [4,5])
|
53
|
+
end
|
54
|
+
|
55
|
+
it "with a single group" do
|
56
|
+
call(["--only-group", '4']).should == defaults_with_filesize.merge(:only_group => [4])
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
36
60
|
end
|
37
61
|
|
38
62
|
describe "#load_runner" do
|
@@ -73,6 +97,45 @@ describe ParallelTests::CLI do
|
|
73
97
|
subject.send(:final_fail_message).should == "\e[31mTests Failed\e[0m"
|
74
98
|
end
|
75
99
|
end
|
100
|
+
|
101
|
+
describe "#run_tests_in_parallel" do
|
102
|
+
context "specific groups to run" do
|
103
|
+
let(:results){ {:stdout => "", :exit_status => 0} }
|
104
|
+
before do
|
105
|
+
subject.should_receive(:load_runner).with("my_test_runner").and_return(ParallelTests::MyTestRunner::Runner)
|
106
|
+
ParallelTests::MyTestRunner::Runner.stub(:test_file_name).and_return("test")
|
107
|
+
ParallelTests::MyTestRunner::Runner.should_receive(:tests_in_groups).and_return([
|
108
|
+
['aaa','bbb'],
|
109
|
+
['ccc', 'ddd'],
|
110
|
+
['eee', 'fff']
|
111
|
+
])
|
112
|
+
subject.should_receive(:report_results).and_return(nil)
|
113
|
+
end
|
114
|
+
|
115
|
+
it "calls run_tests once when one group specified" do
|
116
|
+
subject.should_receive(:run_tests).once.and_return(results)
|
117
|
+
subject.run(['-n', '3', '--only-group', '1', '-t', 'my_test_runner'])
|
118
|
+
end
|
119
|
+
|
120
|
+
it "calls run_tests twice when two groups are specified" do
|
121
|
+
subject.should_receive(:run_tests).twice.and_return(results)
|
122
|
+
subject.run(['-n', '3', '--only-group', '1,2', '-t', 'my_test_runner'])
|
123
|
+
end
|
124
|
+
|
125
|
+
it "run only one group specified" do
|
126
|
+
options = {:count=>3, :only_group=>[2], :files=>[], :group_by=>:filesize}
|
127
|
+
subject.should_receive(:run_tests).once.with(['ccc', 'ddd'], 0, 1, options).and_return(results)
|
128
|
+
subject.run(['-n', '3', '--only-group', '2', '-t', 'my_test_runner'])
|
129
|
+
end
|
130
|
+
|
131
|
+
it "run twice with multiple groups" do
|
132
|
+
options = {:count=>3, :only_group=>[2,3], :files=>[], :group_by=>:filesize}
|
133
|
+
subject.should_receive(:run_tests).once.ordered.with(['ccc', 'ddd'], 0, 1, options).and_return(results)
|
134
|
+
subject.should_receive(:run_tests).once.ordered.with(['eee', 'fff'], 1, 1, options).and_return(results)
|
135
|
+
subject.run(['-n', '3', '--only-group', '2,3', '-t', 'my_test_runner'])
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
76
139
|
end
|
77
140
|
|
78
141
|
|
@@ -192,7 +192,8 @@ EOF
|
|
192
192
|
test_files = %w(features/a.rb:23 features/a.rb:44 features/b.rb:12)
|
193
193
|
|
194
194
|
ParallelTests::Test::Runner.should_receive(:execute_command).with do |a,b,c,d|
|
195
|
-
|
195
|
+
argv = a.split("--").last.split(" ")[2..-1].sort
|
196
|
+
argv == ["features/a.rb:23:44", "features/b.rb:12"]
|
196
197
|
end
|
197
198
|
|
198
199
|
call(test_files, 1, 2, { :group_by => :scenarios })
|
metadata
CHANGED
@@ -1,42 +1,51 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: parallel_tests
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 27
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 1
|
8
|
+
- 0
|
9
|
+
- 6
|
10
|
+
version: 1.0.6
|
5
11
|
platform: ruby
|
6
|
-
authors:
|
12
|
+
authors:
|
7
13
|
- Michael Grosser
|
8
14
|
autorequire:
|
9
15
|
bindir: bin
|
10
16
|
cert_chain: []
|
11
|
-
|
12
|
-
|
13
|
-
|
17
|
+
|
18
|
+
date: 2014-08-21 00:00:00 Z
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
prerelease: false
|
14
22
|
name: parallel
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ">="
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '0'
|
20
23
|
type: :runtime
|
21
|
-
|
22
|
-
|
23
|
-
requirements:
|
24
|
+
version_requirements: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
24
27
|
- - ">="
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 3
|
30
|
+
segments:
|
31
|
+
- 0
|
32
|
+
version: "0"
|
33
|
+
requirement: *id001
|
27
34
|
description:
|
28
35
|
email: michael@grosser.it
|
29
|
-
executables:
|
36
|
+
executables:
|
30
37
|
- parallel_spinach
|
31
38
|
- parallel_cucumber
|
32
39
|
- parallel_rspec
|
33
40
|
- parallel_test
|
34
41
|
extensions: []
|
42
|
+
|
35
43
|
extra_rdoc_files: []
|
36
|
-
|
37
|
-
|
38
|
-
-
|
39
|
-
-
|
44
|
+
|
45
|
+
files:
|
46
|
+
- .gitignore
|
47
|
+
- .rspec
|
48
|
+
- .travis.yml
|
40
49
|
- Gemfile
|
41
50
|
- Gemfile.lock
|
42
51
|
- Rakefile
|
@@ -88,27 +97,37 @@ files:
|
|
88
97
|
- spec/parallel_tests_spec.rb
|
89
98
|
- spec/spec_helper.rb
|
90
99
|
homepage: http://github.com/grosser/parallel_tests
|
91
|
-
licenses:
|
100
|
+
licenses:
|
92
101
|
- MIT
|
93
|
-
metadata: {}
|
94
102
|
post_install_message:
|
95
103
|
rdoc_options: []
|
96
|
-
|
104
|
+
|
105
|
+
require_paths:
|
97
106
|
- lib
|
98
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
99
|
-
|
107
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
108
|
+
none: false
|
109
|
+
requirements:
|
100
110
|
- - ">="
|
101
|
-
- !ruby/object:Gem::Version
|
102
|
-
|
103
|
-
|
104
|
-
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
hash: 3
|
113
|
+
segments:
|
114
|
+
- 0
|
115
|
+
version: "0"
|
116
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
117
|
+
none: false
|
118
|
+
requirements:
|
105
119
|
- - ">="
|
106
|
-
- !ruby/object:Gem::Version
|
107
|
-
|
120
|
+
- !ruby/object:Gem::Version
|
121
|
+
hash: 3
|
122
|
+
segments:
|
123
|
+
- 0
|
124
|
+
version: "0"
|
108
125
|
requirements: []
|
126
|
+
|
109
127
|
rubyforge_project:
|
110
|
-
rubygems_version:
|
128
|
+
rubygems_version: 1.8.15
|
111
129
|
signing_key:
|
112
|
-
specification_version:
|
130
|
+
specification_version: 3
|
113
131
|
summary: Run Test::Unit / RSpec / Cucumber / Spinach in parallel
|
114
132
|
test_files: []
|
133
|
+
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: 95fdce8bba80efd898bd2be638c7d8ac3ed01e50
|
4
|
-
data.tar.gz: c7070894cfb9c0b4befaedb42d9e91d45a578eca
|
5
|
-
SHA512:
|
6
|
-
metadata.gz: f818a67bc31e2cac2daa2f3621c1c0c10cf58a23e1228a124b43af356d5025db24a231c73a456e0178cdd31939ca7cead04d698630a29f20e8ab82941de0b4ec
|
7
|
-
data.tar.gz: dd574fc4717185181ba2c213d5af4683b97a88a7df7bc326201131e954d9d8da555eb6cf7b30af3310f6cdd4bbcaebe464076895443394ecd3e9acbc92ffd0d7
|