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

Posted 久曲健

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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依赖详解的主要内容,如果未能解决你的问题,请参考以下文章

Java自动化测试框架-09 - TestNG之依赖注入篇 (详细教程)

TestNG依赖测试

TestNG 依赖于不同类的方法

PMP工具与技术篇--4.3.2 排列活动顺序工具与技术--依赖关系--紧前关系绘图法--提前量--滞后量

为啥testng依赖junit?

quarkus依赖注入之十一:拦截器高级特性上篇(属性设置和重复使用)