2016-12-07 76 views
0
public class c1 { 

@Test(groups ={"first","third"}) 
public void p1_c1_1() 
{ 
    System.out.println("p1_c1_1"); 

} 
@Test(groups ="second") 
public void p1_c1_2(){ 

    System.out.println("p1_c1_2"); 
} 
@Test(groups ="third") 
public void p1_c1_3(){ 

    System.out.println("p1_c1_3"); 
} 


<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> 
<suite name="Suite One" allow-return-values="true" verbose="1"> 
<test name="Test One"> 
    <groups> 
     <define name="all"> 
      <include name="first" /> 
      <exclude name="second"/> 
      <exclude name="third"/> 
     </define> 
     <run> 
      <include name="all" /> 
     </run> 
    </groups> 
    <classes> 
     <class name="c1" /> 
    </classes> 
</test> 
</suite> 

如果我運行這個testNg文件我得到p1_c1_1打印,我不能因爲它在兩個組「第一」和「第二」。所以儘管p1_c1_1被包含在名爲「first」的組中,但它仍處於被排除的組中,名爲「third」,因此從技術上講該方法不應執行。我想知道如何排除這是一種方法下,兩組的羣體之一包含的排除多個組TestNG

回答

0

dtd指定<define>只支持包括作爲選件

<!ELEMENT groups (define*,run?,dependencies?) > 

<!ELEMENT define (include*)> 
<!ATTLIST define 
    name CDATA #REQUIRED> 

這樣你就可以實現這一目標的唯一途徑是運行簡單的組而不是定義一組groups.ie

<groups> 
     <run> 
      <include name="first" /> 
      <exclude name="second"/> 
      <exclude name="third"/> 
     </run> 
    </groups> 

而且這樣會按照你想要的方式工作。由於在這個例子中至少沒有複雜的分組,所以在這種情況下甚至不需要元組。

0

如果您想嘗試更復雜的羣組過濾,也許您可​​以嘗試在您的TestNG套件XML文件中利用Beanshell功能,您可以在其中定義任何想要的功能。

對於圍繞如何在TestNG的套件XML文件利用BeanShell的更多信息,你可以看看我的this博客文章。