いきなり本題というか、一番言いたいことを書くと、まず
テストの fork の設定によってぜんぜん違う。
という点があまり知られていない気がします。 *1
というか、自分も今回調べるまで、微妙に古い知識のままで完璧に知らなかったので、今一度理解した現時点での詳細を今書いています。
sbtにおいて、テストがどう並列化されるか?に関して、関係するというか、今回話すのは、以下の点です
- Test / parallelExecutionというkey
- Test / fork が true か falseか
- concurrentRestrictionsというkey
- testForkedParallelというkey
また、今から話すのはsbt 1.3.8時点の情報です。
さらに前提として、マシンのCPUのコア数によって挙動が異なる可能性がありますが、ひとまずそれなりに十分にコア数がある、として話を進めます。(少なくとも4以上) *2
*1:もちろん公式ドキュメントには書いてあるのでそれは読みましょうというか、完璧に読んだことある人は、このblog読む必要ないはずです https://www.scala-sbt.org/1.x/docs/Testing.html
*2:specs2などは、更に別の概念として、1つのテストclass内のテスト並列実行する機能があったはずですが、今回はsbt自体の機能の話なので、そこには触れません