在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设置为只有一个测试运行器的目录,那么一切正常(显然这只启动一个测试线程)并且脚本完整地完成。但似乎启动多个线程抛出它,并在某些时候焦点不能返回到原来的命令窗口。

一如既往,我会非常感谢任何想法/建议。谢谢。

+0

黄瓜测试是由我的知识整合测试,这意味着通常你不能并行运行它们......问题是为什么测试挂起? – khmarbaise

+0

任何机会并行测试的跑步者都试图在测试结束后写入单个报告文件? – Grasshopper

+0

感谢您的评论。只是为了澄清,当我直接从命令行调用maven,即不通过批处理脚本时,所有测试都并行运行并成功完成。当我尝试从批处理脚本执行maven调用时,我只会遇到这种挂起。 –

我圆这个问题通过使用插件我pom.xmlcucumber-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> 

这工作出色。我的测试并行运行,脚本完美无缺地挂起。感谢您对我的问题的关注。