这里有点新手,但我试图使用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的设置可能在这里有所帮助。