TestNG maven运行没有组的测试

时间:2014-03-06 13:08:06

标签: java maven testng maven-surefire-plugin

我正在使用带有surefire插件的TestNG和Maven来运行测试。 我有:

@Test(groups={"groupA"})
TestA{}

@Test
TestB

我希望能够运行:

mvn test 

应该在没有任何组的情况下调用所有测试

mvn test -Dgroups=groupA

应该只调用groupA测试(默认情况下这是有效的,但这里只是添加它以使其与之前的选项一起使用)

我尝试配置surefire,如:

<plugin>
 <groupId>org.apache.maven.plugins</groupId>
 <artifactId>maven-surefire-plugin</artifactId>
 <version>2.16</version>
 <configuration>
   <excludedGroups>groupA</excludedGroups>
 </configuration>
</plugin>

mvn test 按预期工作,但在执行后 mvn test -Dgroups = groupA 没有执行任何测试

修改

我在这里找到了解决方案: https://labs.consol.de/blog/maven/citrus-and-testng-groups/

<!-- TestNG groups -->
<testGroups></testGroups>
<testGroupsExcluded>groupA</testGroupsExcluded>
<!-- /TestNG groups-->
...
<plugin>
 <groupId>org.apache.maven.plugins</groupId>
 <artifactId>maven-surefire-plugin</artifactId>
 <version>2.16</version>
 <configuration>
       <groups>${testGroups}</groups>
   <excludedGroups>${testGroupsExcluded}</excludedGroups>
 </configuration>
...

 <profile>
<id>a-testes</id>
<properties>
<testGroups>a</testGroups>
<testGroupsExcluded></testGroupsExcluded>
</properties>
 </profile>

但是这个解决方案存在一个问题。当我们想要只运行一组测试时,它运行正常,例如 mvn test -P a-tests ,但是当我们添加另一组时,让我们说b-tests,然后在之后mvn test -P a-tests,b-tests 只会执行一个组,因为最后定义的配置文件将覆盖属性...任何想法如何组合 testGroupsExcluded testGroups < / strong>来自多个个人资料的属性?     

修改2

我刚刚结束了解决方案

 <properties>
   <testGroups>unit</testGroups>
 </properties>
 ...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.16</version>
<configuration>
  <groups>${testGroups}</groups>
</configuration>
</plugin>

但我必须明确地将所有测试分配给组(所有未分配的测试现在都是'unit'),但现在我可以调用:

mvn test 调用标记为单位的所有测试

mvn test -DtestGroups = groupA,groupB 要调用任何组测试......

1 个答案:

答案 0 :(得分:0)

伙计,你检查了http://testng.org/doc/documentation-main.html#beanshell吗?

在surefire插件中附加testng suit config:

<configuration>
    <suiteXmlFiles>
        <suiteXmlFile>testng.xml</suiteXmlFile>
    </suiteXmlFiles>
...

在testng.xml中

<suite name="Emap test suite">
<test name="Emap tests">
    <method-selectors>
        <method-selector>
            <script language="beanshell"><![CDATA[        
            addClassPath("target/test-classes" );      
            return com.yourpackage.shouldExecuteTest(groups, System.getProperty("groups"));         
            ]]>

在静态Java方法shouldExecuteTest中,您可以实现任何您想要的规则!

根据doc,您可以使用这些变量:

java.lang.reflect.Method method:  the current test method.
org.testng.ITestNGMethod testngMethod:  the description of the current test method
java.util.Map<String, String> groups:  a map of the groups the current test method belongs to.

System.getProperty(&#34; groups&#34;)只是从mvn调用传递的-Dgroups = xxx。

像魅力一样!