当前位置: 首页 > 知识库问答 >
问题:

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

南宫星波
2023-03-14

我在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中参数化整个“suiteXmlFiles”部分。xml?

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

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

共有3个答案

史朗
2023-03-14

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

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

司马祖鹤
2023-03-14

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

如果命令行中没有指定任何内容,它将返回并默认为上面“属性”部分中指定的两个套件。然后,如果要启动一组指定的套件文件,可以执行以下操作:

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

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

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

陈马鲁
2023-03-14

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

mvn test -Dsurefire.suiteXmlFiles=test1.xml,test2.xml
 类似资料:
  • 我有一个TestNG XML,格式如下: 这个套件有两个类,每个类都有一些@Test方法。现在我想让我的套件以同样的顺序再运行3次,就像它运行一样,即所有的class1方法,然后是class2方法。我怎样才能做到这一点?我正在使用Selenium WebDriver和核心Java来运行我的自动化套件。

  • 我正在使用maven运行我的集成测试,这些测试在TestNG套件中。在Eclipse下运行套件时--我的测试套件运行成功。当运行“mvn verify”来运行我的集成测试时,我看到failsafe插件配置调试打印,其中包括suite.xml文件和我编译的类的正确路径,但它没有执行我的测试(构建过程成功完成)。 我尝试过运行相同的pom配置,但是使用了surefire插件而不是failsafe插件,

  • 我试图用Cucumber,用不同的参数并行运行多个testng套件。对于每个tesng套件,我试图传递不同的浏览器、testinfo等等。我想通过maven命令行选项来实现这一点。我关注了https://rationaleemotions.wordpress.com/2016/03/29/parallel-execution-of-multiple-testng-suites/#comment-1

  • 下面是我的pom.xml、testng.xml文件和TestRunners。 下面是我的pom.xml文件 [Utils][ERROR][ERROR]java.lang.NullPointerException在Cucumber.api.testng.AbstractTestngCucumberTests.Scenaries(AbstractTestngCucumberTests.java:31)

  • 请让我知道是否可以通过TestNG运行并行套件?

  • 主套房.java 对于每个测试套件,都有包含@Test的类 例如 TestSuite1.java TestClass1.java 所以我的问题是如何运行TestSuite1、TestSuite2