使用简单构建工具进行基准测试

时间:2010-10-19 12:36:40

标签: scala sbt

我正试图让sbt编译并构建一些基准测试。我告诉它将基准添加到测试路径,以便它们与测试一起重新编译,但我无法弄清楚如何编写动作让我实际运行它们。是否可以从Project定义类调用类,或者甚至只从命令行调用类?

2 个答案:

答案 0 :(得分:4)

是的,是的。

如果您想在同一个VM中运行它们,则运行SBT,然后在项目定义文件中编写类似于以下内容的自定义任务:

  lazy val benchmark = task {
    // code to run benchmarks
    None // Some("will return an error message")
  }

在SBT控制台中键入benchmark将运行上述任务。要实际运行基准测试,或者就此而言,您编译的任何其他类,您可以重用一些现有的SBT基础结构,即方法runTask,它将创建一个为您运行的任务。它有以下签名:

 def runTask(mainClass: => Option[String], classpath: PathFinder, options: String*): Task

只需将以下内容添加到您的文件中:

  lazy val benchmark = task { args =>
    runTask(Some("whatever.your.mainclass.is"), testClasspath, args)
  }

运行基准测试时,有时建议您在单独的jvm调用中运行它们,以获得更可靠的结果。 SBT允许您通过在字符串命令上调用方法!来运行单独的进程。假设您要运行命令java -jar path-to-artifact.jar。然后:

"java -jar path-to-artifact.jar" !

在SBT中运行命令。您希望将上面的代码段放在一个单独的任务中,与之前相同。

当您更改项目定义时,不要忘记reload

答案 1 :(得分:2)

难道你不能简单地将基准测试作为测试,所以当你在SBT中调用'test'时它们会运行吗?

您也可以使用'仅测试'运行特定测试,或使用'run'或'exec'运行main(有关详细信息,请参阅http://code.google.com/p/simple-build-tool/wiki/RunningSbt)。