parallel_tests 3.5.1 → 3.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Readme.md +26 -21
- data/lib/parallel_tests.rb +8 -10
- data/lib/parallel_tests/cli.rb +33 -15
- data/lib/parallel_tests/cucumber/runner.rb +4 -0
- data/lib/parallel_tests/gherkin/runner.rb +6 -2
- data/lib/parallel_tests/rspec/runner.rb +4 -0
- data/lib/parallel_tests/spinach/runner.rb +4 -0
- data/lib/parallel_tests/tasks.rb +8 -6
- data/lib/parallel_tests/test/runner.rb +4 -0
- data/lib/parallel_tests/version.rb +1 -1
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9bef11937f866ff4dad761906b41261246e9b5bf5bba2baa4a2c0019da0b3d42
|
4
|
+
data.tar.gz: 5241a08bd2bd0a273347fa044b12e973b5f40ab899b750e5f00364a2db1b3e72
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fd2d6eeb089dae8a9925d94b70de446bd9c58e9342d8602be671aea38e521577d01273d677e8b3f278c307715cf11bce4e9a661326e75a4f484de0f798f48040
|
7
|
+
data.tar.gz: a14fcbccdcca6b1870af02ad24be6a316b504a6b14f8e37678c3b81894bbd7aac9a0403e7f45b37501c35c4be7e499a509b8b14bb288b139f43853c4c861fd26
|
data/Readme.md
CHANGED
@@ -182,19 +182,24 @@ Setup for non-rails
|
|
182
182
|
|
183
183
|
gem install parallel_tests
|
184
184
|
# go to your project dir
|
185
|
-
parallel_test
|
186
|
-
parallel_rspec
|
187
|
-
parallel_cucumber
|
188
|
-
parallel_spinach
|
185
|
+
parallel_test
|
186
|
+
parallel_rspec
|
187
|
+
parallel_cucumber
|
188
|
+
parallel_spinach
|
189
189
|
|
190
|
-
- use `ENV['TEST_ENV_NUMBER']` inside your tests to select separate db/memcache/etc.
|
191
|
-
- Only run selected files & folders:
|
190
|
+
- use `ENV['TEST_ENV_NUMBER']` inside your tests to select separate db/memcache/etc. (docker compose: expose it)
|
192
191
|
|
192
|
+
- Only run a subset of files / folders:
|
193
|
+
|
193
194
|
`parallel_test test/bar test/baz/foo_text.rb`
|
194
195
|
|
195
196
|
- Pass test-options and files via `--`:
|
196
|
-
|
197
|
-
`
|
197
|
+
|
198
|
+
`parallel_rspec -- -t acceptance -f progress -- spec/foo_spec.rb spec/acceptance`
|
199
|
+
|
200
|
+
- Pass in test options, by using the -o flag (wrap everything in quotes):
|
201
|
+
|
202
|
+
`parallel_cucumber -n 2 -o '-p foo_profile --tags @only_this_tag or @only_that_tag --format summary'`
|
198
203
|
|
199
204
|
Options are:
|
200
205
|
<!-- copy output from bundle exec ./bin/parallel_test -h -->
|
@@ -202,22 +207,21 @@ Options are:
|
|
202
207
|
-p, --pattern [PATTERN] run tests matching this regex pattern
|
203
208
|
--exclude-pattern [PATTERN] exclude tests matching this regex pattern
|
204
209
|
--group-by [TYPE] group tests by:
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
210
|
+
found - order of finding files
|
211
|
+
steps - number of cucumber/spinach steps
|
212
|
+
scenarios - individual cucumber scenarios
|
213
|
+
filesize - by size of the file
|
214
|
+
runtime - info from runtime log
|
215
|
+
default - runtime when runtime log is filled otherwise filesize
|
211
216
|
-m, --multiply-processes [FLOAT] use given number as a multiplier of processes to run
|
212
217
|
-s, --single [PATTERN] Run all matching files in the same process
|
213
|
-
-i, --isolate Do not run any other tests in the group used by --single(-s)
|
214
|
-
|
215
|
-
--
|
218
|
+
-i, --isolate Do not run any other tests in the group used by --single(-s)
|
219
|
+
--isolate-n [PROCESSES] Use 'isolate' singles with number of processes, default: 1.
|
220
|
+
--highest-exit-status Exit with the highest exit status provided by test run(s)
|
216
221
|
--specify-groups [SPECS] Use 'specify-groups' if you want to specify multiple specs running in multiple
|
217
222
|
processes in a specific formation. Commas indicate specs in the same process,
|
218
|
-
pipes indicate specs in a new process.
|
223
|
+
pipes indicate specs in a new process. Cannot use with --single, --isolate, or
|
219
224
|
--isolate-n. Ex.
|
220
|
-
Ex.
|
221
225
|
$ parallel_tests -n 3 . --specify-groups '1_spec.rb,2_spec.rb|3_spec.rb'
|
222
226
|
Process 1 will contain 1_spec.rb and 2_spec.rb
|
223
227
|
Process 2 will contain 3_spec.rb
|
@@ -227,8 +231,8 @@ Options are:
|
|
227
231
|
-o, --test-options '[OPTIONS]' execute test commands with those options
|
228
232
|
-t, --type [TYPE] test(default) / rspec / cucumber / spinach
|
229
233
|
--suffix [PATTERN] override built in test file pattern (should match suffix):
|
230
|
-
|
231
|
-
|
234
|
+
'_spec.rb$' - matches rspec files
|
235
|
+
'_(test|spec).rb$' - matches test or spec files
|
232
236
|
--serialize-stdout Serialize stdout output, nothing will be written until everything is done
|
233
237
|
--prefix-output-with-test-env-number
|
234
238
|
Prefixes test env number to the output when not using --serialize-stdout
|
@@ -394,6 +398,7 @@ inspired by [pivotal labs](https://blog.pivotal.io/labs/labs/parallelize-your-rs
|
|
394
398
|
- [Nathan Broadbent](https://github.com/ndbroadbent)
|
395
399
|
- [Vikram B Kumar](https://github.com/v-kumar)
|
396
400
|
- [Joshua Pinter](https://github.com/joshuapinter)
|
401
|
+
- [Zach Dennis](https://github.com/zdennis)
|
397
402
|
|
398
403
|
[Michael Grosser](http://grosser.it)<br/>
|
399
404
|
michael@grosser.it<br/>
|
data/lib/parallel_tests.rb
CHANGED
@@ -23,16 +23,14 @@ module ParallelTests
|
|
23
23
|
|
24
24
|
def with_pid_file
|
25
25
|
Tempfile.open('parallel_tests-pidfile') do |f|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
@pids = nil
|
35
|
-
end
|
26
|
+
ENV['PARALLEL_PID_FILE'] = f.path
|
27
|
+
# Pids object should be created before threads will start adding pids to it
|
28
|
+
# Otherwise we would have to use Mutex to prevent creation of several instances
|
29
|
+
@pids = pids
|
30
|
+
yield
|
31
|
+
ensure
|
32
|
+
ENV['PARALLEL_PID_FILE'] = nil
|
33
|
+
@pids = nil
|
36
34
|
end
|
37
35
|
end
|
38
36
|
|
data/lib/parallel_tests/cli.rb
CHANGED
@@ -84,7 +84,18 @@ module ParallelTests
|
|
84
84
|
report_time_taken(&run_tests_proc)
|
85
85
|
end
|
86
86
|
|
87
|
-
|
87
|
+
if any_test_failed?(test_results)
|
88
|
+
warn final_fail_message
|
89
|
+
|
90
|
+
# return the highest exit status to allow sub-processes to send things other than 1
|
91
|
+
exit_status = if options[:highest_exit_status]
|
92
|
+
test_results.map { |data| data.fetch(:exit_status) }.max
|
93
|
+
else
|
94
|
+
1
|
95
|
+
end
|
96
|
+
|
97
|
+
exit exit_status
|
98
|
+
end
|
88
99
|
end
|
89
100
|
|
90
101
|
def run_tests(group, process_number, num_processes, options)
|
@@ -105,13 +116,11 @@ module ParallelTests
|
|
105
116
|
|
106
117
|
def lock(lockfile)
|
107
118
|
File.open(lockfile) do |lock|
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
lock.flock File::LOCK_UN
|
114
|
-
end
|
119
|
+
lock.flock File::LOCK_EX
|
120
|
+
yield
|
121
|
+
ensure
|
122
|
+
# This shouldn't be necessary, but appears to be
|
123
|
+
lock.flock File::LOCK_UN
|
115
124
|
end
|
116
125
|
end
|
117
126
|
|
@@ -209,6 +218,10 @@ module ParallelTests
|
|
209
218
|
"Use 'isolate' singles with number of processes, default: 1."
|
210
219
|
) { |n| options[:isolate_count] = n }
|
211
220
|
|
221
|
+
opts.on("--highest-exit-status", "Exit with the highest exit status provided by test run(s)") do
|
222
|
+
options[:highest_exit_status] = true
|
223
|
+
end
|
224
|
+
|
212
225
|
opts.on(
|
213
226
|
"--specify-groups [SPECS]",
|
214
227
|
<<~TEXT.rstrip.split("\n").join("\n#{newline_padding}")
|
@@ -228,12 +241,10 @@ module ParallelTests
|
|
228
241
|
opts.on("-e", "--exec [COMMAND]", "execute this code parallel and with ENV['TEST_ENV_NUMBER']") { |path| options[:execute] = path }
|
229
242
|
opts.on("-o", "--test-options '[OPTIONS]'", "execute test commands with those options") { |arg| options[:test_options] = arg.lstrip }
|
230
243
|
opts.on("-t", "--type [TYPE]", "test(default) / rspec / cucumber / spinach") do |type|
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
abort
|
236
|
-
end
|
244
|
+
@runner = load_runner(type)
|
245
|
+
rescue NameError, LoadError => e
|
246
|
+
puts "Runner for `#{type}` type has not been found! (#{e})"
|
247
|
+
abort
|
237
248
|
end
|
238
249
|
opts.on(
|
239
250
|
"--suffix [PATTERN]",
|
@@ -278,7 +289,14 @@ module ParallelTests
|
|
278
289
|
|
279
290
|
files, remaining = extract_file_paths(argv)
|
280
291
|
unless options[:execute]
|
281
|
-
|
292
|
+
if files.empty?
|
293
|
+
default_test_folder = @runner.default_test_folder
|
294
|
+
if File.directory?(default_test_folder)
|
295
|
+
files = [default_test_folder]
|
296
|
+
else
|
297
|
+
abort "Pass files or folders to run"
|
298
|
+
end
|
299
|
+
end
|
282
300
|
options[:files] = files.map { |file_path| Pathname.new(file_path).cleanpath.to_s }
|
283
301
|
end
|
284
302
|
|
@@ -24,8 +24,8 @@ module ParallelTests
|
|
24
24
|
cmd = [
|
25
25
|
executable,
|
26
26
|
(runtime_logging if File.directory?(File.dirname(runtime_log))),
|
27
|
-
|
28
|
-
|
27
|
+
*sanitized_test_files,
|
28
|
+
cucumber_opts(options[:test_options])
|
29
29
|
].compact.reject(&:empty?).join(' ')
|
30
30
|
execute_command(cmd, process_number, num_processes, options)
|
31
31
|
end
|
@@ -34,6 +34,10 @@ module ParallelTests
|
|
34
34
|
@test_file_name || 'feature'
|
35
35
|
end
|
36
36
|
|
37
|
+
def default_test_folder
|
38
|
+
'features'
|
39
|
+
end
|
40
|
+
|
37
41
|
def test_suffix
|
38
42
|
/\.feature$/
|
39
43
|
end
|
data/lib/parallel_tests/tasks.rb
CHANGED
@@ -123,12 +123,14 @@ namespace :parallel do
|
|
123
123
|
ParallelTests::Tasks.check_for_pending_migrations
|
124
124
|
if defined?(ActiveRecord::Base) && [:ruby, :sql].include?(ActiveRecord::Base.schema_format)
|
125
125
|
# fast: dump once, load in parallel
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
126
|
+
type =
|
127
|
+
if Gem::Version.new(Rails.version) >= Gem::Version.new('6.1.0')
|
128
|
+
"schema"
|
129
|
+
else
|
130
|
+
ActiveRecord::Base.schema_format == :ruby ? "schema" : "structure"
|
131
|
+
end
|
132
|
+
|
133
|
+
Rake::Task["db:#{type}:dump"].invoke
|
132
134
|
|
133
135
|
# remove database connection to prevent "database is being accessed by other users"
|
134
136
|
ActiveRecord::Base.remove_connection if ActiveRecord::Base.configurations.any?
|
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.7.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Grosser
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-08-13 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.7.1/Readme.md
|
72
|
+
source_code_uri: https://github.com/grosser/parallel_tests/tree/v3.7.1
|
73
73
|
wiki_uri: https://github.com/grosser/parallel_tests/wiki
|
74
74
|
post_install_message:
|
75
75
|
rdoc_options: []
|
@@ -79,14 +79,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
79
79
|
requirements:
|
80
80
|
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: 2.
|
82
|
+
version: 2.5.0
|
83
83
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
84
84
|
requirements:
|
85
85
|
- - ">="
|
86
86
|
- !ruby/object:Gem::Version
|
87
87
|
version: '0'
|
88
88
|
requirements: []
|
89
|
-
rubygems_version: 3.
|
89
|
+
rubygems_version: 3.2.16
|
90
90
|
signing_key:
|
91
91
|
specification_version: 4
|
92
92
|
summary: Run Test::Unit / RSpec / Cucumber / Spinach in parallel
|