web-dev-qa-db-ja.com

マルチプロジェクトビルドのテストの並列実行をオフにする方法は?

サブプロジェクトと親プロジェクトにテストを含むマルチプロジェクトビルドがあります。ビルドが集約されるので、親プロジェクトは子プロジェクトのすべてのテストを実行します。

サブプロジェクトと親プロジェクトの両方でテストが並行して実行されないように構成しました。

parallelExecution in Test := false

ただし、複数のプロジェクトにまたがるテストが並行して実行されるというしつこい感じがあります。サブプロジェクトの1つの場合、テストデータベースの状態が同時に変化し、テストが失敗するため、これは問題です。

プロジェクト間でテストの並列実行をグローバルに切り替える方法に関するアイデアはありますか?

31

スコープThisBuildを使用して、プロジェクト全体に設定を適用できると思います。

parallelExecution in ThisBuild := false

スコープTestと組み合わせることができるかどうかはわかりませんが、必要ないかもしれません。

29
0__

すべてのプロジェクトで同時に実行するテストの数を制限するには、以下を使用します。

concurrentRestrictions in Global += Tags.limit(Tags.Test, 1)

sbtのドキュメントを参照してください

ディスカッション を参照してください

16
lisak

これは1.1.0で私のために働きました:

Test / parallelExecution := false

5
xmar

ここで私の答えを参照してください テスト時にサブプロジェクトテスト(セットアップメソッドを含む)を順次実行する方法

並列実行を防ぐ別の方法があります。異なるプロジェクトのテストタスクを相互に依存させることができます。

test in Project2 := (test in Project2).dependsOn(test in Project1).value
parallelExecution in Test in Project2 := false
4
Boris Stumm

https://stackoverflow.com/a/27068019/1922026 に基づく別の可能性は、ルートプロジェクトでコマンドエイリアスを定義することです。

.settings(addCommandAlias("test", ";s1/test;s2/test;s3/test"): _*)

ここで、s1、s2、およびs3はサブプロジェクトです。ルートプロジェクトで「テスト」を実行すると、テストは定義された順序で順番に実行されます。

1