環境
Ruby on Rails 4.2.5
ruby2.2.3
はじめに
テストが増えてきて実行時間が気になるようになってきたので
テストを並列で走らせることができる「parallel_test」を導入してみました。(test_queueと迷いましたがとりあえず、、、)
並列で走らせるプロセスの数だけデータベースが必要となります。
セットアップ
インストール
Gemfile
gem 'parallel_tests'
$ bundle install
テスト用データベースの準備
database.yml
test:
database: db_test<%= ENV['TEST_ENV_NUMBER'] %>
テストを4つ並列で走らせる場合、データベース名は
db_test
db_test2
db_test3
db_test4
のようになります。
データベースのセットアップ
$ rake parallel:create
$ rake parallel:prepare
データベースのセットアップをまとめて行いたい場合
seeds.rbに書いてある内容も実行される
$ rake parallel:rake[db:setup]
$ rake parallel:rake[実行したいタスク]
のようにすればrakeタスクを走らせることができる。
テスト実行
$ rake parallel:spec
ファイルを指定して実行
users_controller_spec.rbを走らせたい場合
$ rake parallel:spec[users_controller]
以下のようにするとファイル名にuserを含むテスト(models/user_spec.rbなどuserと名前のつくもの)がすべて実行される。
$ rake parallel:spec[user]
以下のようにするとmodelsディレクトリにある、ファイル名にuserを含むテストが実行されます。
$ rake parallel:spec[user]
僕の環境では実行時間はおよそ半分になりました。