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

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

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

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

  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. @Test(groups = { "init2" })
  31. public void initEnvironment() {
  32. System.out.println("initEnvironment.....");
  33. throw new RuntimeException("unexpected fail......");
  34. }
  35. @Test(dependsOnGroups = { "init.*" }, alwaysRun = true)
  36. public void method1() {
  37. System.err.println("I am over here.....");
  38. }
  39. }

配置文件:

  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

  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. TestngDependOnGroups
  35. Tests run: 3, Failures: 1, Skips: 0
  36. ===============================================

默认的强制依赖:Javacode:

  1. public class TestngDependOnGroups {
  2. @Test(groups = { "init" })
  3. public void serverStartedOk() {
  4. System.out.println("serverStartedOk.....");
  5. }
  6. @Test(groups = { "init2" })
  7. public void initEnvironment() {
  8. System.out.println("initEnvironment.....");
  9. throw new RuntimeException("unexpected fail......");
  10. }
  11. @Test(dependsOnGroups = { "init.*" })
  12. public void method1() {
  13. System.err.println("I am over here.....");
  14. }
  15. }

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

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

    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. SKIPPED: method1
    32. ===============================================
    33. TestngDependOnGroups
    34. Tests run: 3, Failures: 1, Skips: 1
    35. ===============================================

TestNg依赖高级用法之强制依赖与顺序依赖------TestNg依赖详解(二)的更多相关文章

  1. testNG的高级用法 --DataProvider

    @DataProvider Method参数 数据提供者的第一个参数是java.lang.reflect.Method,TestNG传递这个将调用的测试方法.如果您希望数据提供者根据不同的测试方法返回 ...

  2. 1.4 Spring 依赖注入(DI)和控制反转(IOC)详解

    自己开发了一个股票智能分析软件,功能很强大,需要的点击下面的链接获取: https://www.cnblogs.com/bclshuai/p/11380657.html 1.1  Spring 依赖注 ...

  3. Postman高级应用——串行传参和动态传参详解

    Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件 用Postman做接口测试的时候,要把多条用例一起执行,就需要把用例连接起来,一次性执行 目录 串行传参 动态传参 使用 ...

  4. ASP.NET MVC5+EF6+EasyUI 后台管理系统(85)-Quartz 作业调度用法详解二

    前言 上一节我们学习了Quartz的基本用法 这一节学习通过XML配置的形式来执行任务 这一节主要认识一些属性,为下一步打基础 代码下载:链接:http://pan.baidu.com/s/1ge6j ...

  5. react router @4 和 vue路由 详解(二)react-router @4用法

    完整版:https://www.cnblogs.com/yangyangxxb/p/10066650.html 2.react-router @4用法 a.大概目录      不需要像vue那样麻烦的 ...

  6. better-scroll的用法,及其中的一个属性event._constructed详解

    better-scroll是一个页面滚动插件,用它可以很方便的实现下拉刷新,锚点滚动等功能. 实现原理:父容器固定高度,并设置overflow:hidden,子元素超出父元素高度后将被隐藏,超出部分可 ...

  7. Jmeter(四十九) - 从入门到精通高级篇 - jmeter使用监视器结果监控tomcat性能(详解教程)

    1.简介 上一篇宏哥讲解了利用jmeter的插件来监控服务器资源,这一篇讲解分享如何使用jmeter的监视器结果监控tomcat性能. 2.准备工作 文章标题中提到jmeter和tomcat,那么只需 ...

  8. Jmeter(五十) - 从入门到精通高级篇 - jmeter 之模拟弱网进行测试(详解教程)

    1.简介 在实际工作中,网络带宽一定不会是持续稳定的保持某一个值,而是有高有低.因此为了测试场景和实际能够无限的接近,所以我们需要模拟一下来达到效果.还有就是在实际的测试工作中,会因为业务需要,有时限 ...

  9. Jmeter(五十二) - 从入门到精通高级篇 - jmeter之跨线程组传递参数(详解教程)

    1.简介 之前分享的所有文章都是只有一个线程组,而且参数的传递也只在一个线程组中,那么如果需要在两个线程组中传递参数,我们怎么做呢?宏哥今天就给小伙伴或者童鞋们讲解一下,如何实现在线程组之间传递参数. ...

随机推荐

  1. IOS searchBar去掉背景

    修改UISearchBar的背景颜色 UISearchBar是由两个subView组成的,一个是UISearchBarBackGround,另一个是UITextField. 要IB中没有直接操作背景的 ...

  2. IOS- 02 零碎知识总结

    1.UIView,UIViewController,UIWindow和CALayer UIView是什么,做什么:UIView是用来显示内容的,可以处理用户事件 CALayer是什么,做什么:CALa ...

  3. IOS - UITableViewCell的选中时的颜色及tableViewCell的selecte与deselecte

    1.系统默认的颜色设置 [cpp] view plaincopy //无色 cell.selectionStyle = UITableViewCellSelectionStyleNone; //蓝色 ...

  4. php正则表达式、数组

    <?php $s = "he8llo5wor6ld"; $s = preg_replace("/\d/","#",$s);按照正则表达 ...

  5. CString 操作

    CString Left( int nCount ) const;                   //从左边1开始获取前 nCount 个字符 CString Mid( int nFirst ) ...

  6. mybatis配置问题

    //当构造函数有多个参数时,可以使用constructor-arg标签的index属性,index属性的值从0开始. <bean id="sqlSession" class= ...

  7. Swift - 获取、改变按钮的标题文本(UIButton点击切换title)

    在开发中,我们常常需要动态地改变按钮标签文字,使用 setTitle() 函数就可以了.有时我们需要在几个标题间切换,比如下面样例所示,按钮点击后按钮文字会在"播放""暂 ...

  8. hdu 4911Inversion

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=4911 题意:给定一个序列和k,求在k次交换之后序列的逆序数,只能相邻两个数交换且只有左边的数大于右边时才能 ...

  9. 前端模板artTemplate,handlerbars的使用心得

    写前端页面肯定离不开模板渲染,就近期项目中用的两个前端模板做一些使用总结,顺便复习一下,也方便后面温故. 1,artTemplate 优点: 1,一般web端用得较多,执行速度通常是 Mustache ...

  10. MVC缓存01,使用控制器缓存或数据层缓存

    对一些浏览频次多.数据量大的数据,使用缓存会比较好,而对一些浏览频次低,或内容因用户不同的,不太适合使用缓存.   在控制器层面,MVC为我们提供了OutputCacheAttribute特性:在数据 ...