我试图将测试分成组,例如,一个“FULL”执行组和一个较轻的“SMOKE”组。我想在主pom中有一个默认配置文件,它只运行SMOKE组,然后让CI服务器激活一个单独的执行所有测试的FULL组。
但是,我在让maven/testng仅执行SMOKE集时遇到问题。当我将FULL组添加到排除组时,不会执行任何测试。
我对maven-surefire插件的有效pom是这样的:
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>default-test</id>
<phase>test</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<groups>USER</groups>
<excludedGroups>FULL</excludedGroups>
</configuration>
</execution>
</executions>
<configuration>
<groups>USER</groups>
<excludedGroups>FULL</excludedGroups>
</configuration>
</plugin>
我的测试类是这样注释的:
@Test(groups = { "FULL", "SMOKE" }, enabled=true)
public void testOne() { }
@Test(groups = { "FULL" }, enabled=true)
public void testTwo() { }
每个类为SMOKE测试组选择一个有代表性的测试。我试图省略排除组标签,只将组标签设置为SMOKE,但随后所有测试都执行。
任何帮助我理解测试组层次结构的帮助都将不胜感激。
首先,当您在排除组中给出FULL时,不运行任何测试是预期的行为,因为它排除了所有具有它的测试用例。如果您只想运行SMOKE,则只能按以下组给出SMOKE。
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>default-test</id>
<phase>test</phase>
<goals>
<goal>test</goal>
</goals>
</execution>
</executions>
<configuration>
<groups>SMOKE</groups>
</configuration>
</plugin>
上面的配置对我来说工作得很好。
下面的配置仅运行testTwo()。
<configuration>
<groups>FULL</groups>
<excludedGroups>SMOKE</excludedGroups>
</configuration>
一个测试用例即使被显式排除也会被执行的唯一情况(我能想到)是当其他一些测试用例依赖于这个测试并且这个依赖的测试用例被包括在内执行时。