Java 如何参数化Maven surefire插件,以便选择要运行的TestNG套件

Java 如何参数化Maven surefire插件,以便选择要运行的TestNG套件,java,unit-testing,maven,testng,maven-surefire-plugin,Java,Unit Testing,Maven,Testng,Maven Surefire Plugin,我在TestNG中有许多测试套件。这些是XML文件。我希望在从maven运行集成测试时能够选择多个XML套件 目前,我可以将套件文件添加到pom.xml,如下所示: <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <s

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

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

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <configuration>
    <suiteXmlFiles>
      <suiteXmlFile>${pathToMySuiteFile_1}</suiteXmlFile>
      <suiteXmlFile>${pathToMySuiteFile_1}</suiteXmlFile>
    </suiteXmlFiles>
  </configuration>
</plugin>

org.apache.maven.plugins
maven surefire插件
${pathToMySuiteFile_1}
${pathToMySuiteFile_1}
这个解决方案有一些局限性。我只能更改pom.xml中定义的测试套件的路径。所以在我的例子中,它总是必须是两个文件。我不能跑,比方说,5套或者一套

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

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <configuration>
    <suiteXmlFiles>
      ${multiple_paths_ToMySuiteFiles}
    </suiteXmlFiles>
  </configuration>
</plugin>

org.apache.maven.plugins
maven surefire插件
${multiple_path_ToMySuiteFiles}
运行与给定测试组匹配的所有内容不是我的选项: 我不想加载我拥有的所有套件,然后使用TestNG套件中的组只运行选定的测试。原因是,在使用组筛选器运行所有测试套件后生成的报告与仅运行选定测试套件时生成的报告不同。

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

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


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

<properties>
    <!-- Default suites -->
    <batsSuiteFile>${project.build.testOutputDirectory}/BatsTests.xml</batsSuiteFile>
    <smokeSuiteFile>${project.build.testOutputDirectory}/SmokeTests.xml</smokeSuiteFile>

    <!-- Default suite files if not being specified from mvn command line -->
    <defaultSuiteFiles>${batsSuiteFile},${smokeSuiteFile}</defaultSuiteFiles>
    <suiteFile>${defaultSuiteFiles}</suiteFile>
</properties>
令人惊讶的是,从maven文档中可以看出,arg suiteXmlFiles应该从命令行覆盖它,并且应该只接受以逗号分隔的testng XML列表

如果有人有其他更好的方法,请分享。

根据
suiteXmlFiles
的说明,您可以使用:

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

我提到我不想使用组,因为它破坏了测试结果报告,并且不够灵活,不管灵活与否,但这是您唯一的选择。它可以像您的团队一样灵活。当然,除了运行单个测试之外,另一种方法是在一组命令下面一个接一个地运行其他mvn-D测试${path}/test1测试,mvn-D测试${path}/test2测试和依赖关系是org.apache.maven.plugins maven surefire plugin 2.12${tests}.xml使用
-Dsurefire.suiteXmlFiles
。请参见下面的答案。@norbertpy此示例还使用了该变量:)使用此解决方案,您不需要在pom.xml文件中指定标记。最佳答案。有了这个,我得到了错误
[error]未知生命周期阶段“.suiteXmlFiles=test1.xml,test2.xml”。必须以以下格式指定有效的生命周期阶段或目标:或:[:]:。
mvn test -DsuiteFile=test1.xml,test2.xml
mvn test -Dsurefire.suiteXmlFiles=test1.xml,test2.xml