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. 【leetcode】Best Time to Buy and Sell (easy)

    题目: Say you have an array for which the ith element is the price of a given stock on day i. If you w ...

  2. struts配置文件中如何从一个package的action跳到另一个package中的某个action

    <package name="pack1" namespace="/test1" extends="struts-default"&g ...

  3. IOS- 数据存储

    在iOS开发过程中,不管是做什么应用,都会碰到数据保存的问题.将数据保存到本地,能够让程序的运行更加流畅,不会出现让人厌恶的菊花形状,使得用户体验更好.下面介绍一下数据保存的方式: 1.NSKeyed ...

  4. weblogic重置用户名密码。

    说明:%DOMAIN_HOME%:指WebLogic Server 域(Domain)目录 例如我的做测试的域的根目DOMAIN_HOME=D:\bea\user_projects\domains\b ...

  5. DO语句与SELECT语句,HANDLER语句

    DO语句,只执行语句不返回结果:SELECT 既执行语句也返回结果. HANDLER的效率会更好. HANDLER 语句比SELECT 语句更快: 1,HANDLER只需OPEN一次,能重用,不须每次 ...

  6. VGA信号一些分辨率的参数(摘抄)

    摘抄自:http://group.chinaaet.com/273/4100029440 VGA的接口时序如图所示,场同步信号VSYNC在每帧(即送一次全屏的图像)开始的时候产生一个固定宽度的高脉冲, ...

  7. Android ANR分析(2)

    转自:http://blog.csdn.net/ruingman/article/details/53118202   定义 主线程在特定的时间内没有做完特定的事情 常见的场景 A.input事件超过 ...

  8. How to increase TX Power Signal Strength of WiFi

    转自:https://www.blackmoreops.com/2013/10/27/how-to-increase-tx-power-signal-strength-of-wifi/ This gu ...

  9. Oracle如何写出高效的SQL

    转载:http://www.blogjava.net/ashutc/archive/2009/07/19/277215.html 1.选择最有效率的表明顺序(只在基于规则的优化器中有效) Oracle ...

  10. Spell checker

     Spell checker Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Subm ...