0

我希望我的测试套件尽可能灵活——我希望能够:

  • 按优先级(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>

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

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

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

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

4

2 回答 2

0
<!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 组以以下方式为我提供输出(采用所有可能的组合)。

在此处输入图像描述

于 2018-02-14T10:59:08.917 回答
0

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

测试组如下

@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");
}

套件 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,让我知道它是否正确回答了您的问题

于 2018-02-14T11:51:15.640 回答