paraspec 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +40 -3
- data/lib/paraspec/version.rb +1 -1
- data/lib/paraspec/worker_runner.rb +4 -2
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 76dfd75abb077976992e37c9934206e610f652f8f7d88564bcfdd9356cf473e1
|
4
|
+
data.tar.gz: 5d08c00a5d951348ba228bb94509158ddae389b21e0e500b011cbdb6aa379a52
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e04a18244f08e43e84a9a610405fa6972820f658b84ba67e81a954fd5635873aba6e53ddef8277985d124dbcb6ec6055e5dfbe7f51930c92e314c44078869aeb
|
7
|
+
data.tar.gz: 8b7ef16dee8bb3506442cb8a7b761dbb91929881acd74c4369203f390381de0a3902d59341ce58eb23fa41684754bbd911bb8f67b3ba8a80eddd3fa379689aa4
|
data/README.md
CHANGED
@@ -10,7 +10,7 @@ back to the master and requests the next test until there are no more left.
|
|
10
10
|
This producer/consumer architecture enables a number of features:
|
11
11
|
|
12
12
|
1. The worker load is naturally balanced. If a worker happens to come across
|
13
|
-
a slow test, the other workers keep chugging away at
|
13
|
+
a slow test, the other workers keep chugging away at the remaining tests.
|
14
14
|
2. Tests defined in a single file can be executed by multiple workers,
|
15
15
|
since paraspec operates on a test by test basis and not on a file by file basis.
|
16
16
|
3. Standard output and error streams can be[*] captured and grouped on a
|
@@ -19,12 +19,31 @@ This output capture can be performed for output generated by C extensions
|
|
19
19
|
as well as plain Ruby code.
|
20
20
|
4. Test results are seamlessly integrated by the master, such that
|
21
21
|
a parallel run produces a single progress bar with Fuubar across all workers.
|
22
|
+
5. Test grouping: paraspec can[**] group the tests by file, top level example
|
23
|
+
group, bottom level example group and individually by examples.
|
24
|
+
Larger groupings reduce overhead but limit concurrency.
|
25
|
+
Smaller groupings have more overhead but higher concurrency.
|
26
|
+
6. Paraspec is naturally resilient to worker failure. If a worker dies
|
27
|
+
for any reason the remaining tests get automatically redistributed among
|
28
|
+
the remaining workers. It is also possible, in theory, to provision
|
29
|
+
additional workers when a test run is already in progress, though this feature
|
30
|
+
is not currently on the roadmap.
|
22
31
|
|
23
32
|
[*] This feature is not yet implemented.
|
24
33
|
|
34
|
+
[**] Currently only grouping by bottom level example group is implemented.
|
35
|
+
|
25
36
|
## Usage
|
26
37
|
|
27
|
-
|
38
|
+
Add paraspec to your Gemfile:
|
39
|
+
|
40
|
+
gem 'paraspec'
|
41
|
+
|
42
|
+
This is necessary because paraspec has its own dependencies and loads
|
43
|
+
the application being tested into its environment, hence both paraspec's
|
44
|
+
and application's dependencies need to exist in the same Bundler environment.
|
45
|
+
|
46
|
+
Then, for a test suite with no external dependencies, using paraspec is
|
28
47
|
trivially easy. Just run:
|
29
48
|
|
30
49
|
paraspec
|
@@ -39,7 +58,8 @@ To pass options to rspec, for example to filter examples to run:
|
|
39
58
|
paraspec -- spec/my_spec.rb
|
40
59
|
|
41
60
|
For a test suite with external dependencies, paraspec sets the
|
42
|
-
`TEST_ENV_NUMBER` environment variable
|
61
|
+
`TEST_ENV_NUMBER` environment variable to an integer starting from 1
|
62
|
+
corresponding to the worker number, like
|
43
63
|
[parallel_tests](https://github.com/grosser/parallel_tests) does.
|
44
64
|
The test suite can then configure itself differently in each worker.
|
45
65
|
|
@@ -88,6 +108,23 @@ The debugging output is turned on with `-d`/`--debug` option:
|
|
88
108
|
paraspec -d ipc # IPC requests and responses
|
89
109
|
paraspec -d perf # timing & performance information
|
90
110
|
|
111
|
+
## Caveats
|
112
|
+
|
113
|
+
The master and workers need to all define the same example groups and
|
114
|
+
examples, otherwise a worker may retrieve an example group from the master
|
115
|
+
that it is unable to run. RSpec provides a way to define tests conditionally
|
116
|
+
via `if:` and `unless:` options on contexts and examples, and if this
|
117
|
+
functionality is used it is important to make sure that all workers are
|
118
|
+
configured identically (especially if such conditional configuration is
|
119
|
+
dependent on external resources such as a network server).
|
120
|
+
|
121
|
+
Paraspec will check workers' example groups and examples for equality
|
122
|
+
with master and will raise an error if there is a mismatch.
|
123
|
+
|
124
|
+
## Known Issues
|
125
|
+
|
126
|
+
Aborting a test run with Ctrl-C can leave the workers still running.
|
127
|
+
|
91
128
|
## Bugs & Patches
|
92
129
|
|
93
130
|
Please report via issues and pull requests.
|
data/lib/paraspec/version.rb
CHANGED
@@ -40,8 +40,10 @@ module Paraspec
|
|
40
40
|
return if examples.empty?
|
41
41
|
# It is important to run the entire world here because if
|
42
42
|
# a particular example group is run, before/after :all hooks
|
43
|
-
# aren't always run
|
44
|
-
|
43
|
+
# aren't always run.
|
44
|
+
# And "the entire world" means our complete list of example groups,
|
45
|
+
# not RSpec.world.ordered_example_groups which are top level only!
|
46
|
+
RSpecFacade.all_example_groups.each do |group|
|
45
47
|
group.reset_memoized
|
46
48
|
end
|
47
49
|
# Hack to not run examples from each group each time I want to run
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: paraspec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Oleg Pudeyev
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-08-
|
11
|
+
date: 2018-08-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec-core
|
@@ -119,5 +119,5 @@ rubyforge_project:
|
|
119
119
|
rubygems_version: 2.7.3
|
120
120
|
signing_key:
|
121
121
|
specification_version: 4
|
122
|
-
summary: paraspec-0.0.
|
122
|
+
summary: paraspec-0.0.2
|
123
123
|
test_files: []
|