同时支持多个JVM中正在运行的应用程序(objectswithmainmethods)和ScalaTest测试。对于多个系统相互通信的集成测试很有用。
建立
多JVM测试是一个sbt插件,您可以在https://github.com/sbt/sbt-mu...。要在您的项目中配置它,您应该执行以下步骤:
1.通过将以下内容添加到您的project/plugins.sbt中,将其添加为插件:
2.通过启用MultiJvmPlugin并设置MultiJvm配置,将multi-JVM测试添加到build.sbt或project/Build.scala。
请注意,默认情况下,MultiJvm测试源位于src/multi-jvm/...中,而不位于src/test/...中。
运行测试
多JVM任务与常规任务相似:test,testOnly和run,但是在multi-jvm配置下。
因此,在Akka中,要在akka远程项目中运行所有的多JVM测试,请使用(在sbt提示符下):
或者可以先更改为akka-remote-tests项目,然后运行测试:
要运行单个测试,请使用testOnly:
可以列出多个测试类名来运行多个特定测试。sbt中的制表符完成功能使完成测试名称变得容易。
也可以通过在测试名称和--之后添加testOnly来指定JVM选项。例如:
创建应用程序测试
通过命名约定来发现并组合测试。MultiJvm测试源位于src/multi-jvm/...中。使用以下模式命名测试:
也就是说,每个测试的名称中间都有MultiJvm。它之前的部分将单个TestName下的测试/应用程序组合在一起,它们将一起运行。后面的部分NodeName是每个分叉JVM的区别名。
因此,要创建一个名为Sample的3节点测试,您可以创建以下三个应用程序:
当在sbt提示符下调用multi-jvm:runsample.Sample时,将生成三个JVM,每个节点一个。它看起来像这样:
更改默认值
您可以为分叉的JVM指定JVM选项:
您可以通过将以下配置添加到项目中来更改多JVM测试源目录的名称:
您可以更改MultiJvm标识符。例如,要将其更改为ClusterTest,请设置multiJvmMarker:
现在,您的测试应命名为{TestName}ClusterTest{NodeName}。
JVM实例的配置
您可以为每个衍生的JVM定义特定的JVM选项。为此,您可以创建一个以测试中的节点命名的文件,后缀为.opts,并将其放在与测试相同的目录中。
例如,要将JVM选项-Dakka.remote.port=9991和-Xmx256m提供给SampleMultiJvmNode1,让我们创建三个*.opts文件并将这些选项添加到它们中。用空格分隔多个选项。
SampleMultiJvmNode1.opts:
SampleMultiJvmNode2.opts:
SampleMultiJvmNode3.opts:
ScalaTest
还支持创建ScalaTest测试而不是应用程序。为此,请使用与上述相同的命名约定,但要创建ScalaTest套件,而不要使用object创建main函数。您需要在类路径上具有ScalaTest。这是与上述示例类似的示例,但使用的是ScalaTest:
要仅运行这些测试,可以在sbt提示符下调用multi-jvm:testOnlysample.Spec。
多节点添加
SbtMultiJvm插件也做了一些补充,以适应该部分中描述的may change模块multi node testing。
示例项目
Cluster example project是一个示例项目,可以下载并带有如何运行的说明。
该项目说明了集群功能,还包括带有sbt-multi-jvm插件的MultiJVMTesting。