在TestNG中組測試是一個新的創新功能,它不存在於JUnit框架,它允許調度到適當的部分方法和瓶坯複雜的測試方法分組。您不僅可以聲明屬於群體的那些方法,但你也可以指定一組包含其他組。然後,TestNG可調用和要求包括一組特定的群體(或正則表達式),而排除另一個集合。這給了你最大的靈活性,如何分區測試,如果想運行兩套不同的測試背靠背,不要求重新編譯任何東西。
組指定testng.xml文件使用<groups>標簽。它可以發現無論是根據<test>或<suite>標簽。組指定<suite>標簽適用於所有的的<test>標簽下方。
現在,讓我們看一個例子,如何組測試。
創建一個Java類進行測試為 MessageUtil.java 在 C:\ > TestNG_WORKSPACE
/* * This class prints the given message on console. */ public class MessageUtil { private String message; // Constructor // @param message to be printed public MessageUtil(String message) { this.message = message; } // prints the message public String printMessage() { System.out.println(message); return message; } // add "tutorialspoint" to the message public String salutationMessage() { message = "tutorialspoint" + message; System.out.println(message); return message; } // add "www." to the message public String exitMessage() { message = "www." + message; System.out.println(message); return message; } }
創建一個Java測試類為 GroupTestExample.java.
測試類添加測試方法testPrintMessage()和 testSalutationMessage()。
組的測試方法兩個類彆為:
檢入登記測試(checkintest):提交新的代碼之前,你應該運行這些測試。他們通常應快,隻要確保冇有被打破的基本功能。
功能測試(functest):這些測試應該涵蓋軟件的所有功能,每天至少運行一次,雖然理想情況下,會希望他們不斷運行。
創建Java類文件名 GroupTestExample.java 在 C:\ > TestNG_WORKSPACE
import org.testng.Assert; import org.testng.annotations.Test; public class GroupTestExample { String message = ".com"; MessageUtil messageUtil = new MessageUtil(message); @Test(groups = { "functest", "checkintest" }) public void testPrintMessage() { System.out.println("Inside testPrintMessage()"); message = ".com"; Assert.assertEquals(message, messageUtil.printMessage()); } @Test(groups = { "checkintest" }) public void testSalutationMessage() { System.out.println("Inside testSalutationMessage()"); message = "tutorialspoint" + ".com"; Assert.assertEquals(message, messageUtil.salutationMessage()); } @Test(groups = { "functest" }) public void testingExitMessage() { System.out.println("Inside testExitMessage()"); message = "www." + "tutorialspoint"+".com"; Assert.assertEquals(message, messageUtil.exitMessage()); } }
創建一個文件 testng.xml C:\ > TestNG_WORKSPACE 來執行測試用例,在這裡,我們將隻執行這些測試,屬於組functest。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > <suite name="Suite1"> <test name="test1"> <groups> <run> <include name="functest" /> </run> </groups> <classes> <class name="GroupTestExample" /> </classes> </test> </suite>
編譯MessageUtil的測試用例類使用javac。
C:\TestNG_WORKSPACE>javac MessageUtil.java GroupTestExample.java
現在,運行testng.xml,隻運行的方法testPrintMessage(),因為它屬於組functest。
C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml
驗證輸出。隻有的方法testPrintMessage()被執行。
Inside testPrintMessage() .com Inside testExitMessage() www..com =============================================== Suite1 Total tests run: 2, Failures: 1, Skips: 0 ===============================================
組也可以包含其他組。這些組稱為MetaGroups。例如,您可能希望定義一個組中的所有,包括checkintest和functest。讓我們修改testng.xml文件如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > <suite name="Suite1"> <test name="test1"> <groups> <define name="all"> <include name="functest"/> <include name="checkintest"/> </define> <run> <include name="all"/> </run> </groups> <classes> <class name="GroupTestExample" /> </classes> </test> </suite>
執行上述testng.xml將執行所有三個測試會給你下麵的結果:
Inside testPrintMessage() .com Inside testSalutationMessage() tutorialspoint.com Inside testExitMessage() www.tutorialspoint.com =============================================== Suite1 Total tests run: 3, Failures: 0, Skips: 0 ===============================================
可以忽略一個組使用<exclude>標簽,如下圖所示:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > <suite name="Suite1"> <test name="test1"> <groups> <define name="all"> <exclude name="functest"/> <include name="checkintest"/> </define> <run> <include name="all"/> </run> </groups> <classes> <class name="GroupTestExample" /> </classes> </test> </suite>