在Windows批处理文件中从Maven运行并行Cucumber测试的问题
我在Maven项目中有一套Cucumber Selenium测试,并且最近配置了surefire插件以并行运行我的测试。这只需执行一个类似的命令工作正常,其中test.runner.directory是在pom.xml
申报文件路径的价值抱到我的黄瓜测试运行属性:在Windows批处理文件中从Maven运行并行Cucumber测试的问题
mvn -Dtest.runner.directory=mytestsrunnerdirectory clean test
接下来,我想编写一个Windows批处理文件来包装此调用。所以这是我尝试在.bat
文件,在其中的测试运行的文件路径传递作为一个参数:
set testrunnerdirectory=%1
echo Running Seleium tests with Maven.
call mvn -Dtest.runner.directory=%testrunnerdirectory% clean test
echo Maven build completed
在执行时,这得到尽可能成功运行我的测试在并行,但随后脚本简单地挂起。我看到窗口中出现的所有测试输出,并且我观察到所有测试都成功运行并完成了,但我从来没有收到过“构建成功”消息,并且脚本永远不会打印我的最终回显消息。在最终测试完成后,它会无限期地挂起。有趣的是,如果我将test.runner.directory
设置为只有一个测试运行器的目录,那么一切正常(显然这只启动一个测试线程)并且脚本完整地完成。但似乎启动多个线程抛出它,并在某些时候焦点不能返回到原来的命令窗口。
一如既往,我会非常感谢任何想法/建议。谢谢。
我圆这个问题通过使用插件我pom.xml
:cucumber-jvm-parallel-plugin
我本来想万无一失的配置来运行我写自己测试运行器,如下面的代码片段: -
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.20.1</version>
<configuration>
<forkCount>5</forkCount>
<reuseForks>false</reuseForks>
<testFailureIgnore>true</testFailureIgnore>
<includes>
<include>*TestRunner.java</include>
</includes>
</configuration>
<dependencies>
<dependency>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>surefire-junit47</artifactId>
<version>2.20.1</version>
</dependency>
</dependencies>
</plugin>
根据我原来的问题,这运行我的测试确定,但导致我的批处理脚本挂起,永远不会完成。
<plugin>
<groupId>com.github.temyers</groupId>
<artifactId>cucumber-jvm-parallel-plugin</artifactId>
<version>1.0.1</version>
<executions>
<execution>
<id>generateRunners</id>
<phase>validate</phase>
<goals>
<goal>generateRunners</goal>
</goals>
<configuration>
<glue>mystepdefinitionspackage</glue>
<featuresDirectory>myfeatures</featuresDirectory>
<cucumberOutputDir>myoutput</cucumberOutputDir>
<format>json,html</format>
<tags>"@MyTag"</tags>
</configuration>
</execution>
</executions>
</plugin>
此插件的飞行产生测试跑步,和万无一失只是需要被构造成拾取产生的那些测试运动员:使用cucumber-jvm-parallel-plugin
新的方法在下面的代码段示出
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.20.1</version>
<configuration>
<forkCount>10</forkCount>
<reuseForks>true</reuseForks>
<includes>
<include>**/Parallel*IT.class</include>
</includes>
</configuration>
</plugin>
这工作出色。我的测试并行运行,脚本完美无缺地挂起。感谢您对我的问题的关注。
黄瓜测试是由我的知识整合测试,这意味着通常你不能并行运行它们......问题是为什么测试挂起? – khmarbaise
任何机会并行测试的跑步者都试图在测试结束后写入单个报告文件? – Grasshopper
感谢您的评论。只是为了澄清,当我直接从命令行调用maven,即不通过批处理脚本时,所有测试都并行运行并成功完成。当我尝试从批处理脚本执行maven调用时,我只会遇到这种挂起。 –