java - 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 不会启动两个超薄服务器实例并并行执行这些套件?
解决方案
不幸的是,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。
推荐阅读
- knime - 在 Knime 的 Python 脚本节点上运行 Python 代码
- angular - 为什么事件监听器调用子组件的 *ngIf 方法?
- javascript - 使用 Map 实例按属性名称返回不同对象的数组?
- java - 我有一个问题,它是通过 java 中的比较器的两个字段进行排序的
- java - 从 HashMap 中获取前 k 个值
- c++ - 当 const 引用参数绑定到右值时,它是否保持其“状态”?
- c - 如何在内核模块中使用 do_mmap()
- javascript - 处理关闭 Javascript 的情况
- java - 如何一次又一次地停止同一设备的发生
- openai-gym - openai 健身房复古游戏如何获奖