位置:首頁 > Java技術 > TestNG教學 > TestNG組測試

TestNG組測試

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

創建一個文件 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>