我们为maven中的集成测试阶段生命周期定义了数百个测试,并且需要很长时间才能完成。
我想要做的是在integration-test
中只运行一次测试。我试过了:
mvn -Dtest=<my-test> integration-test
但这不起作用。 -Dtest
仅运行单元测试目标中的测试,而不是集成测试阶段。我尝试了-Dintegration-test=<my-test>
,而忽略了它。
有办法吗?
我的配置是:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<executions>
<execution>
<id>surefire-it</id>
<phase>integration-test</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<excludes>
<exclude>none</exclude>
</excludes>
<includes>
<include>**/api/**</include>
</includes>
.....
答案 0 :(得分:32)
如果您使用的是Maven failsafe plugin,则可以通过将it.test
属性设置为完全限定的测试类名来运行单个集成测试:
mvn -Dit.test=your.TestCase verify
答案 1 :(得分:25)
Failsafe documentation可以指定测试:
mvn -Dit.test=BrokenIT verify
但是, -Dit.test 似乎不再起作用了。相反,用于指定Surefire测试的相同参数显然也适用于Failsafe。例如:
mvn -Dtest=WorksIT verify
我已经提交了bug(编辑:,已在2.12中关闭为“无法重现”)以更正文档。
答案 2 :(得分:3)
我一直在努力解决这个问题,当我想运行一个集成测试时,我创建了一个额外的配置文件。我希望我在这里成功地提取了正确的部分:
<profile>
<id>integrationTestSingle</id>
<build>
<plugins>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<executions>
<execution>
<id>surefire-it</id>
<phase>integration-test</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<includes>
<include>**/integration/**/${test}.java</include>
</includes>
<skipTests>false</skipTests>
</configuration>
</execution>
</executions>
<configuration>
<argLine>-Xms256M -Xmx768M -XX:MaxPermSize=256M</argLine>
</configuration>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<executions>
<execution>
<id>default-test</id>
<configuration>
<skipTests>true</skipTests>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
现在,我使用integrationTestSingle配置文件和-DfailIfNoTests=false -Dtest=NameOfTest
调用maven,并且它在常规“测试”阶段不运行任何常规测试,并且在期间仅运行NameOfTest
测试整合测试阶段。
答案 3 :(得分:3)
只需为testNG添加-DfailIfNoTests=false
即可。像这样:
mvn integration-test -Dtest=aITest -DfailIfNoTests=false
答案 4 :(得分:2)
我不确定JUnit,但对于TestNG,策略是定义只有一个测试的套件XML文件,然后在POM中配置surefire插件以仅运行它。在你的POM中,你会有这样的东西(免责声明,这是未经测试的):
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<executions>
<execution>
<phase>integration-test</phase>
<configuration>
<suiteXmlFiles>
<suiteXmlFile>single-test.xml</suiteXmlFile>
</suiteXmlFiles>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
答案 5 :(得分:0)
我自己也碰到了这个。这样的事情对我很有用:
mvn -Pintegration-test -Dtest=<my-test>
诀窍是确保在-Dtest部分之前提到测试组。