首页 > 代码库 > TestNg依赖高级用法之强制依赖与顺序依赖------TestNg依赖详解(二)

TestNg依赖高级用法之强制依赖与顺序依赖------TestNg依赖详解(二)

TestNg使用dependsOnGroups属性来进行依赖测试,

测试方法依赖于某个或某些方法,这个/这些方法作为前置依赖条件

强制依赖:如果被依赖的某一个方法发生了异常,那么之后的方法都不会被执行(默认)

顺序依赖:无论被依赖的方法是否出现异常,后续的方法都会被执行,通过alwaysRun=“true”来配置

 

 

 

[java] view plain copy
 
  1. /** 
  2.  *  
  3.  * <p> 
  4.  * Title: TestngDependOnGroups 
  5.  * </p> 
  6.  *  
  7.  * <p> 
  8.  * Description: 测试方法依赖于某个或某些方法,这个/这些方法作为前置依赖条件 
  9.  *  
  10.  * 如果依赖的方法发生异常而不能正确的执行时,默认情况下,接下来的方法将不会被执行(强制依赖,默认) 如果在方法体的注解上设置了alwaysRun = 
  11.  * true,那么此时在依赖链中的任何一个方法出现异常都不会影响其它方法的执行 
  12.  *  
  13.  * dependsOnGroups 
  14.  *  
  15.  * </p> 
  16.  *  
  17.  * <p> 
  18.  * Company: 
  19.  * </p> 
  20.  *  
  21.  * @author : Dragon 
  22.  *  
  23.  * @date : 2014年10月21日 
  24.  */  
  25. public class TestngDependOnGroups {  
  26.     @Test(groups = { "init" })  
  27.     public void serverStartedOk() {  
  28.         System.out.println("serverStartedOk.....");  
  29.     }  
  30.   
  31.     @Test(groups = { "init2" })  
  32.     public void initEnvironment() {  
  33.   
  34.         System.out.println("initEnvironment.....");  
  35.         throw new RuntimeException("unexpected fail......");  
  36.     }  
  37.   
  38.     @Test(dependsOnGroups = { "init.*" }, alwaysRun = true)  
  39.     public void method1() {  
  40.         System.err.println("I am over here.....");  
  41.     }  
  42. }  

 

配置文件:

 

[html] view plain copy
 
 技术分享技术分享
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">  
  3. <suite name="framework_testng" >  
  4.     <test verbose="2" name="TestngDependOnGroups">  
  5.         <classes>  
  6.             <class name="com.dragon.testng.annotation.TestngDependOnGroups">  
  7.             </class>  
  8.         </classes>  
  9.     </test>  
  10. </suite>  

 

运行结果:我们发现在配置了顺序依赖之后,即使initEnvironment()方法抛出了异常,method1()还是执行了并且passed

 

[html] view plain copy
 
 技术分享技术分享
  1. initEnvironment.....  
  2. serverStartedOk.....  
  3. I am over here.....  
  4. PASSED: serverStartedOk  
  5. PASSED: method1  
  6. FAILED: initEnvironment  
  7. java.lang.RuntimeException: unexpected fail......  
  8.     at com.dragon.testng.annotation.TestngDependOnGroups.initEnvironment(TestngDependOnGroups.java:41)  
  9.     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
  10.     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)  
  11.     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)  
  12.     at java.lang.reflect.Method.invoke(Method.java:606)  
  13.     at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:84)  
  14.     at org.testng.internal.Invoker.invokeMethod(Invoker.java:714)  
  15.     at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901)  
  16.     at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231)  
  17.     at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)  
  18.     at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)  
  19.     at org.testng.TestRunner.privateRun(TestRunner.java:767)  
  20.     at org.testng.TestRunner.run(TestRunner.java:617)  
  21.     at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)  
  22.     at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329)  
  23.     at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)  
  24.     at org.testng.SuiteRunner.run(SuiteRunner.java:240)  
  25.     at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)  
  26.     at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)  
  27.     at org.testng.TestNG.runSuitesSequentially(TestNG.java:1224)  
  28.     at org.testng.TestNG.runSuitesLocally(TestNG.java:1149)  
  29.     at org.testng.TestNG.run(TestNG.java:1057)  
  30.     at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:111)  
  31.     at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:204)  
  32.     at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:175)  
  33.   
  34.   
  35. ===============================================  
  36.     TestngDependOnGroups  
  37.     Tests run: 3, Failures: 1, Skips: 0  
  38. ===============================================  

 

 

 

默认的强制依赖:Java code:

 

[java] view plain copy
 
 技术分享技术分享
  1. public class TestngDependOnGroups {  
  2.     @Test(groups = { "init" })  
  3.     public void serverStartedOk() {  
  4.         System.out.println("serverStartedOk.....");  
  5.     }  
  6.   
  7.     @Test(groups = { "init2" })  
  8.     public void initEnvironment() {  
  9.   
  10.         System.out.println("initEnvironment.....");  
  11.         throw new RuntimeException("unexpected fail......");  
  12.     }  
  13.   
  14.     @Test(dependsOnGroups = { "init.*" })  
  15.     public void method1() {  
  16.         System.err.println("I am over here.....");  
  17.     }  
  18. }  

 

原创文章,版权所有,允许转载,标明出处:http://blog.csdn.net/wanghantong

运行结果: 这时我们发现initEnvironment() 抛出异常后, method1() 被跳过了,并没有被执行

 

 

[html] view plain copy
 
 技术分享技术分享
    1. initEnvironment.....  
    2. serverStartedOk.....  
    3. PASSED: serverStartedOk  
    4. FAILED: initEnvironment  
    5. java.lang.RuntimeException: unexpected fail......  
    6.     at com.dragon.testng.annotation.TestngDependOnGroups.initEnvironment(TestngDependOnGroups.java:41)  
    7.     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
    8.     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)  
    9.     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)  
    10.     at java.lang.reflect.Method.invoke(Method.java:606)  
    11.     at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:84)  
    12.     at org.testng.internal.Invoker.invokeMethod(Invoker.java:714)  
    13.     at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901)  
    14.     at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231)  
    15.     at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)  
    16.     at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)  
    17.     at org.testng.TestRunner.privateRun(TestRunner.java:767)  
    18.     at org.testng.TestRunner.run(TestRunner.java:617)  
    19.     at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)  
    20.     at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329)  
    21.     at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)  
    22.     at org.testng.SuiteRunner.run(SuiteRunner.java:240)  
    23.     at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)  
    24.     at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)  
    25.     at org.testng.TestNG.runSuitesSequentially(TestNG.java:1224)  
    26.     at org.testng.TestNG.runSuitesLocally(TestNG.java:1149)  
    27.     at org.testng.TestNG.run(TestNG.java:1057)  
    28.     at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:111)  
    29.     at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:204)  
    30.     at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:175)  
    31.   
    32. SKIPPED: method1  
    33.   
    34. ===============================================  
    35.     TestngDependOnGroups  
    36.     Tests run: 3, Failures: 1, Skips: 1  
    37. ===============================================  

TestNg依赖高级用法之强制依赖与顺序依赖------TestNg依赖详解(二)