最近は 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