🖥

Rails - Rspec で paralells test を利用して並列処理する ( create / migrate / prepar

2023/10/07に公開

公式

https://github.com/grosser/parallel_tests

Gemfile

gem を追加して bundle install する

gem 'parallel_tests'

database.yml

公式READMEの通り DB設定で環境変数を利用するようにする
この環境変数はテスト実行時などに自動的に paralells spec が付与してくれる

test:
  database: yourproject_test<%= ENV['TEST_ENV_NUMBER'] %>

テスト実行

rails parallel:setup
rails parallel:spec

うまく行かない場合は以下でも良いかもしれない
parallel:setup / parallel:prepare コマンドは使わなくてもテスト実行できる

rails parallel:create
rails parallel:migrate
rails parallel:spec

何か思わぬエラーが起きた時は drop してからやり直すと良い

rails parallel:drop

コマンド

DB作成

rake parallel:create

結果の例

すべてのテスト用DBを作成してくれる

Created database 'example_test2'
Created database 'example_test4'
Created database 'example_test'
Created database 'example_test3'

マイグレーション

すべてのテスト用DBをマイグレーションする

rake parallel:migrate

Prepare

Copy development schema (repeat after migrations)

rake parallel:prepare

developementのスキーマをコピーしてくれるようだ
テスト用DBがない状態でもDB作成・テーブル作成までしてくれる

ここでいうスキーマとは何かというと、schema.rb を見ているわけではなくて実際の development のデータベース内容を見てコピーしてるっぽい

なので例えばCIでの実行であれば、まずdevelopのDBを作成しておく必要がある

例:

RAILS_ENV=development bundle exec rails db:create db:schema:load
bundle exec rails parallel:prepare

自動テスト用のDB作成でマイグレーションファイルの内容を全て走らせていると時間がかかるので、このような方式のほうがテスト時間を縮められるかもしれない

セットアップ

Setup environment from scratch (create db and loads schema, useful for CI

rake parallel:setup

もろもろ準備してくれてテスト用DBを作成してくれるみたいだ

こちらはprepareとは違って実際のDBではなく schema.rb を見てそう
ただし seeds.rb も実行されるようなのでテストにseeds.rbの値を含めたくない場合は注意

DB削除

すべてのテスト用DBを削除してくれる

rake parallel:drop

チャットメンバー募集

何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ

Twitter

https://twitter.com/YumaInaura

公開日時

2023-10-06

GitHubで編集を提案

Discussion