我在 Maven 项目中有一套 Cucumber Selenium 测试,并且最近配置了 Surefire 插件来并行运行我的测试。只需执行与此类似的命令即可正常工作,其中 test.runner.directory 是在 pom.xml 中声明的属性,用于保存我的 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
最初,我尝试配置 Surefire 来运行我自己编写的测试运行程序,如下面的代码片段所示:-
<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>
根据我最初的问题,这使我的测试运行正常,但导致我的批处理脚本挂起并且永远无法完成。使用 cucumber-jvm-parallel-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>
这个插件动态生成测试运行程序,surefire 只需要配置即可获取这些生成的测试运行程序:
<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>
这非常有效。我的测试并行运行,并且脚本正常完成而不会挂起。感谢您对我的问题感兴趣。
关于java - 在 Windows 批处理文件中从 Maven 运行并行 Cucumber 测试时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46709329/