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

TestNG依賴測試

有時候,你可能需要在一個特定的順序調用方法在測試案例,或你想分享一些數據和方法之間的狀態。TestNG支持這種依賴測試方法之間的顯式依賴它支持聲明。

TestNG允許指定依賴,無論與否:

  • 使用屬性dependsOnMethods在 @Test 注釋OR

  • 使用屬性dependsOnGroups在@Test注解。

使用屬性dependsOnMethods例如

創建一個類

創建一個Java類進行測試為 MessageUtil.java 在 C: > TestNG_WORKSPACE

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 "Hi!" to the message
    public String salutationMessage() {
	message = "Hi!" + message;
	System.out.println(message);
	return message;
    }
}

創建測試案例類

  • 創建一個Java測試類為 DependencyTestUsingAnnotation.java.

  • 添加方法 testPrintMessage(), testSalutationMessage() 和 initEnvironmentTest() 到測試類

  • 添加屬性 dependsOnMethods = { "initEnvironmentTest" } to the @Test 注釋oftestSalutationMessage() 方法.

創建Java類文件名 DependencyTestUsingAnnotation.java 在 C: > TestNG_WORKSPACE

import org.testng.Assert;
import org.testng.annotations.Test;

public class DependencyTestUsingAnnotation {
    String message = "Manisha";
    MessageUtil messageUtil = new MessageUtil(message);

    @Test
    public void testPrintMessage() {
	System.out.println("Inside testPrintMessage()");
	message = "Manisha";
	Assert.assertEquals(message, messageUtil.printMessage());
    }

    @Test(dependsOnMethods = { "initEnvironmentTest" })
    public void testSalutationMessage() {
        System.out.println("Inside testSalutationMessage()");
	message = "Hi!" + "Manisha";
	Assert.assertEquals(message, messageUtil.salutationMessage());
    }

    @Test
    public void initEnvironmentTest() {
	System.out.println("This is initEnvironmentTest");
    }
}

創建TESTNG.XML

創建一個文件 testng.xml 在 C: > TestNG_WORKSPACE 來執行測試用例

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite1">
    <test name="test1">
	<classes>
	    <class name="DependencyTestUsingAnnotation" />
	</classes>
    </test>
</suite>

編譯MessageUtil的測試用例類使用javac

C:TestNG_WORKSPACE>javac MessageUtil.java DependencyTestUsingAnnotation.java

現在運行 testng.xml  這將會運行 testSalutationMessage() 隻有在執行 ofinitEnvironmentTest() 方法之後

C:TestNG_WORKSPACE>java -cp "C:TestNG_WORKSPACE" org.testng.TestNG testng.xml

驗證輸出

This is initEnvironmentTest
Inside testPrintMessage()
Manisha
Inside testSalutationMessage()
Hi!Manisha

===============================================
Suite1
Total tests run: 3, Failures: 0, Skips: 0
===============================================

示例,使用屬性dependsOnGroups

也可以依賴於整個群組的方法。讓我們來看看下麵的例子:

創建一個類

創建一個Java類進行測試為 MessageUtil.java 在 C: > TestNG_WORKSPACE

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 "Hi!" to the message
    public String salutationMessage() {
	message = "Hi!" + message;
	System.out.println(message);
	return message;
    }
}

創建測試案例類

  • 創建一個Java測試類說依賴TestUsingAnnotation.java.

  • 添加測試方法  testPrintMessage(), testSalutationMessage() 和 initEnvironmentTest() 測試類和他們的組 "初始化"

  • 添加屬性 dependsOnMethods = { "init.*" } to the @Test 注釋 testSalutationMessage() 方法

創建Java類文件名 DependencyTestUsingAnnotation.java 在 C: > TestNG_WORKSPACE

import org.testng.Assert;
import org.testng.annotations.Test;

public class DependencyTestUsingAnnotation {
    String message = "Manisha";
    MessageUtil messageUtil = new MessageUtil(message);

    @Test(groups = { "init" })
    public void testPrintMessage() {
	System.out.println("Inside testPrintMessage()");
	message = "Manisha";
	Assert.assertEquals(message, messageUtil.printMessage());
    }

    @Test(dependsOnGroups = { "init.*" })
    public void testSalutationMessage() {
	System.out.println("Inside testSalutationMessage()");
	message = "Hi!" + "Manisha";
	Assert.assertEquals(message, messageUtil.salutationMessage());
    }

    @Test(groups = { "init" })
    public void initEnvironmentTest() {
	System.out.println("This is initEnvironmentTest");
    }
}

在這個例子中,testSalutationMessage()被聲明為根據任何一組匹配正則表達式“的init*”,這保證了,一種方法,testPrintMessage的()和initEnvironmentTest()將始終前testSalutationMessage()被調用。

如果一個方法失敗,取決於你有一個很難依賴於它(alwaysRun= false,這是默認的),冇有標記的方法依賴於它的失敗,但作為跳過。跳過的方法將被報告為例如在最終報告(在HTML中,既不是紅也不是綠的顏色),這是很重要的,因為跳過的方法不一定是失敗。

創建TESTNG.XML

創建一個文件testng.xml C: > TestNG_WORKSPACE 執行測試案例

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite1">
    <test name="test1">
	<classes>
	    <class name="DependencyTestUsingAnnotation" />
	</classes>
    </test>
</suite>

編譯MessageUtil的測試用例類使用javac

C:TestNG_WORKSPACE>javac MessageUtil.java DependencyTestUsingAnnotation.java

現在,運行testng.xml,這將運行testSalutationMessage()方法後,才執行initEnvironmentTest()方法。

C:TestNG_WORKSPACE>java -cp "C:TestNG_WORKSPACE" org.testng.TestNG testng.xml

驗證輸出

This is initEnvironmentTest
Inside testPrintMessage()
Manisha
Inside testSalutationMessage()
Hi!Manisha

===============================================
Suite1
Total tests run: 3, Failures: 0, Skips: 0
===============================================

dependsOnGroups Vs dependsOnMethods

  • 在使用組,我們不再麵臨重構的問題。隻要我們不修改dependsOnGroups或組屬性,我們的測試將繼續運行,設立適當的依賴。

  • 每當一個新的方法需要添加依存關係圖中,我們需要做的就是把它正確的組中,並確保它依賴於正確的組。我們不需要修改任何其他方法。