2016-07-27 1 views
0

J'utilise le test scala pour mes tests, et il y a quelque temps, les builds ont commencé à échouer parfois parce qu'un test (nouveau, probablement) prend plus de limite autorisée par l'IC.Enregistrement du temps pour chaque test (et/ou testSuite) avec le test scala

A première vue, aucun test devrait prendre plus que le délai d'attente (10 minutes BTW), et par la sortie CI-il pas facile de voir quel test prend tellement de temps (ou combien de temps chaque test prend)

Je peux mettre des instructions println simples pour imprimer l'heure en cours au début ou à la fin de chaque test, mais je me demandais si le test scala fournit une fonctionnalité intégrée pour cela?

Si non, est-ce qu'un autre framework/bibliothèque de test scala existe?

EDIT: essayé d'envelopper le test

Je prefere une méthode native de la lib lui-même. J'essayais d'envelopper un test specs2 dans une méthode qui obtiendrait la description et enregistrer les temps, mais j'ai des difficultés à exécuter le test au moment où je veux. Je l'ai fait quelque chose comme ceci:

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 
     } 
     }) 
} 

et le résultat:

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 

sens, le test a été exécuté à la fin, et non entre les 2 déclarations d'impression. Peut-être que le résultat de Fragment.execution n'exécute pas le test. J'ai essayé avec plusieurs autres. Toute idée de quelle méthode devrais-je utiliser?

+1

Vérifiez le rapport de test dans la cible. – cchantep

+0

Qu'est-ce que vous utilisez comme plate-forme CI? Probablement Jenkins? –

+0

réellement Travis – pedrorijo91

Répondre

2

Vous pouvez afficher les temps d'exécution en specs2 en passant l'option showtimes sur la ligne de commande

sbt>testOnly *MySpec -- showtimes 

Aussi, si vous utilisez les futurs matchers vous pouvez régler un « facteur temps » avec l'option de ligne de commande timeFactor.

+0

avoir des problèmes en essayant d'utiliser votre solution ... est le drapeau disponible seulement depuis une version spécifique? 'java.lang.IllegalArgumentException: Argument non reconnu par Runner de ScalaTest: showtimes' – pedrorijo91

+1

C'est parce que ScalaTest est aussi l'un des frameworks de test de sbt. Et il analyse tous les arguments de sbt, même ceux de specs2. Vous pouvez contourner ce problème en tapant: 'sbt> set testFrameworks: = Seq (TestFrameworks.Specs2)'. – Eric