parallel_tests 3.5.2 → 3.7.3
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 +29 -21
- 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/test/runner.rb +5 -1
- data/lib/parallel_tests/version.rb +1 -1
- data/lib/parallel_tests.rb +8 -10
- 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: 042cf590688332180e07fcf6472cc9b88b740276df0511677cf77f7fe649fa2e
         | 
| 4 | 
            +
              data.tar.gz: cb4fd166b030e16574bf5d4790e5d1e0a3d57001d5474ab81c3d54613af976e2
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 98e679733a74273ac77e71db47bc3af3f0f5a928dab351be9419644a0e7fe2bc004a81c929928ef0bd98ea2b8e5b63d1ab9fadcf75e22d098a65c5164343fe0b
         | 
| 7 | 
            +
              data.tar.gz: 2ce2dd070733cd0bb61d0cb610f886a5590d5e267cc43613ab7d08fc251d989ebd4a58ad2f0a9c88478499fe55ff4cb7386fabc2eba8ee7fb3440d4899594654
         | 
    
        data/Readme.md
    CHANGED
    
    | @@ -42,6 +42,9 @@ test: | |
| 42 42 |  | 
| 43 43 | 
             
            ### Setup environment from scratch (create db and loads schema, useful for CI)
         | 
| 44 44 | 
             
                rake parallel:setup
         | 
| 45 | 
            +
                
         | 
| 46 | 
            +
            ### Drop all test databases
         | 
| 47 | 
            +
                rake parallel:drop
         | 
| 45 48 |  | 
| 46 49 | 
             
            ### Run!
         | 
| 47 50 | 
             
                rake parallel:test          # Test::Unit
         | 
| @@ -182,19 +185,24 @@ Setup for non-rails | |
| 182 185 |  | 
| 183 186 | 
             
                gem install parallel_tests
         | 
| 184 187 | 
             
                # go to your project dir
         | 
| 185 | 
            -
                parallel_test | 
| 186 | 
            -
                parallel_rspec | 
| 187 | 
            -
                parallel_cucumber | 
| 188 | 
            -
                parallel_spinach | 
| 188 | 
            +
                parallel_test
         | 
| 189 | 
            +
                parallel_rspec
         | 
| 190 | 
            +
                parallel_cucumber
         | 
| 191 | 
            +
                parallel_spinach
         | 
| 189 192 |  | 
| 190 | 
            -
             - use `ENV['TEST_ENV_NUMBER']` inside your tests to select separate db/memcache/etc.
         | 
| 191 | 
            -
             - Only run selected files & folders:
         | 
| 193 | 
            +
             - use `ENV['TEST_ENV_NUMBER']` inside your tests to select separate db/memcache/etc. (docker compose: expose it)
         | 
| 192 194 |  | 
| 195 | 
            +
             - Only run a subset of files / folders:
         | 
| 196 | 
            +
             
         | 
| 193 197 | 
             
                `parallel_test test/bar test/baz/foo_text.rb`
         | 
| 194 198 |  | 
| 195 199 | 
             
             - Pass test-options and files via `--`:
         | 
| 196 | 
            -
             | 
