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

Проведите параллельные тесты 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
4b9b3361

Ответ 1

Используйте ParallelTestExecution и -P аргумент командной строки для Runner, чтобы они выполнялись параллельно:

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

Обратите внимание, что требуется -P. Из источника:

Если вы включаете -P в командной строке, Runner будет передавать Distributor в Suite, который вы указываете с помощью -s. Runner будет установлен пул потоков для выполнения любого Suite, переданного в Distributor put.

Он также будет запускать тесты изолированно, поэтому before и after будут запускаться в каждом потоке. Подробнее см. В документах для ParallelTestExecution и Runner.

В SBT, чтобы использовать флаг, добавьте его в build.sbt:

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