Ответ 1
Я думаю, вы можете применить настройку для разных проектов с помощью области ThisBuild
, например
parallelExecution in ThisBuild := false
Я не знаю, можете ли вы объединить это с областью Test
, но это может быть необязательно.
У меня есть многопроектная сборка с тестами в подпроектах и в родительском проекте. Сборка агрегируется так, чтобы родительский проект выполнял все тесты в дочерних проектах.
Я настроил его так, чтобы не было параллельного выполнения тестов как в подпроектах, так и в родительском проекте, через
parallelExecution in Test := false
Тем не менее, я чувствую, что тесты, которые охватывают несколько проектов, выполняются параллельно. В случае одного из подпроектов это проблема, потому что одновременно мутирует состояние в тестовой базе данных, что приводит к сбою теста.
Любые идеи о том, как глобально переключать параллельное выполнение тестов, между проектами?
Я думаю, вы можете применить настройку для разных проектов с помощью области ThisBuild
, например
parallelExecution in ThisBuild := false
Я не знаю, можете ли вы объединить это с областью Test
, но это может быть необязательно.
Чтобы ограничить количество одновременно выполняемых тестов во всех проектах, используйте:
concurrentRestrictions in Global += Tags.limit(Tags.Test, 1)
Смотрите документацию sbt
См. обсуждение
См. мой ответ здесь Последовательно тестировать тесты подпроектов (включая методы настройки)
Существует еще один способ предотвратить параллельное выполнение. Вы можете заставить тестовые задачи разных проектов зависеть друг от друга:
test in Project2 := (test in Project2).dependsOn(test in Project1).value
parallelExecution in Test in Project2 := false
Это работало для меня в 1.1.0:
Test/parallelExecution := false
Другая возможность, основанная на fooobar.com/info/226155/..., заключается в определении псевдонима команды в корневом проекте:
.settings(addCommandAlias("test", ";s1/test;s2/test;s3/test"): _*)
где s1, s2 и s3 - подпроекты. Когда вы находитесь в корневом проекте и запускаете "тест", тесты будут выполняться последовательно и в определенном порядке.