TestNG分組測試


分組測試是TestNG中的一個新的創新功能,它在JUnit框架中是不存在的。 它允許您將方法排程到適當的部分,並執行複雜的測試方法分組。 您不僅可以宣告屬於某個分組的方法,還可以指定包含其他組的組。 然後呼叫TestNG,並要求其包含一組特定的組(或正規表示式),同時排除另一個分組。 組測試提供了如何分割區測試的最大靈活性,如果您想要背靠背執行兩組不同的測試,則不需要重新編譯任何內容。

使用<groups>標記在testng.xml檔案中指定分組。 它可以在<test><suite>標籤下找到。 <suite>標籤中指定分組適用於其下的所有<test>標籤。

在本教學中,我們將演示如何在TestNG中進行分組測試。

1. 在方法上的分組

下面是一個測試分組範例 -

  • runSelenium()runSelenium1()屬於分組:selenium-test
  • testConnectOracle()testConnectMsSQL()屬於分組:database
  • 如果分組selenium-testdatabase通過,則runFinal()將被執行。

建立一個 Maven 專案:GroupsTest,其目錄結構如下所示 -

建立一個測試類:TestGroup.java ,其程式碼如下所示 -

package com.yiibai;

import org.testng.annotations.AfterGroups;
import org.testng.annotations.BeforeGroups;
import org.testng.annotations.Test;

public class TestGroup {

    @BeforeGroups("database")
    public void setupDB() {
        System.out.println("setupDB()");
    }

    @AfterGroups("database")
    public void cleanDB() {
        System.out.println("cleanDB()");
    }

    @Test(groups = "selenium-test")
    public void runSelenium() {
        System.out.println("runSelenium()");
    }

    @Test(groups = "selenium-test")
    public void runSelenium1() {
        System.out.println("runSelenium()1");
    }

    @Test(groups = "database")
    public void testConnectOracle() {
        System.out.println("testConnectOracle()");
    }

    @Test(groups = "database")
    public void testConnectMsSQL() {
        System.out.println("testConnectMsSQL");
    }

    @Test(dependsOnGroups = { "database", "selenium-test" })
    public void runFinal() {
        System.out.println("runFinal");
    }

}

執行上面程式碼,得到以下結果 -

[TestNG] Running:
  C:\Users\Administrator\AppData\Local\Temp\testng-eclipse-326443385\testng-customsuite.xml

runSelenium()
runSelenium()1
setupDB()
testConnectMsSQL
testConnectOracle()
cleanDB()
runFinal
PASSED: runSelenium
PASSED: runSelenium1
PASSED: testConnectMsSQL
PASSED: testConnectOracle
PASSED: runFinal

===============================================
    Default test
    Tests run: 5, Failures: 0, Skips: 0
===============================================


===============================================
Default suite
Total tests run: 5, Failures: 0, Skips: 0
===============================================

[TestNG] Time taken by org.testng.reporters.XMLReporter@1b40d5f0: 14 ms
[TestNG] Time taken by org.testng.reporters.SuiteHTMLReporter@6ea6d14e: 38 ms
[TestNG] Time taken by org.testng.reporters.EmailableReporter2@4563e9ab: 5 ms
[TestNG] Time taken by [FailedReporter passed=0 failed=0 skipped=0]: 0 ms
[TestNG] Time taken by org.testng.reporters.jq.Main@2aaf7cc2: 41 ms
[TestNG] Time taken by org.testng.reporters.JUnitReportReporter@45c8e616: 4 ms

2. 在類上的分組

「分組」可以在類上應用。 在下面的範例中,「TestSelenium」類的每個公共方法都屬於分組:selenium-test

建立一個測試類:TestSelenium.java ,其程式碼如下所示 -

package com.yiibai;

import org.testng.annotations.Test;

@Test(groups = "selenium-test")
public class TestSelenium {

    public void runSelenium() {
        System.out.println("runSelenium()");
    }

    public void runSelenium1() {
        System.out.println("runSelenium()1");
    }

}

建立一個XML檔案來執行2個測試類。

建立一個測試類:testng.xml ,其程式碼如下所示 -

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name="TestAll">

    <test name="final">
        <classes>
            <class name="com.yiibai.TestSelenium" />
            <class name="com.yiibai.TestGroup" />
        </classes>
    </test>

    <!-- Run test method on group "selenium" only -->
    <test name="selenium">

        <groups>
            <run>
                <include name="selenium-test" />
            </run>
        </groups>

        <classes>
            <class name="com.yiibai.TestSelenium" />
            <class name="com.yiibai.TestGroup" />
        </classes>

    </test>

</suite>

執行上面程式碼,得到以下結果 -

[TestNG] Running:
  F:\worksp\testng\GroupsTest\src\main\java\com\yiibai\testng.xml

runSelenium()
runSelenium()1
runSelenium()
runSelenium()1
setupDB()
testConnectMsSQL
testConnectOracle()
cleanDB()
runFinal
runSelenium()
runSelenium()1
runSelenium()
runSelenium()1

===============================================
TestAll
Total tests run: 11, Failures: 0, Skips: 0
===============================================

3. 其它分組

測試方法也可以同時屬於多個分組,如下程式碼所示 -

@Test(groups = {"mysql","database"})
public void testConnectMsSQL() {
    System.out.println("testConnectMsSQL");
}