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或組屬性,我們的測試將繼續運行,設立適當的依賴。
-
每當一個新的方法需要添加依存關係圖中,我們需要做的就是把它正確的組中,並確保它依賴於正確的組。我們不需要修改任何其他方法。