最近は github actions でテスト完了まで約 30 分にかかっている。 小さな変更のプルリクを作って、連続リリースしていく時には、自動テストで足止めされることが増えてきた。開発全体に関わることなので、テスト時間の短縮は効果的なのではと考えている!

まず、テストのどの辺りに時間がかかっているのか調査してみた。

bundle exec rspec --profile 100

遅いものだと、1example 10s 程度かかっている。これはとあるロジックをチェックするために、大量のマスタデータを投入しているからだと推察。

大量のマスタ系のデータを投入するテストをざっくり絞って、実行してみると 全体の 3 割程度の時間をしめていることがわかった。

ピンポイントでこれをクリアした場合、全体の 1 割、2 割程度の時間削減が期待できる。

時間を短縮する方法

  • before(:all)を利用して何回もデータ投入を行わないようする
    • after(:all)で後処理をしないと、他テストに影響があるため注意が必要。
  • 並列テスト
    • プロセス数 2 で実行すると、完了するまでの時間が約 1/2 になる?

一気に時間削減できる方法は並列テストだと思うので、今後試しにやってみようと思う!

参考記事

https://mogulla3.tech/articles/2019-02-11-01/#use_transactional_fixtures

https://techblog.raccoon.ne.jp/archives/1645488056.html