У меня есть набор интеграционных тестов, выполняемых sbt, учитывая наборы тестов N с 1..M тестами для каждого пакета. Я установил fork in IntegrationTest := true
, но наборы тестов всегда выполняются последовательно. Согласно документации, это не должно иметь место: тестовые наборы должны выполняться одновременно.
тестовые наборы представляют собой следующий класс:
class MyTestSuite1 extends FlatSpec with Matchers
...
it should "do A" {}
it should "do B" {}
class MyTestSuite2 extends FlatSpec with Matchers
...
it should "do C" {}
it should "do D" {}
проблема
MyTestSuite1 и MyTestSuiteN выполняются последовательно (в точном порядке алфавита)
ожидание
MyTestSuite1 и MyTestSuiteM выполняются одновременно
env
.sbopts:
-J-Xms1G
-J-Xmx4G
-J-XX:MaxMetaspaceSize=512m
-J-Xss4M
note
Я заметил, что все тесты выполняются с использованием одного пула и потока, например, pool-1-thread-1
для всех тестов.
версия sbt: 1.2.8 Scala: 2.12.8 os: MacOS 10.15, Ubuntu 19.04 Scalatest ver: 3.2.0-SNAP10
Пробный sbt v. 1.3.2 - тот же результат. Добавление
testOptions in IntegrationTest += Tests.Argument(TestFrameworks.ScalaTest, "-P4"),
не помогает.
============
Обновление
fork in(IntegrationTest, test) := true
работает наглобальный уровень, но у меня есть 2 проекта, и я хочу заставить его работать, чтобы сохранить относительный путь к proj.
например
lazy val `p1` = Project(id = "p1", base = file("./p1"))
.configs(IntegrationTest)
.settings(Defaults.itSettings: _*)
.settings(
fork in(IntegrationTest, test) := true,
...)
lazy val `p2` = Project(id = "p2", base = file("./p2"))
.configs(IntegrationTest)
.settings(Defaults.itSettings: _*)
.settings(
fork in(IntegrationTest, test) := true,
...)
не запускает тесты параллельно
вместо этого, он работает параллельно, но, очевидно, домашний каталог установлен на "."вместо "./p1" или "./p2" соответственно:
fork in(IntegrationTest, test) := true
lazy val `p1` = Project(id = "p1", base = file("./p1"))
.configs(IntegrationTest)
.settings(Defaults.itSettings: _*)