| 197 | 
            -
                ` | 
| 200 | 
            +
             
         | 
| 201 | 
            +
                `parallel_rspec -- -t acceptance -f progress -- spec/foo_spec.rb spec/acceptance`
         | 
| 202 | 
            +
                
         | 
| 203 | 
            +
             - Pass in test options, by using the -o flag (wrap everything in quotes):
         | 
| 204 | 
            +
             
         | 
| 205 | 
            +
                `parallel_cucumber -n 2 -o '-p foo_profile --tags @only_this_tag or @only_that_tag --format summary'`
         | 
| 198 206 |  | 
| 199 207 | 
             
            Options are:
         | 
| 200 208 | 
             
            <!-- copy output from bundle exec ./bin/parallel_test -h -->
         | 
| @@ -202,22 +210,21 @@ Options are: | |
| 202 210 | 
             
                -p, --pattern [PATTERN]          run tests matching this regex pattern
         | 
| 203 211 | 
             
                    --exclude-pattern [PATTERN]  exclude tests matching this regex pattern
         | 
| 204 212 | 
             
                    --group-by [TYPE]            group tests by:
         | 
| 205 | 
            -
             | 
| 206 | 
            -
             | 
| 207 | 
            -
             | 
| 208 | 
            -
             | 
| 209 | 
            -
             | 
| 210 | 
            -
             | 
| 213 | 
            +
                                                 found - order of finding files
         | 
| 214 | 
            +
                                                 steps - number of cucumber/spinach steps
         | 
| 215 | 
            +
                                                 scenarios - individual cucumber scenarios
         | 
| 216 | 
            +
                                                 filesize - by size of the file
         | 
| 217 | 
            +
                                                 runtime - info from runtime log
         | 
| 218 | 
            +
                                                 default - runtime when runtime log is filled otherwise filesize
         | 
| 211 219 | 
             
                -m, --multiply-processes [FLOAT] use given number as a multiplier of processes to run
         | 
| 212 220 | 
             
                -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 | 
            -
                    -- | 
| 221 | 
            +
                -i, --isolate                    Do not run any other tests in the group used by --single(-s)
         | 
| 222 | 
            +
                    --isolate-n [PROCESSES]      Use 'isolate'  singles with number of processes, default: 1.
         | 
| 223 | 
            +
                    --highest-exit-status        Exit with the highest exit status provided by test run(s)
         | 
| 216 224 | 
             
                    --specify-groups [SPECS]     Use 'specify-groups' if you want to specify multiple specs running in multiple
         | 
| 217 225 | 
             
                                                 processes in a specific formation. Commas indicate specs in the same process,
         | 
| 218 | 
            -
                                                 pipes indicate specs in a new process. | 
| 226 | 
            +
                                                 pipes indicate specs in a new process. Cannot use with --single, --isolate, or
         | 
| 219 227 | 
             
                                                 --isolate-n.  Ex.
         | 
| 220 | 
            -
                                                 Ex.
         | 
| 221 228 | 
             
                                                 $ parallel_tests -n 3 . --specify-groups '1_spec.rb,2_spec.rb|3_spec.rb'
         | 
| 222 229 | 
             
                                                   Process 1 will contain 1_spec.rb and 2_spec.rb
         | 
| 223 230 | 
             
                                                   Process 2 will contain 3_spec.rb
         | 
| @@ -227,8 +234,8 @@ Options are: | |
| 227 234 | 
             
                -o, --test-options '[OPTIONS]'   execute test commands with those options
         | 
| 228 235 | 
             
                -t, --type [TYPE]                test(default) / rspec / cucumber / spinach
         | 
| 229 236 | 
             
                    --suffix [PATTERN]           override built in test file pattern (should match suffix):
         | 
| 230 | 
            -
             | 
| 231 | 
            -
             | 
| 237 | 
            +
                                                 '_spec.rb$' - matches rspec files
         | 
| 238 | 
            +
                                                 '_(test|spec).rb$' - matches test or spec files
         | 
| 232 239 | 
             
                    --serialize-stdout           Serialize stdout output, nothing will be written until everything is done
         | 
| 233 240 | 
             
                    --prefix-output-with-test-env-number
         | 
| 234 241 | 
             
                                                 Prefixes test env number to the output when not using --serialize-stdout
         | 
| @@ -394,6 +401,7 @@ inspired by [pivotal labs](https://blog.pivotal.io/labs/labs/parallelize-your-rs | |
| 394 401 | 
             
             - [Nathan Broadbent](https://github.com/ndbroadbent)
         | 
| 395 402 | 
             
             - [Vikram B Kumar](https://github.com/v-kumar)
         | 
| 396 403 | 
             
             - [Joshua Pinter](https://github.com/joshuapinter)
         | 
| 404 | 
            +
             - [Zach Dennis](https://github.com/zdennis)
         | 
| 397 405 |  | 
| 398 406 | 
             
            [Michael Grosser](http://grosser.it)<br/>
         | 
| 399 407 | 
             
            michael@grosser.it<br/>
         | 
    
        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
         | 
| @@ -15,12 +15,16 @@ module ParallelTests | |
| 15 15 | 
             
                      /_(test|spec).rb$/
         | 
| 16 16 | 
             
                    end
         | 
| 17 17 |  | 
| 18 | 
            +
                    def default_test_folder
         | 
| 19 | 
            +
                      "test"
         | 
| 20 | 
            +
                    end
         | 
| 21 | 
            +
             | 
| 18 22 | 
             
                    def test_file_name
         | 
| 19 23 | 
             
                      "test"
         | 
| 20 24 | 
             
                    end
         | 
| 21 25 |  | 
| 22 26 | 
             
                    def run_tests(test_files, process_number, num_processes, options)
         | 
| 23 | 
            -
                      require_list = test_files.map { |file| file. | 
| 27 | 
            +
                      require_list = test_files.map { |file| file.gsub(" ", "\\ ") }.join(" ")
         | 
| 24 28 | 
             
                      cmd = "#{executable} -Itest -e '%w[#{require_list}].each { |f| require %{./\#{f}} }' -- #{options[:test_options]}"
         | 
| 25 29 | 
             
                      execute_command(cmd, process_number, num_processes, options)
         | 
| 26 30 | 
             
                    end
         | 
    
        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 |  | 
    
        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.3
         | 
| 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-09-17 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.3/Readme.md
         | 
| 72 | 
            +
              source_code_uri: https://github.com/grosser/parallel_tests/tree/v3.7.3
         | 
| 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
         |