排除多个群组TestNG

时间:2016-12-07 07:24:23

标签: unit-testing testing automation testng

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,我必须这样做,因为它在两个组之下&#34;第一个&#34;和&#34;第二&#34;。所以虽然p1_c1_1在包含的组#&#34; first&#34;下,但它仍处于被排除的组中,名为&#34; third&#34;,所以从技术上讲,该方法不应该被执行。我想知道如何排除一个包含其中一个组的

之下的两个组的方法

2 个答案:

答案 0 :(得分:0)

dtd指定<define>仅支持包含为选项

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

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

因此,实现这一目标的唯一方法是运行简单组而不是定义一组groups.i.e。

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

这将按您想要的方式工作。由于在此示例中至少没有复杂的分组,因此在这种情况下甚至不需要元组。

答案 1 :(得分:0)

如果您想尝试更复杂的群组过滤,也许您可​​以尝试在TestNG套件XML文件中利用Beanshell功能,其中您可以轻松定义您想要的任何内容。

有关如何在TestNG套件xml文件中利用Beanshell的更多信息,您可以查看我的this博客文章。