multicuke 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +2 -1
- data/lib/multicuke/runner.rb +19 -16
- data/lib/multicuke/version.rb +1 -1
- data/lib/multicuke.rb +1 -4
- data/spec/runner_spec.rb +5 -2
- data/spec/system_command_spec.rb +0 -1
- metadata +3 -3
data/Gemfile
CHANGED
data/lib/multicuke/runner.rb
CHANGED
@@ -4,15 +4,15 @@ module Multicuke
|
|
4
4
|
|
5
5
|
# Wrapper of {Kernel#system} method for test/mock
|
6
6
|
class SystemCommand
|
7
|
-
|
7
|
+
|
8
8
|
def run(full_command_as_array)
|
9
9
|
system *full_command_as_array
|
10
|
-
end
|
10
|
+
end
|
11
11
|
|
12
12
|
def exit(status = 0)
|
13
13
|
Kernel.exit(status == 0)
|
14
14
|
end
|
15
|
-
|
15
|
+
|
16
16
|
end
|
17
17
|
|
18
18
|
# Set of features under one specific directory
|
@@ -45,11 +45,11 @@ module Multicuke
|
|
45
45
|
(scenarios_results.include?"failed") || (steps_results.include?"failed")
|
46
46
|
end
|
47
47
|
|
48
|
-
# Human readable name used for index page (ex: user_logout --> User logout)
|
48
|
+
# Human readable name used for index page (ex: user_logout --> User logout)
|
49
49
|
def human_name
|
50
50
|
name.gsub(/[_-]/, " ").capitalize
|
51
51
|
end
|
52
|
-
|
52
|
+
|
53
53
|
end
|
54
54
|
|
55
55
|
# Actual clas that will spawn one command process per directory of features collected
|
@@ -65,7 +65,7 @@ module Multicuke
|
|
65
65
|
# Optional full path for generated reports. Default to ../{features_root_path}.
|
66
66
|
attr_accessor :output_path
|
67
67
|
|
68
|
-
# Optional regexp for name of features directories to exclude.
|
68
|
+
# Optional regexp for name of features directories to exclude.
|
69
69
|
attr_accessor :excluded_dirs
|
70
70
|
|
71
71
|
# Optional only the features directories to be included
|
@@ -74,6 +74,9 @@ module Multicuke
|
|
74
74
|
# Array of extra options to pass to the command. Ex: ["-p", "my_profile", "--backtrace"]
|
75
75
|
attr_accessor :extra_options
|
76
76
|
|
77
|
+
# Define the size for the pool of forks. Default is 5
|
78
|
+
attr_accessor :forks_pool_size
|
79
|
+
|
77
80
|
# Full final path where html reports will be generated
|
78
81
|
attr_reader :reports_path
|
79
82
|
|
@@ -92,14 +95,15 @@ module Multicuke
|
|
92
95
|
yield self if block_given?
|
93
96
|
|
94
97
|
@dry_run = false if dry_run.nil?
|
98
|
+
@forks_pool_size ||= 5
|
95
99
|
@require_features_root_option = true if require_features_root_option.nil?
|
96
100
|
@output_dir_name = "cucumber_reports" unless output_dir_name
|
97
101
|
@output_path = File.expand_path("..", features_root_path) unless output_path
|
98
|
-
@excluded_dirs
|
99
|
-
@included_only_dirs
|
100
|
-
@extra_options
|
102
|
+
@excluded_dirs ||= []
|
103
|
+
@included_only_dirs ||= []
|
104
|
+
@extra_options ||= []
|
101
105
|
@reports_path = File.join(output_path, output_dir_name)
|
102
|
-
@system_command
|
106
|
+
@system_command ||= SystemCommand.new
|
103
107
|
end
|
104
108
|
|
105
109
|
def start
|
@@ -117,10 +121,9 @@ module Multicuke
|
|
117
121
|
if dry_run
|
118
122
|
0
|
119
123
|
else
|
120
|
-
features_dirs.
|
121
|
-
|
122
|
-
|
123
|
-
fork {
|
124
|
+
features_dirs.forkoff!(:processes => forks_pool_size){ |features_dir|
|
125
|
+
report_file_path = File.join(reports_path, "#{features_dir.name}.html")
|
126
|
+
feature_full_path = File.join(features_root_path, "#{features_dir.name}")
|
124
127
|
main_command = %W[bundle exec cucumber #{feature_full_path}]
|
125
128
|
options = %W[--format html --out #{report_file_path}]
|
126
129
|
options.concat %W[--require #{features_root_path}] if require_features_root_option
|
@@ -128,8 +131,8 @@ module Multicuke
|
|
128
131
|
result = system_command.run full_command
|
129
132
|
puts "Features '#{features_dir.name}' finished. #{result ? 'SUCCESS' : 'FAILURE'} (pid: #{Process.pid})"
|
130
133
|
exit(result)
|
131
|
-
}
|
132
134
|
}
|
135
|
+
|
133
136
|
global_exit_status = Process.waitall.inject(0) {|result, process|
|
134
137
|
pid, status = *process
|
135
138
|
result + status.exitstatus
|
@@ -148,7 +151,7 @@ module Multicuke
|
|
148
151
|
scenarios = scenarios_match ? scenarios_match.captures.first : ""
|
149
152
|
steps_match = content.match(/\d+ steps? \((.*?)\)/)
|
150
153
|
steps = steps_match ? steps_match.captures.first : ""
|
151
|
-
|
154
|
+
|
152
155
|
features_dir.scenarios_results = scenarios
|
153
156
|
features_dir.steps_results = steps
|
154
157
|
features_dir.duration = duration
|
data/lib/multicuke/version.rb
CHANGED
data/lib/multicuke.rb
CHANGED
data/spec/runner_spec.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require 'spec_helper'
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
module Multicuke
|
4
4
|
|
@@ -9,6 +9,7 @@ module Multicuke
|
|
9
9
|
r.output_path = "my_output_path"
|
10
10
|
r.dry_run = true
|
11
11
|
r.require_features_root_option = false
|
12
|
+
r.forks_pool_size = 10
|
12
13
|
r.excluded_dirs = ["my_first_dir", "my_second_dir"]
|
13
14
|
r.extra_options = ["-p", "profile"]
|
14
15
|
end
|
@@ -17,6 +18,7 @@ module Multicuke
|
|
17
18
|
runner.output_dir_name.should == "my_reports"
|
18
19
|
runner.output_path.should == "my_output_path"
|
19
20
|
runner.dry_run.should be_true
|
21
|
+
runner.forks_pool_size.should == 10
|
20
22
|
runner.require_features_root_option.should be_false
|
21
23
|
runner.excluded_dirs.should include("my_first_dir", "my_second_dir")
|
22
24
|
runner.extra_options.should include("-p", "profile")
|
@@ -27,10 +29,11 @@ module Multicuke
|
|
27
29
|
runner.output_dir_name.should == "cucumber_reports"
|
28
30
|
runner.output_path.should match "multicuke/spec$"
|
29
31
|
runner.dry_run.should be_false
|
32
|
+
runner.forks_pool_size.should == 5
|
30
33
|
runner.require_features_root_option.should be_true
|
31
34
|
runner.excluded_dirs.should be_empty
|
32
35
|
runner.extra_options.should be_empty
|
33
36
|
end
|
34
|
-
end
|
37
|
+
end
|
35
38
|
|
36
39
|
end
|
data/spec/system_command_spec.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: multicuke
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-04-
|
12
|
+
date: 2013-04-30 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: cucumber
|
@@ -111,7 +111,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
111
111
|
version: '0'
|
112
112
|
requirements: []
|
113
113
|
rubyforge_project:
|
114
|
-
rubygems_version: 1.8.
|
114
|
+
rubygems_version: 1.8.25
|
115
115
|
signing_key:
|
116
116
|
specification_version: 3
|
117
117
|
summary: Run one cucumber process per features directory
|