parallel_tests 3.10.1 → 3.12.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Readme.md +1 -0
- data/lib/parallel_tests/cli.rb +9 -14
- data/lib/parallel_tests/cucumber/scenarios.rb +3 -1
- data/lib/parallel_tests/tasks.rb +24 -18
- data/lib/parallel_tests/test/runner.rb +10 -4
- data/lib/parallel_tests/version.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 43b7f3d9cbea0ac1e60e570c94794ce1e6c5dc341c07beadea2c967a2504b284
|
4
|
+
data.tar.gz: cccd254b7ea61a2d718590647d8f4fb6166603bf5207de0dffc8ab359400d3a1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7f1a3d2a5644d801647d6650257c59fc2b33f9de9eb23d4475a9e53d6b9f14573a445c5dbf56d4af8f9066a9d9315380fe656cfccd1bbb796254bd66e49277ae
|
7
|
+
data.tar.gz: f60aebf5e1156f0fe05822c0c2e18f29469d2897a9b8db90963f257b93a4f8f79ea54f655447ec43b09127c69647d3081ad860a5a04b5f67ee014276c9366c0e
|
data/Readme.md
CHANGED
@@ -403,6 +403,7 @@ inspired by [pivotal labs](https://blog.pivotal.io/labs/labs/parallelize-your-rs
|
|
403
403
|
- [Joshua Pinter](https://github.com/joshuapinter)
|
404
404
|
- [Zach Dennis](https://github.com/zdennis)
|
405
405
|
- [Jon Dufresne](https://github.com/jdufresne)
|
406
|
+
- [Eric Kessler](https://github.com/enkessler)
|
406
407
|
|
407
408
|
[Michael Grosser](http://grosser.it)<br/>
|
408
409
|
michael@grosser.it<br/>
|
data/lib/parallel_tests/cli.rb
CHANGED
@@ -61,20 +61,15 @@ module ParallelTests
|
|
61
61
|
groups = @runner.tests_in_groups(options[:files], num_processes, options)
|
62
62
|
groups.reject!(&:empty?)
|
63
63
|
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
execute_in_parallel(groups_to_run, groups_to_run.size, options) do |group|
|
68
|
-
run_tests(group, groups_to_run.index(group), 1, options)
|
69
|
-
end
|
70
|
-
else
|
71
|
-
report_number_of_tests(groups) unless options[:quiet]
|
72
|
-
|
73
|
-
execute_in_parallel(groups, groups.size, options) do |group|
|
74
|
-
run_tests(group, groups.index(group), num_processes, options)
|
75
|
-
end
|
64
|
+
if options[:only_group]
|
65
|
+
groups = options[:only_group].map { |i| groups[i - 1] }.compact
|
66
|
+
num_processes = 1
|
76
67
|
end
|
77
68
|
|
69
|
+
report_number_of_tests(groups) unless options[:quiet]
|
70
|
+
test_results = execute_in_parallel(groups, groups.size, options) do |group|
|
71
|
+
run_tests(group, groups.index(group), num_processes, options)
|
72
|
+
end
|
78
73
|
report_results(test_results, options) unless options[:quiet]
|
79
74
|
end
|
80
75
|
|
@@ -228,7 +223,7 @@ module ParallelTests
|
|
228
223
|
processes in a specific formation. Commas indicate specs in the same process,
|
229
224
|
pipes indicate specs in a new process. Cannot use with --single, --isolate, or
|
230
225
|
--isolate-n. Ex.
|
231
|
-
$
|
226
|
+
$ parallel_test -n 3 . --specify-groups '1_spec.rb,2_spec.rb|3_spec.rb'
|
232
227
|
Process 1 will contain 1_spec.rb and 2_spec.rb
|
233
228
|
Process 2 will contain 3_spec.rb
|
234
229
|
Process 3 will contain all other specs
|
@@ -396,7 +391,7 @@ module ParallelTests
|
|
396
391
|
def simulate_output_for_ci(simulate)
|
397
392
|
if simulate
|
398
393
|
progress_indicator = Thread.new do
|
399
|
-
interval = Float(ENV
|
394
|
+
interval = Float(ENV['PARALLEL_TEST_HEARTBEAT_INTERVAL'] || 60)
|
400
395
|
loop do
|
401
396
|
sleep interval
|
402
397
|
print '.'
|
@@ -52,7 +52,9 @@ module ParallelTests
|
|
52
52
|
feature_tags = feature.tags.map(&:name)
|
53
53
|
|
54
54
|
# We loop on each children of the feature
|
55
|
-
feature.tests
|
55
|
+
test_models = feature.tests
|
56
|
+
test_models += feature.rules.flat_map(&:tests) if feature.respond_to?(:rules) # cuke_modeler >= 3.2 supports rules
|
57
|
+
test_models.each do |test|
|
56
58
|
# It's a scenario, we add it to the scenario_line_logger
|
57
59
|
scenario_line_logger.visit_feature_element(document.path, test, feature_tags, line_numbers: test_lines)
|
58
60
|
end
|
data/lib/parallel_tests/tasks.rb
CHANGED
@@ -102,6 +102,29 @@ module ParallelTests
|
|
102
102
|
end
|
103
103
|
end
|
104
104
|
|
105
|
+
def build_run_command(type, args)
|
106
|
+
count, pattern, options, pass_through = ParallelTests::Tasks.parse_args(args)
|
107
|
+
test_framework = {
|
108
|
+
'spec' => 'rspec',
|
109
|
+
'test' => 'test',
|
110
|
+
'features' => 'cucumber',
|
111
|
+
'features-spinach' => 'spinach'
|
112
|
+
}.fetch(type)
|
113
|
+
|
114
|
+
type = 'features' if test_framework == 'spinach'
|
115
|
+
|
116
|
+
# Using the relative path to find the binary allow to run a specific version of it
|
117
|
+
executable = File.expand_path('../../bin/parallel_test', __dir__)
|
118
|
+
executable = ParallelTests.with_ruby_binary(executable)
|
119
|
+
|
120
|
+
command = [*executable, type, '--type', test_framework]
|
121
|
+
command += ['-n', count.to_s] if count
|
122
|
+
command += ['--pattern', pattern] if pattern
|
123
|
+
command += ['--test-options', options] if options
|
124
|
+
command += Shellwords.shellsplit pass_through if pass_through
|
125
|
+
command
|
126
|
+
end
|
127
|
+
|
105
128
|
private
|
106
129
|
|
107
130
|
def rails_7_or_greater?
|
@@ -237,24 +260,7 @@ namespace :parallel do
|
|
237
260
|
task type, [:count, :pattern, :options, :pass_through] do |_t, args|
|
238
261
|
ParallelTests::Tasks.check_for_pending_migrations
|
239
262
|
ParallelTests::Tasks.load_lib
|
240
|
-
|
241
|
-
count, pattern, options, pass_through = ParallelTests::Tasks.parse_args(args)
|
242
|
-
test_framework = {
|
243
|
-
'spec' => 'rspec',
|
244
|
-
'test' => 'test',
|
245
|
-
'features' => 'cucumber',
|
246
|
-
'features-spinach' => 'spinach'
|
247
|
-
}.fetch(type)
|
248
|
-
|
249
|
-
type = 'features' if test_framework == 'spinach'
|
250
|
-
# Using the relative path to find the binary allow to run a specific version of it
|
251
|
-
executable = File.expand_path('../../bin/parallel_test', __dir__)
|
252
|
-
|
253
|
-
command = [*ParallelTests.with_ruby_binary(executable), type, '--type', test_framework]
|
254
|
-
command += ['-n', count.to_s] if count
|
255
|
-
command += ['--pattern', pattern] if pattern
|
256
|
-
command += ['--test-options', options] if options
|
257
|
-
command += Shellwords.shellsplit pass_through if pass_through
|
263
|
+
command = ParallelTests::Tasks.build_run_command(type, args)
|
258
264
|
|
259
265
|
abort unless system(*command) # allow to chain tasks e.g. rake parallel:spec parallel:features
|
260
266
|
end
|
@@ -5,6 +5,8 @@ require 'parallel_tests'
|
|
5
5
|
module ParallelTests
|
6
6
|
module Test
|
7
7
|
class Runner
|
8
|
+
RuntimeLogTooSmallError = Class.new(StandardError)
|
9
|
+
|
8
10
|
class << self
|
9
11
|
# --- usually overwritten by other runners
|
10
12
|
|
@@ -84,13 +86,17 @@ module ParallelTests
|
|
84
86
|
end
|
85
87
|
|
86
88
|
def execute_command(cmd, process_number, num_processes, options)
|
89
|
+
number = test_env_number(process_number, options).to_s
|
87
90
|
env = (options[:env] || {}).merge(
|
88
|
-
"TEST_ENV_NUMBER" =>
|
91
|
+
"TEST_ENV_NUMBER" => number,
|
89
92
|
"PARALLEL_TEST_GROUPS" => num_processes.to_s,
|
90
93
|
"PARALLEL_PID_FILE" => ParallelTests.pid_file_path
|
91
94
|
)
|
92
95
|
cmd = ["nice", *cmd] if options[:nice]
|
93
96
|
|
97
|
+
# being able to run with for example `-output foo-$TEST_ENV_NUMBER` worked originally and is convenient
|
98
|
+
cmd.map! { |c| c.gsub("$TEST_ENV_NUMBER", number).gsub("${TEST_ENV_NUMBER}", number) }
|
99
|
+
|
94
100
|
puts Shellwords.shelljoin(cmd) if report_process_command?(options) && !options[:serialize_stdout]
|
95
101
|
|
96
102
|
execute_command_and_capture_output(env, cmd, options)
|
@@ -147,8 +153,8 @@ module ParallelTests
|
|
147
153
|
protected
|
148
154
|
|
149
155
|
def executable
|
150
|
-
if ENV
|
151
|
-
[
|
156
|
+
if (executable = ENV['PARALLEL_TESTS_EXECUTABLE'])
|
157
|
+
[executable]
|
152
158
|
else
|
153
159
|
determine_executable
|
154
160
|
end
|
@@ -199,7 +205,7 @@ module ParallelTests
|
|
199
205
|
allowed_missing -= 1 unless time = runtimes[test]
|
200
206
|
if allowed_missing < 0
|
201
207
|
log = options[:runtime_log] || runtime_log
|
202
|
-
raise "Runtime log file '#{log}' does not contain sufficient data to sort #{tests.size} test files, please update or remove it."
|
208
|
+
raise RuntimeLogTooSmallError, "Runtime log file '#{log}' does not contain sufficient data to sort #{tests.size} test files, please update or remove it."
|
203
209
|
end
|
204
210
|
[test, time]
|
205
211
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: parallel_tests
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.12.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Grosser
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-08-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: parallel
|
@@ -68,8 +68,8 @@ licenses:
|
|
68
68
|
- MIT
|
69
69
|
metadata:
|
70
70
|
bug_tracker_uri: https://github.com/grosser/parallel_tests/issues
|
71
|
-
documentation_uri: https://github.com/grosser/parallel_tests/blob/v3.
|
72
|
-
source_code_uri: https://github.com/grosser/parallel_tests/tree/v3.
|
71
|
+
documentation_uri: https://github.com/grosser/parallel_tests/blob/v3.12.0/Readme.md
|
72
|
+
source_code_uri: https://github.com/grosser/parallel_tests/tree/v3.12.0
|
73
73
|
wiki_uri: https://github.com/grosser/parallel_tests/wiki
|
74
74
|
post_install_message:
|
75
75
|
rdoc_options: []
|