这里有点新手,但我试图使用Maven Failsafe插件在TFS 2015中使用Maven任务在Java项目中运行TestNG测试。我最初使用Surefire插件,但想改为使用Failsafe,并且在更改时根据documentation for TestNG的代码,Failsafe插件将运行TestNG测试类而不是测试套件(并且失败,因为我正在使用参数)。当切换回Surefire时,测试将作为测试套件运行并通过。

我尝试了不同版本的Failsafe,但没有任何改变。我缺少Failsafe需要识别测试套件的任何东西吗?

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-failsafe-plugin</artifactId>
            <version>2.19.1</version>
            <configuration>
                <suiteXmlFiles>
                    <suiteXmlFile>testng.xml</suiteXmlFile>
                </suiteXmlFiles>
            </configuration>
        </plugin>


(使用Surefire)

         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.13</version>
            <configuration>
                <suiteXmlFiles>
                    <suiteXmlFile>testng.xml</suiteXmlFile>
                </suiteXmlFiles>
            </configuration>
        </plugin>


(testng.xml)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite">
  <parameter name="urlsource" value="https://httpbin.org/get"></parameter>
  <test name="Test">
    <classes>
      <class name="test.java.TestGenericRESTAPI"/>
    </classes>
  </test> <!-- Test -->
</suite> <!-- Suite -->

最佳答案

您的配置对我完全没有运行故障保护,只有Surefire。按照Failsafe docs,我配置了目标:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-failsafe-plugin</artifactId>
    <version>2.19.1</version>
    <executions>
        <execution>
            <goals>
                <goal>integration-test</goal>
                <goal>verify</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <suiteXmlFiles>
            <suiteXmlFile>testng.xml</suiteXmlFile>
        </suiteXmlFiles>
    </configuration>
</plugin>


现在,Surefire和Failsafe都在mvn verify上执行测试(并且Failsafe正确传递了参数)。如果要跳过Surefire测试,可以执行以下操作:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.18.1</version>
    <configuration>
        <skipTests>true</skipTests>
    </configuration>
</plugin>


现在,Surefire仍在mvn verify上运行,但实际上未运行任何测试。我不知道如何完全禁用Surefire,因此欢迎提出任何建议或改进。

请注意,您的IDE仍可以直接调用Surefire(NetBeans可以为我执行)。一些特定于IDE的设置可能在这里有所帮助。

09-15 14:43