TestNG中的群组有什么意义?

时间:2018-02-20 17:15:24

标签: testng

TestNG具有您可以在测试类中以及控制执行的TestNG.xml文件中指定的组。

我的问题是 - 它实际上没有做任何事情。

我以为只要运行该组就可以运行组中的所有类。

它实际上有用吗?

http://testng.org/doc/documentation-main.html#test-groups

我的TestNG.xml看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="tests">
    <listeners>
        <listener class-name="listeners.TestNGCustomReportListener" />
    </listeners>
    <test thread-count="5" name="firefoxTest">
        <parameter name="browser" value="firefox" />
        <groups>
            <run>
                <include name="login" />
            </run>
        </groups>
    </test>
</suite> 

我的课程都是这样的前缀:

public class LoginTest extends CrossBrowserTest{

@Test(groups = {"login"})
public void loginTest (){

运行此结果?没有上课:

Total tests run: 0, Failures: 0, Skips: 0

这不符合它的意图吗?

所以我做了一些实验。

我将groups部分放在一个大的testng.xml文件的顶部:

    <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="tests">
    <listeners>
        <listener class-name="listeners.TestNGCustomReportListener" />
    </listeners>
    <test thread-count="5" name="firefoxTest">
        <parameter name="browser" value="firefox" />
        <groups>
            <run>
                <include name="login" />
            </run>
        </groups>
        <classes>
            <class name="tests.login.LoginTest" />
            <class name="tests.login.AutoLogOutTest" />
            <class name="tests.login.AutoLogOutWithRestApiTest" />
            <class name="tests.login.ChangePasswordTest" />
            <class name="tests.login.SwitchCustomerProjectsTest" /> 
            <class name="tests.login.ForgotPasswordResetTest" />
            <class name="tests.login.EditUserNameTest" />

            <class name="tests.layers.EnableLayerTest" />
            <class name="tests.layers.EnableLayerStyleTest" />
            <class name="tests.layers.ChangeLayerNameTest" />
            <class name="tests.layers.ChangeStyleNameTest" />
            <class name="tests.layers.ChangeStyleColourTest" />

            <!-- etc -->

            </classes>
    </test>
</suite>

这一次,它只运行了所选的组,但它没有这样做,因此没有登录:

    @Parameters("browser")

@BeforeTest
public void beforeTest(@Optional("firefox") String browser) {
    // compares the value of parameter name with Firefox, if its firefox then it
    // will lauch firefox and run the script.
    debug.print(thisClass + " CrossBrowserTest.beforeTest." );

    initialiseDriver(browser);

    loggedInPage = LoginUtility.login(driver);

}

1 个答案:

答案 0 :(得分:0)

长话短说,它用于分组。

让我们从testng.xml开始。它使用以下结构:

<suite name="TestNG">

<test name="Nopackage">
  <groups>
    <run>
      <include name="nopackage"/>
    </run>
  </groups>
  <classes>
    <class name="NoPackageTest" />
  </classes>
</test>

正如您所见,组和类处于同一级别。如果要在组中运行所有测试,则必须指定要调用的类/包和组,例如相交集。

请参阅testng.xml and related class for example

此外,您还有@BeforeGroup@AfterGroup注释,这有助于上下文操作。

我使用组时的主要情况是为每个类管理不同测试方法的不同设置。例如,@BeforeMethod(alwaysRun = true)正在为类中的所有方法运行,但@BeforeMethod(groups = "my_group")仅针对标有my_group的方法运行。

最后一个,现代报告工具支持每组视图,因此您可以将它们用作标记。