Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to measure and display the running time of a single test?

I have a potentially long-running test written with scalatest:

test("a long running test") {
  failAfter(Span(60, Seconds)) {
    // ...
  }
}

Even if the test finishes within the timeout limit, its running time can be valuable to the person who runs the test. How can I measure and display the running time of this single particular test in scalatest's output?

Update: Currently I measure the running time with my own function, just as in r.v's answer. I'd like to know if scalatest offers this functionality already.

like image 237
Petr Avatar asked Mar 15 '13 15:03

Petr


1 Answers

the -oD option will give the duration of the test. For example, I use the following in my build.sbt.

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

EDIT:

You can also use the following for individual runs:

> test-only org.acme.RedSuite -- -oD

See http://www.scalatest.org/user_guide/using_scalatest_with_sbt.

Moreover, you can define the following function for general time measurements:

def time[T](str: String)(thunk: => T): T = {
  print(str + "... ")
  val t1 = System.currentTimeMillis
  val x = thunk
  val t2 = System.currentTimeMillis
  println((t2 - t1) + " msecs")
  x
}

and use it anywhere (not dependent on ScalaTest)

test("a long running test") {
  time("test running"){
    failAfter(Span(60, Seconds)) {
    // ...
  }
}
like image 160
r.v Avatar answered Oct 16 '22 10:10

r.v