2016-07-27 5 views
0

Я использую scala-тест для своих тестов, и некоторое время назад сборки начали сбой иногда, потому что некоторые (новые, возможно) тесты занимают больше, чем предел, разрешенный CI.Занесение времени для каждого теста (и/или testSuite) с помощью теста scala

На первом взгляде нет теста должны взять больше, чем тайм-аут (10 минут кстати), и на выходе CI это не так легко увидеть, какой тест занимает так много времени (или сколько времени каждый тест занимает)

Я могу поставить простые инструкции на основе println для печати текущего часа в начале/конце каждого теста, но мне было интересно, дает ли scala-тест какую-то встроенную функцию для этого?

Если нет, делает ли какой-либо другой рамочный тест/библиотеку scala?

EDIT: попытался обернуть Тест

Я предпочитаю некоторые нативный метод из самого Lib. Я пытался обернуть тест specs2 в методе, который получил бы описание и журнал времени, но у меня возникают трудности с запуском теста в тот момент, когда я хочу. Я сделал что-то вроде этого:

class SomeSpec { 
    private def withTimeLog(x: Fragment) = { 
     println(s"Starting test: ${x.description}(${DateTime.now()})") 

     //what now? 
     x.executionResult 

     println(s"End of test: ${x.description}(${DateTime.now()})") 
     } 

     withTimeLog("Feature" should { 
     "stuff" in { 
      println(s"test: ${DateTime.now()}") 
      None.isEmpty must beTrue 
     } 
     }) 
} 

и результат:

Starting test: End(2016-07-28T18:11:53.101+01:00) 
End of test: End(2016-07-28T18:11:53.191+01:00) 
[info] FeatureSpecV2 
[info] 
test running at 2016-07-28T18:11:54.037+01:00 
[info] A test should 
[info] + stuff 

значение, тест был выполнен в конце концов, а не между операторами печати 2. Возможно, результат Fragment.execution не запускает тест. Пробовал несколько других. Любая идея, какой метод я должен использовать?

+1

Проверьте отчет об испытаниях в цель. – cchantep

+0

Что вы используете в качестве платформы CI? Возможно, Дженкинс? –

+0

на самом деле Travis – pedrorijo91

ответ

2

Вы можете отобразить время выполнения в specs2 путем передачи опции showtimes в командной строке

sbt>testOnly *MySpec -- showtimes 

Кроме того, если вы используете в будущем matchers вы можете настроить «фактор времени» с опцией timeFactor командной строки.

+0

с проблемами, пытающимися использовать ваше решение ... это флаг, доступный только с определенной версии? 'java.lang.IllegalArgumentException: аргумент, непризнанный Runner ScalaTest: showtimes' – pedrorijo91

+1

Это потому, что ScalaTest также является одной из тестовых платформ sbt. И он анализирует все аргументы в sbt, даже те из specs2. Вы можете обойти это, набрав: 'sbt> set testFrameworks: = Seq (TestFrameworks.Specs2)'. – Eric