2012-08-10 11 views
23

Ich habe eine Multi-Projekt-Build mit Tests in Teilprojekten und in einem übergeordneten Projekt. Der Build wird aggregiert, sodass das übergeordnete Projekt alle Tests in untergeordneten Projekten ausführt.Wie wird die parallele Ausführung von Tests für Multiprojekt-Builds deaktiviert?

ich es so konfiguriert, dass es beide keine parallele Ausführung von Tests ist in den Teilprojekten und dem übergeordneten Projekt, über

parallelExecution in Test := false 

Ich habe jedoch das nagende Gefühl, dass Tests, die über mehrere Projekte umspannen RAN sind parallel zu. Bei einem der Unterprojekte ist dies ein Problem, da der Status in einer Testdatenbank gleichzeitig geändert wird und der Test fehlschlägt.

Haben Sie Ideen, wie Sie die parallele Ausführung von Tests global zwischen Projekten umstellen können?

Antwort

24

Ich denke, eine Einstellung über Projekte anwenden können Rahmen mit ThisBuild, wie

parallelExecution in ThisBuild := false 

Ich weiß nicht, ob du das mit Rahmen Test kombinieren können, aber es ist vielleicht nicht notwendig sein.

+0

Sorry, ich bin ein bisschen neu in Scala und habe das gleiche Problem - wo soll ich diese Zeile setzen? Zu welcher Datei des Projekts? – kirhgoff

+0

Am einfachsten ist es, es in 'build.sbt' zu setzen (diese Datei wird auch verwendet, wenn Sie eine vollständige Konfiguration in' project/Build.scala' haben) –

+0

Vielen Dank! Ich habe es selbst gedacht, zu hastig zu fragen, anstatt zu denken :). Wie auch immer danke danke – kirhgoff

4

Siehe meine Antwort hier How to run subprojects tests (including setup methods) sequentially when testing

Es gibt eine andere Art und Weise die parallele Ausführung zu verhindern. Sie können die Testaufgaben der verschiedenen Projekte voneinander abhängen machen:

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

Das funktioniert nicht für mich: Ich bekomme 'Verweise auf undefinierte Einstellungen: Project2/*: Test von Project2/*: test (/Users/the21st/Work/Project2/build.sbt:36) Meinten Sie Project2/web-assets-test: test? ' – the21st

13

Um die Anzahl der gleichzeitig ausgeführten Tests in allen Projekten, die Verwendung einschränken:

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

Siehe sbt documentation

See discussion

0

Eine weitere Möglichkeit, basierend auf https://stackoverflow.com/a/27068019/1922026, besteht darin, einen Befehlsalias im Stammprojekt zu definieren :

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

wo s1, s2 und s3 sind die Unterprojekte. Wenn Sie sich im Root-Projekt befinden und "test" ausführen, werden die Tests nacheinander und in der angegebenen Reihenfolge ausgeführt.

Verwandte Themen