Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

【RSpec】テストケース(it)をまとめてRSpecを高速化する。

More than 5 years have passed since last update.

大規模になればなるほど、テストが大切になります。
しかし、大規模になればなるほど、テスト実行時間は長くなりテストを回すのは億劫になります。
今回は、タイトル通りitのケースをまとめて多少の高速化をしましょうという内容です。

方法

ただ、itをまとめる。
まずは、10個のテストケースを1つのブロックの中に入れて実行してみます。

before

スクリーンショット 2015-10-01 19.41.57.png
これを、、

after

スクリーンショット 2015-10-01 19.42.08.png
こうするだけ。

結果

before

スクリーンショット 2015-10-01 19.52.50.png

項目 単位
ケース数 100[個]
実行時間 74.27[s]
1ケースあたり実行時間 0.74[s/個]

※補足

files took 11.8 seconds

とは、specを回す前にファイル読み込みにかかった時間です。
つまり、合計時間は実行時間+ファイル読み込み時間です。

after

スクリーンショット 2015-10-01 19.53.22.png

項目 単位
ケース数 10[個]
実行時間 10.09[s]
1ケースあたり実行時間 1.1[s/個]

実際に回してみるとわかりますが、かなり速くなっています。

分析

項目 before after
1ケースあたり時間 100% 148%
ケース数 100% 10%
実行時間 100% 15%

85%も実行時間を減らすことが出来ました。

しかし、現実問題10個のテストケースを1つにまとめるのは流石に出来ないでしょう。
そこで、次は、テストケース2つを1つにまとめた場合を実行してみます。

2つのテストケースを1つにまとめた場合

before

スクリーンショット 2015-10-01 20.20.02.png

項目 単位
ケース数 20[個]
実行時間 16.94[s]
1ケースあたり実行時間 0.85[s/個]

after

スクリーンショット 2015-10-01 20.20.53.png

項目 second
ケース数 10[個]
実行時間 10.28[s]
1ケースあたり実行時間 1.03[s/個]

分析

項目 before after
1ケースあたり時間 100% 121%
ケース数 100% 50%
実行時間 100% 61%

実行時間を85%削ることは出来ませんでしたが、それでも40%も減らすことが出来ました。

まとめ

テストケース 実行時間
100% 100%
50% 61%
10% 15%

だいたい、2つを1つにまとめると、実行時間を40%削減
3つを1つにまとめると、実行時間を60%くらい削減できそうです。
是非、試してみてください。

geshi
Ruby/Scala/Test/DDD
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away