こんにちは。
GMOアドマーケティングのR.Sです。
今回は、RSpecでテストを遅い順に表示する--profile
というオプションを紹介したいと思います。
profileとは
遅いテストをリストアップするオプションです。このオプションを使ってRSpecテストを実行すると下記のような形で出力されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
Top 10 slowest examples (212.01 seconds, 25.7% of total time): test1 test1が正しく動くこと 42.83 seconds ./spec/~~~/test1_spec.rb:10 test2 test2が正しく動くこと 41.35 seconds ./spec/~~~/test2_spec.rb:29 test3 test3が正しく動くこと 27.16 seconds ./spec/~~~/test3_spec.rb:27 test4 test4が正しく動くこと 15.64 seconds ./spec/~~~/test4_spec.rb:36 test5 test5が正しく動くこと 15.4 seconds ./spec/~~~/test5_spec.rb:193 test6 test6が正しく動くこと 14.79 seconds ./spec/~~~/test6_spec.rb:20 test7 test7が正しく動くこと 14.75 seconds ./spec/f~~~/test7_spec.rb:356 test8 test8が正しく動くこと 13.72 seconds ./spec/f~~~/test8_spec.rb:183 test9 test9が正しく動くこと 13.39 seconds ./spec/~~~/test9_spec.rb:687 test10 test10が正しく動くこと 12.98 seconds ./spec/~~~/test10_spec.rb:63 Top 10 slowest example groups: test1 29.07 seconds average (87.2 seconds / 3 examples) ./spec/~~~/test1_spec.rb:3 test2 15.26 seconds average (45.79 seconds / 3 examples) ./spec/~~~/test2_spec.rb:3 test3 10.91 seconds average (54.56 seconds / 5 examples) ./spec/~~~/test3_spec.rb:3 test4 10.41 seconds average (20.82 seconds / 2 examples) ./spec/~~~/test4_spec.rb:3 test5 10.31 seconds average (41.24 seconds / 4 examples) ./spec/~~~/test5_spec.rb:3 test6 4.69 seconds average (23.47 seconds / 5 examples) ./spec/~~~/test6_spec.rb:3 test7 4.68 seconds average (42.14 seconds / 9 examples) ./spec/~~~/test7_spec.rb:3 test8 4.2 seconds average (79.88 seconds / 19 examples) ./spec/~~~/test8_spec.rb:3 test9 4.15 seconds average (20.75 seconds / 5 examples) ./spec/~~~/test9_spec.rb:3 test10 4.09 seconds average (12.26 seconds / 3 examples) ./spec/~~~/test10_spec.rb:3 Finished in 13 minutes 45 seconds (files took 24.35 seconds to load) 300 examples, 0 failures |
ヘルプで確認すると、
--[no-]profile [COUNT]
となっています。
デフォルトで遅い順に10件表示されますが、COUNTの部分に出力したい件数を入れることで変更可能です。
使い方は、コマンドで直接オプションを指定する方法と、.rspecファイルに記載する方法があります。
コマンドで直接オプションを指定する方法
通常の使用方法
$ rspec --profile
遅い順に5件のファイルをリストアップする
$ rspec --profile 5
パスの指定や他のオプションとの併用もできます。
パスを指定する
$ rspec --profile -- spec/features/~~~
指定したパス内で5件リストアップする
$ rspec --profile 5 spec/features/~~~
exampleオプションと併用する
$ rspec --profile --example "test"
.rspecファイルに記載する方法
.rspecファイルに記載すると、RSpecテスト実行時にオプションを指定しなくても、指定したものとして実行されます。
業務でテスト時間を計測しているときに毎回オプション指定する手間を省くため、こちらの方法で実行していました。
.rspecファイルは下記のように変更します。
1 2 3 |
--require spec_helper # これはRSpecのセットアップ時にデフォルトで記載されている --profile |
.rspecファイルでオプション指定したけれど表示してほしくないというときは
$ rspec --no-profile
というように実行すると表示されません。
まとめ
実際に業務で使用して、遅いテストを調査するのに役立ちました。
他にもRSpecのオプションはたくさんあり、$ rspec --help
で確認できます。さらに便利になる可能性があるので1度チェックしてみると良いかもしれません。