如何参数化Maven surefire插件,以便我可以选择运行哪些TestNG套件

我在TestNG中有很多测试套件。 这些是XML文件。 我希望能够在从maven运行集成测试时选择多个XML套件。

目前我可以将套件文件添加到pom.xml,如下所示:

 org.apache.maven.plugins maven-surefire-plugin   ${pathToMySuiteFile_1} ${pathToMySuiteFile_1}    

该解决方案有一些限制。 我只能更改我在pom.xml中定义的测试套件的路径。 所以在我的例子中,它总是必须是两个文件。 我不能跑,比方说,5套房或只有一套。

有没有办法以某种方式参数化pom.xml中的整个“suiteXmlFiles”部分?

  org.apache.maven.plugins maven-surefire-plugin   ${multiple_paths_ToMySuiteFiles}    

运行与给定测试组匹配的所有内容对我来说不是一个选项:我不想加载我所拥有的所有套件,然后使用TestNG套件中的组运行所选的测试。 原因是在运行具有组filter的所有测试套件之后生成的报告与仅运行所选测试套件时的报告不同。

根据suiteXmlFiles 用户属性 ,您可以使用:

 mvn test -Dsurefire.suiteXmlFiles=test1.xml,test2.xml 

我们的测试也遇到了这个问题。 我们现在使用的当前解决方法是在属性部分中定义属性变量,并将其注入到sure-fire suiteXmlFiles块中。

   ${project.build.testOutputDirectory}/BatsTests.xml ${project.build.testOutputDirectory}/SmokeTests.xml  ${batsSuiteFile},${smokeSuiteFile} ${defaultSuiteFiles}  

然后在插件部分……

  org.apache.maven.plugins maven-surefire-plugin 2.12    ${suiteFile}    

如果从命令行中未指定任何内容,则它将退回并默认为属性部分中上面指定的2个套件。 然后,如果您想启动一组指定的套件文件,您可以执行以下操作:

 mvn test -DsuiteFile=test1.xml,test2.xml 

令人惊讶的是,maven docs你希望arg suiteXmlFiles应该从命令行覆盖它,并且应该只接受逗号分隔的testng xmls列表http://maven.apache.org/plugins/maven-surefire-plugin/test- mojo.html#suiteXmlFiles

如果有人有任何其他更好的方式请分享。

您可以在命令行中使用groups参数或指定-Dgroups = …:

(仅限JUnit4.8 +的TestNG / JUnit47提供程序)此测试的组。 如果指定,只有在此处指定的组之一装饰的类/方法/等将包含在测试运行中。 对于JUnit,此参数强制使用4.7提供程序如果指定了suiteXmlFiles参数,则忽略此参数。 。