分組測試是TestNG中的一個新的創(chuàng)新功能,它在JUnit框架中是不存在的。 它允許您將方法調度到適當?shù)牟糠?,并?zhí)行復雜的測試方法分組。 您不僅可以聲明屬于某個分組的方法,還可以指定包含其他組的組。 然后調用TestNG
,并要求其包含一組特定的組(或正則表達式),同時排除另一個分組。 組測試提供了如何分區(qū)測試的最大靈活性,如果您想要背靠背運行兩組不同的測試,則不需要重新編譯任何內(nèi)容。
使用<groups>
標記在testng.xml
文件中指定分組。 它可以在<test>
或<suite>
標簽下找到。 <suite>
標簽中指定分組適用于其下的所有<test>
標簽。
在本教程中,我們將演示如何在TestNG中進行分組測試。
下面是一個測試分組示例 -
runSelenium()
和runSelenium1()
屬于分組:selenium-test
。testConnectOracle()
和testConnectMsSQL()
屬于分組:database
。selenium-test
和database
通過,則runFinal()
將被執(zhí)行。創(chuàng)建一個 Maven 項目:GroupsTest,其目錄結構如下所示 -
創(chuàng)建一個測試類: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
“分組”可以在類上應用。 在下面的示例中,“TestSelenium
”類的每個公共方法都屬于分組:selenium-test
。
創(chuàng)建一個測試類: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");
}
}
創(chuàng)建一個XML文件來運行2
個測試類。
創(chuàng)建一個測試類: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
===============================================
測試方法也可以同時屬于多個分組,如下代碼所示 -
@Test(groups = {"mysql","database"})
public void testConnectMsSQL() {
System.out.println("testConnectMsSQL");
}