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

时间:2012-07-09 14:38:31

标签: 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>
    <suiteXmlFiles>
      <suiteXmlFile>${pathToMySuiteFile_1}</suiteXmlFile>
      <suiteXmlFile>${pathToMySuiteFile_1}</suiteXmlFile>
    </suiteXmlFiles>
  </configuration>
</plugin>

此解决方案有一些限制。我只能更改我在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>

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

3 个答案:

答案 0 :(得分:15)

根据step的{​​{3}}您可以使用:

suiteXmlFiles

答案 1 :(得分:8)

我们的测试也遇到了这个问题。 我们现在使用的当前解决方法是在属性部分中定义一个属性变量,并将其注入到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>

然后在插件部分......

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.12</version>
    <configuration>
       <suiteXmlFiles>
          <!-- Suite file injection parameter from command line -->
          <suiteXmlFile>${suiteFile}</suiteXmlFile>
       </suiteXmlFiles>
    </configuration>
</plugin>

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

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

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

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

答案 2 :(得分:0)

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

  

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