繁体   English   中英

TestNG:如何包括2组中的测试组(AND过滤器)

[英]TestNG: How to include test groups that are in 2 groups (AND filter)

我想在测试套件中尽可能地灵活-我希望能够:

  • 按优先级运行所有测试(p1,p2 ...)-这很容易
  • 通过模块(模块1,模块2 ...)运行所有测试-这很容易
  • 运行特定优先级和特定模块的测试-我不知道

因此,我进行了一些测试:

@Test(groups = {"p1", "module1"})
public void p1module1() {
    System.out.println("p1module1");
}
@Test(groups = {"p2", "module1"})
public void p2module1() {
    System.out.println("p2module1");
}
@Test(groups = {"p1", "module2"})
public void p1module2() {
    System.out.println("p1module2");
}
@Test(groups = {"p2", "module2"})
public void p2module2() {
    System.out.println("p2module2");
}

但是如果我做这样的事情

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="qa-selenium">
    <test name="My Suite">
        <groups>
            <run>
                <include name="p1"/>
                <include name="module1"/>
            </run>
        </groups>
        <packages>
            <package name="com.mycompany.qa.selenium.*"/>
        </packages>
    </test>
</suite>

包括被视为或,但我想要一个与。 在这种情况下,我想创建一个仅执行p1module1()的套件

我意识到我可以使用大量的排除-在这个例子中

<exclude name="p2"/>
<exclude name="module2"/>

但我真的想避免这种情况。 有没有办法做到这一点,最好不用元编程?

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="qa-selenium">
    <test name="My Suite">
        <groups>
            <define name="functest">
                <include name="p1"/>
                <include name="p2" />
                <include name="module1"/>
                <include name="module2"/>
            </define>
            <define name="all">
                <include name="functest" />
            </define>
            <run>
                <include name="all"/>
            </run>
        </groups>
        <packages>
            <package name="your_package_name" />
        </packages>
    </test>
</suite>

您可以尝试上述操作,以便使用所有可能的组合进行测试。

上面的xml组以以下方式给我输出(采用所有可能的组合)。

在此处输入图片说明

您可以使用通用的包含名称的第一部分,然后在包含名称中使用它来执行所有测试,如下所示

测试组如下

@Test(groups = {"a-p1", "a-module1"})
public void p1module1() {
    System.out.println("p1module1");
}
@Test(groups = {"b-p2", "b-module1"})
public void p2module1() {
    System.out.println("p2module1");
}
@Test(groups = {"c-p1", "c-module2"})
public void p1module2() {
    System.out.println("p1module2");
}
@Test(groups = {"d-p2", "d-module2"})
public void p2module2() {
    System.out.println("p2module2");
}

Suite xml如下所示

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="qa-selenium">
    <test name="My Suite">
        <groups>
            <run>
                <include name="a.*"/>
                <include name="b.*"/>
                <include name="c.*"/>
                <include name="d.*"/>
            </run>
        </groups>
        <packages>
            <package name="com.mycompany.qa.selenium.*"/>
        </packages>
    </test>
</suite>

在上面的xml中, <include name="a.*"/>将执行测试,这些测试的标签为"a-p1", "a-module1"

无需为P1和模块定义单独的包含名称, enter code here为其他名称使用,它将被视为AND而不是OR,请让我知道您问题的正确答案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM