Sha256: 5c916f24aa30f1accf2d6e645ba91b4d85a83e829585ad7e76be1db004f4fdf7

Contents?: true

Size: 1.58 KB

Versions: 1

Compression:

Stored size: 1.58 KB

Contents

## test-queue

Yet another parallel test runner, built using a centralized queue to ensure
optimal distribution of tests between workers.

Specifically optimized for CI environments: build statistics from each run
are stored locally and used to sort the queue at the beginning of the
next run.

### usage

```
$ minitest-queue $(find test/ -name \*_test.rb)
$ rspec-queue --format progress spec
```

### design

test-queue uses a simple master + pre-fork worker model. The master
exposes a unix domain socket server which workers use to grab tests off
the queue.

```
─┬─ 21232 minitest-queue master
 ├─── 21571 minitest-queue worker [3] - AuthenticationTest
 ├─── 21568 minitest-queue worker [2] - ApiTest
 ├─── 21565 minitest-queue worker [1] - UsersControllerTest
 └─── 21562 minitest-queue worker [0] - UserTest
```

### customization

Since test-queue uses `fork(2)` to spawn off workers, you must ensure each worker
runs in an isolated environment. Use the `after_fork` hook with a custom
runner to reset any global state:

``` ruby
class CustomMiniTestRunner < TestQueue::Runner::MiniTest
  def after_fork(num)
    super

    # use separate mysql database (we assume it exists and has the right schema already)
    ActiveRecord::Base.configurations['test']['database'] << num.to_s
    ActiveRecord::Base.establish_connection(:test)

    # use separate redis database
    $redis.client.db = num
    $redis.client.reconnect
  end
end

CustomMiniTestRunner.new.execute
```

### see also

  * https://github.com/Shopify/rails_parallel
  * https://github.com/grosser/parallel_tests

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
test-queue-0.1.3 README.md