乐趣区

关于akka:多JVM测试

同时反对多个 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。

退出移动版