2013-04-01 129 views
13

考慮下面的測試套件:運行ScalaTest測試並行

class ParallelizeMe extends FunSuite with BeforeAndAfterAll { 

    override def beforeAll() = println("before")    
    override def afterAll() = println("after")    

    test("test 1") {           
    println("1a") 
    Thread.sleep(3000)          
    println("1b")           
    } 

    test("test 2") {           
    println("2a") 
    Thread.sleep(1000)          
    println("2b") 
    } 

} 

我怎麼能並行(通過SBT)運行測試?理想情況下,我想執行的順序產生在stdout以下幾點:

before 
1a 
2a 
2b 
1b 
after 

回答

18

使用ParallelTestExecution-P命令行參數的Runner,使他們並行運行:

import org.scalatest.{ParallelTestExecution, BeforeAndAfterAll, FunSuite} 
class ParallelizableSpec extends FunSuite with BeforeAndAfterAll with ParallelTestExecution { 
    ... 
} 

注意-P是必需的。從來源:

如果您在命令行上-PRunnerDistributorSuite是你與-s指定通過。 Runner將設置 上一個線程池執行任何Suite s並行傳遞給Distributorput方法。

它也將在隔離運行測試,所以beforeafter將在每個線程中運行。有關ParallelTestExecutionRunner的文檔,請參閱更多內容。

在SBT,使用該標誌,將它添加到build.sbt

testOptions in Test += Tests.Argument("-P") 
+3

謝謝,這就是我一直在尋找。我希望在全部和全部運行之前,我可以每運行一次,但這足夠接近。作爲參考,我將此添加到我的* build.sbt *:'testOptions in Test + = Tests.Argument(「 - P」)' – earldouglas

+0

非常有用,謝謝 - 補充說,答案。 –

+0

任何想法如何使用'-c'選項來改變線程的數量? – earldouglas