parallel_testsでRSpecのテストを高速化
テストが多くなってくると必然的に実行時間が長くなってしまう。
テストの書き方を工夫する余地があるうちはいいけど、それもきつくなってきたらもう後はマシンパワーに頼るしかない。
そこでこちらのparallel_testsです。
https://github.com/grosser/parallel_tests
CPUのコア数の応じて、テストを複数並行して走らせてくれる。
使い方はかんたんで、前述のURLのREADMEに書いてあるから読むべし。
が、最初は導入がうまくいかなかった。
テストごとにDBや画像のデータクリアを行っている関係上、画像アップロードのテストで、あるプロセスが作った画像を別のプロセスが消してしまってテストがコケる、という問題があったからだった。
画像アップロードにはCarrierwaveを使っていたのだけど、以下のようにして回避した。
image_uploader.rb
def store_dir "system/#{Rails.env}#{ENV['TEST_ENV_NUMBER']}/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" end
spec_helper.rb
config.after(:suite) do # Get rid of the linked images if Rails.env.test? FileUtils.rm_rf(Dir["#{Rails.root}/public/system/#{Rails.env}#{ENV['TEST_ENV_NUMBER']}"]) end end
で、パラレルに走らせたら、4コアあるMBA13"(2012)で半分の時間で終わった。
これはでかいですよ。
- 出版社/メーカー: エバニュー(EVERNEW)
- 発売日: 2012/06/13
- メディア: スポーツ用品
- クリック: 9回
- この商品を含むブログを見る