无法理解Maven Surefire插件';s平行参数
引述自: 。。。并行参数。可能的值取决于测试 提供程序已使用。对于JUnit4.7及更高版本,这可能是, 类,两者,套件,套件和类,套件和方法, 类和方法或全部 我只想并行执行Cucumber特性文件。在这种情况下,这些参数——main、方法、类等——意味着什么?下面是我的pom.xml文件的摘录:无法理解Maven Surefire插件';s平行参数,maven,cucumber,maven-surefire-plugin,Maven,Cucumber,Maven Surefire Plugin,引述自: 。。。并行参数。可能的值取决于测试 提供程序已使用。对于JUnit4.7及更高版本,这可能是, 类,两者,套件,套件和类,套件和方法, 类和方法或全部 我只想并行执行Cucumber特性文件。在这种情况下,这些参数——main、方法、类等——意味着什么?下面是我的pom.xml文件的摘录: <build> <plugins> <plugin> <groupId>org.apache.mave
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M4</version>
<configuration>
**<parallel>methods</parallel>**
<useUnlimitedThreads>true</useUnlimitedThreads>
</configuration>
</plugin>
</plugins>
</build>
org.apache.maven.plugins
使用此配置。我不知道他们为什么选择这样配置它。为什么他们没有选择其他选项,比如“类”或“类和方法”?这是一个非常好的问题!我是Cucumber中支持并行执行的实现者之一,实际上我花了相当长的时间才完成这一切
JUnit、Surefire和Cumber一起进化而来。因此,某些概念最初是以狭隘的焦点引入的,后来被推广,但没有重新命名。因此,您会遇到这些相当奇怪的不匹配
因此JUnit将测试表示为一个简单的树:
Example1Test.class
|- method1()
|- method2()
|- method3()
Example2Test.class
|- method1()
|- method2()
|- method3()
因为JUnit最初没有并行执行,所以这是由surefire处理的。Surefire将启动JUnit的多个实例,并在它们之间划分应该测试的类
JUnit通过向测试执行器添加setScheduler(RunnerScheduler)
来增加对方法级并行执行的支持。一旦出现这种情况,surefire必须区分使用自己的并行执行方法、junits并行执行方法或两者。因此,有不同的选项和名称
在某个时候,JUnit还添加了对实现自定义运行程序的支持。Cucumber使用它实现了一个自定义运行器。对JUnit来说,这是这样的:
@RunWith(Cucumber.class)
RunCucumberTest.class
|- Feature1
| |- scenario1()
|- Feature2
| |- scenario1()
| |- scenario2()
要并行执行功能,JUnit必须在执行器(Cucumber.class
)上使用setScheduler(scheduler)
方法。为此,必须由Surefire指示JUnit使用并行调度程序。我们这样做的方式是告诉Surefire使用方法
选项
现在,这是一个相当高级的解释,您可以通过查看源代码放大更多内容:
您可以单独与JUnit并行执行测试,还是还需要Surefire?使用JUnit 4,这是可能的,但很复杂。对于JUnit5,它更简单。您必须使用Cucumbers JUnit平台引擎:然后您可以使用JUnit控制台启动器来运行测试。