Как проверить объекты или другие отдельные ресурсы / отключить параллельное тестирование с помощью uTest
https://github.com/lihaoyi/utest
Как сказано в документации, uTest проводит тесты параллельно. Тестовые случаи внутри одного набора тестов могут выполняться последовательно, если используются
import utest.ExecutionContext.RunNow
но sbt запускает разные тестовые наборы всегда параллельно. https://github.com/lihaoyi/utest
Обычно это хорошо для производительности, но при тестировании объектов или других "отдельных ресурсов" это может вызвать проблемы. Если один и тот же объект тестируется или используется в нескольких тестовых наборах, эти параллельные тесты могут мешать друг другу.
Ведение журнала является хорошим примером: при ведении журнала может использоваться объект фабрики commom, а в некоторых случаях этот объект может содержать состояние, например уровень ведения журнала по умолчанию или структуру данных для экземпляров журнала и т. Д. Ведение журнала используется в нескольких модулях SW / в нескольких наборах тестов и, если один из эти наборы тестов тестируют сам протоколирование, тогда как другие наборы тестов могут вызывать случайные ложные результаты в наборе тестов протоколирования. База данных является еще одним примером "единого ресурса".
Есть ли способ ограничить параллельный запуск тестовых наборов uTest, чтобы пользователь мог решить, какие тестовые наборы всегда запускаются последовательно, а какие тестовые наборы можно запускать параллельно?
Например: запускать наборы тестов: com.XXX.yyy.MyTestSuiteA, com.XXX.yyy.MyTestSuiteB и com.XXX.yyy.MyTestSuiteC последовательно (в этом порядке), а остальные параллельно (DZ).
SBT "скрипт" не является хорошим решением
sbt testOnly com.XXX.yyy.MyTestSuiteA
sbt testOnly com.XXX.yyy.MyTestSuiteB
sbt testOnly com.XXX.yyy.MyTestSuiteC
sbt testOnly com.XXX.yyy.MyTestSuiteD
sbt testOnly com.XXX.yyy.MyTestSuiteE
sbt testOnly com.XXX.yyy.MyTestSuiteF
...
потому что тогда ничего не запускается параллельно, и я должен перечислить все тестовые наборы. Примерно так может быть хорошо:
sbt test -- sequentially com.XXX.yyy.MyTestSuiteA, com.XXX.yyy.MyTestSuiteB, com.XXX.yyy.MyTestSuiteC
Это означает, что остальные могут выполняться параллельно и в любом порядке. Или же
sbt test -- sequentially
Это означает, что все тестовые наборы запускаются последовательно
1 ответ
Вот быстрое исправление, которое вы можете добавить в ваш файл сборки проекта, который можно использовать для полного последовательного выполнения.
parallelExecution in Test := false
Цитирование фактической документации.
Отключить параллельное выполнение тестов¶ По умолчанию sbt выполняет все задачи параллельно. Поскольку каждый тест сопоставлен с задачей, тесты также запускаются параллельно по умолчанию. Чтобы тесты в рамках данного проекта выполнялись последовательно:
scalarallelExecution in Test:= false Тест можно заменить на IntegrationTest, чтобы выполнять интеграционные тесты только последовательно. Обратите внимание, что тесты из разных проектов могут по-прежнему выполняться одновременно.
В другом случае я бы предложил попробовать пометить тесты и запустить помеченные тесты исключительно.
Tags.exclusive(Benchmark)
Обратитесь к этому документу для получения дополнительной информации здесь.