2012-08-10 12 views
23

Mam kompilację wielu projektów z testami w podprojektach i projekcie nadrzędnym. Kompilacja jest agregowana w taki sposób, że projekt nadrzędny uruchamia wszystkie testy w projektach potomnych.Jak wyłączyć równoległe wykonywanie testów dla wersji wielo-projektowych?

skonfigurowałem go tak, że nie ma równoległe wykonanie testów w obu podprojektów i projekt dominującej poprzez

parallelExecution in Test := false 

Mam jednak dręczące poczucie, że testy, które obejmują nad wieloma projektami są ran równolegle. W przypadku jednego z podprojektów jest to problem, ponieważ jednocześnie mutuje stan w testowej bazie danych, co prowadzi do niepowodzenia testu.

Jakieś pomysły na globalne przejście równoległego wykonywania testów między projektami?

Odpowiedz

24

myślę, że można zastosować ustawienie całej projektów wykorzystujących zakres ThisBuild, jak

parallelExecution in ThisBuild := false 

Nie wiem, czy można połączyć to z zakresu Test, ale to może nie być konieczne.

+0

Przepraszam, jestem trochę nowy w Scali i mam taki sam problem - gdzie powinienem umieścić tę linię? Do jakiego pliku projektu? – kirhgoff

+0

Najłatwiej jest umieścić go w 'build.sbt' (ten plik jest używany, nawet jeśli masz pełną konfigurację w' projekcie/Build.scala') –

+0

Dzięki! Sam to sobie wymyśliłem, zbyt pochopnie, żeby zamiast tego się zastanowić :). W każdym razie dziękuję – kirhgoff

4

Zobacz moją odpowiedź tutaj How to run subprojects tests (including setup methods) sequentially when testing

Nie ma innego sposobu, aby zapobiec realizacji równoległego. Można zrobić zadania testowe różnych projektów są od siebie zależne:

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

To nie działa dla mnie: Otrzymuję 'Referencje dla niezdefiniowanych ustawień: Project2/*: test z Project2/*: test (/Users/the21st/Work/Project2/build.sbt:36) Czy chodziło Ci o Project2/web-assets-test: test? ' – the21st

13

Aby ograniczyć liczbę jednocześnie wykonującego testy we wszystkich projektach, przeznaczenie:

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

Zobacz sbt documentation

See discussion

0

Inną możliwością, opartą na https://stackoverflow.com/a/27068019/1922026, jest zdefiniowanie aliasu poleceń w projekcie głównym :

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

gdzie s1, s2 i s3 są podprojektami. Kiedy znajdujesz się w projekcie głównym i uruchomisz "test", testy będą wykonywane sekwencyjnie w zdefiniowanej kolejności.

Powiązane problemy