首页 > 解决方案 > FitNesse with JUnit:并行执行套件

问题描述

我有两套相互排斥的 FitNesse 套装,我想并行运行它们。

当它们从junit测试用例中调用时,我编写了以下代码:

@Test
public void executeFitnesseSuites() {
    final Class<?>[] classes = { Suite1.class, Suite2.class };
    final Result result = JUnitCore.runClasses(ParallelComputer.classes(), classes);
    System.out.println(result);

}

@RunWith(FitNesseRunner.class)
@FitNesseRunner.Suite("Suite1")
@FitNesseRunner.FitnesseDir(".")
@FitNesseRunner.OutputDir("/tmp/fitnesse/")
public static class Suite1{

}

@RunWith(FitNesseRunner.class)
@FitNesseRunner.Suite("Suite2")
@FitNesseRunner.FitnesseDir(".")
@FitNesseRunner.OutputDir("/tmp/fitnesse/")
public static class Suite2{

}

在早期的实现中,它们是两个独立的类,并按顺序执行。

但是,我看到上述测试的执行时间相似。

这是否意味着 FitNesse 不会启动两个超薄服务器实例并并行执行这些套件?

标签: javajunitfitnessefitnesse-slim

解决方案


不幸的是,FitNesse 本身不是线程安全的,因此不应在一个 JVM 中同时运行两个超薄服务器实例。

我不确定 jUnit 使用您使用的方法的行为方式。它会启动两个并行的 JVM,还是只启动同一个 JVM 中的线程?

我过去使用 jUnit 运行两个完全独立的套件的一种方法是两个有两个单独的类(就像你以前一样)并使用 Maven 的故障安全插件在不同的 JVM 上并行运行它们。Failsafe(以及surefire)提供了一个forkCount属性来指定要使用的进程数(参见http://maven.apache.org/surefire/maven-failsafe-plugin/examples/fork-options-and-parallel-execution。 html了解更多详情)。请注意,您不应使用该parallel属性,因为它位于一个 JVM 中。

如果您使用 FitNesse 的 jUnit 运行程序并行运行测试,您可能还会对我创建的一个工具感兴趣,该工具用于将此类运行的 HTML 报告合并到一个报告中:HtmlReportIndexGenerator。这是我的固定装置 jar 的一部分,但也可作为单独的 docker 图像使用:hsac/fitnesse-fixtures-combine


推荐阅读