每次我运行测试时如何使用时间戳创建新的测试报告目录,并使用scalatest和sbt保留旧的测试报告

时间:2019-07-02 05:52:21

标签: scala sbt scalatest

我正在使用scalatest运行一些测试。现在,每次我运行测试时,测试结果都会存储在target/test-reports中,并覆盖以前的测试结果。我想将结果存储在文件夹名称带有时间戳的新文件夹中。就像在target/test-reports/dd-mm-yy-hhmmss文件夹中一样,并保留旧结果。如何在build.sbt中获取时间戳并使用它制作文件夹名称。

当前,我的build.sbt看起来像这样:

testOptions in Test ++= Seq(Tests.Argument(TestFrameworks.ScalaTest, "-o"), Tests.Argument(TestFrameworks.ScalaTest, "-h", "target/test-reports"))

请建议如何获取时间戳并在文件夹名称中使用它。

2 个答案:

答案 0 :(得分:1)

尝试

libraryDependencies += "org.pegdown" % "pegdown" % "1.6.0",
testOptions in Test ++= Seq(
  Tests.Argument(TestFrameworks.ScalaTest, "-o"), 
  Tests.Argument(TestFrameworks.ScalaTest, "-h", s"target/test-reports-$testDirTimestamp")
)

def testDirTimestamp = {
  import java.time.LocalDateTime
  import java.time.format.DateTimeFormatter
  LocalDateTime.now.format(DateTimeFormatter.ofPattern("yyyy-MM-ddHHmmss"))
}

在执行sbt test之后应该在以下位置创建报告

target/test-reports-2019-07-02074159

答案 1 :(得分:0)

我知道了。我们可以在buld.sbt中使用变量,并使用它来构建目录名称。

val format = new SimpleDateFormat("dd-MM-yy-hhmmss")
val timeStamp : String = format.format(Calendar.getInstance().getTime())
val resultDirectory : String = "target/test-reports/"+timeStamp

testOptions in Test ++= Seq(Tests.Argument(TestFrameworks.ScalaTest, "-o"), Tests.Argument(TestFrameworks.ScalaTest, "-h", resultDirectory))
libraryDependencies +=  "org.pegdown" % "pegdown" % "1.6.0" % "test"

我较早尝试过,但是没有用。原因是每次更改build.sbt文件时,都需要重新加载sbt shell,而我以前没有这样做。