15

次のテスト スイートがあるとします。

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 経由で) 並行して実行するにはどうすればよいですか? 理想的には、標準出力で次のような実行順序が生成されるようにします。

before
1a
2a
2b
1b
after
4

1 に答える 1

24

ParallelTestExecution-Pコマンドライン引数を使用しRunnerて、それらを並行して実行します。

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

-P が必要であることに注意してください。ソースから:

-Pコマンドラインに含めると、 で指定したs にRunnera が渡さ れます。の メソッドに渡されたすべてのを並行して実行するスレッド プールを設定します。DistributorSuite-sRunnerSuiteDistributorput

また、テストを分離して実行するためbeforeafter各スレッドで実行されます。ParallelTestExecutionおよびRunnerのドキュメントで詳細を参照してください。

SBT でフラグを使用するには、これを に追加しbuild.sbtます。

testOptions in Test += Tests.Argument("-P")
于 2013-04-01T22:47:41.670 に答える