Подтвердить что ты не робот

Как отключить параллельное выполнение тестов для многопроектных сборок?

У меня есть многопроектная сборка с тестами в подпроектах и ​​в родительском проекте. Сборка агрегируется так, чтобы родительский проект выполнял все тесты в дочерних проектах.

Я настроил его так, чтобы не было параллельного выполнения тестов как в подпроектах, так и в родительском проекте, через

parallelExecution in Test := false

Тем не менее, я чувствую, что тесты, которые охватывают несколько проектов, выполняются параллельно. В случае одного из подпроектов это проблема, потому что одновременно мутирует состояние в тестовой базе данных, что приводит к сбою теста.

Любые идеи о том, как глобально переключать параллельное выполнение тестов, между проектами?

4b9b3361

Ответ 1

Я думаю, вы можете применить настройку для разных проектов с помощью области ThisBuild, например

parallelExecution in ThisBuild := false

Я не знаю, можете ли вы объединить это с областью Test, но это может быть необязательно.

Ответ 2

Чтобы ограничить количество одновременно выполняемых тестов во всех проектах, используйте:

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

Смотрите документацию sbt

См. обсуждение

Ответ 3

См. мой ответ здесь Последовательно тестировать тесты подпроектов (включая методы настройки)

Существует еще один способ предотвратить параллельное выполнение. Вы можете заставить тестовые задачи разных проектов зависеть друг от друга:

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

Ответ 4

Это работало для меня в 1.1.0:

Test/parallelExecution := false

Ответ 5

Другая возможность, основанная на fooobar.com/info/226155/..., заключается в определении псевдонима команды в корневом проекте:

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

где s1, s2 и s3 - подпроекты. Когда вы находитесь в корневом проекте и запускаете "тест", тесты будут выполняться последовательно и в определенном порядке.