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. @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. }

配置文件:

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

默认的强制依赖:Javacode:

[java] view plain copy

  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() 被跳过了,并没有被执行

[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. SKIPPED: method1
    32. ===============================================
    33. TestngDependOnGroups
    34. Tests run: 3, Failures: 1, Skips: 1
    35. ===============================================
时间: 2024-10-13 13:07:39

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

TestNg依赖详解(二)-----强制依赖与顺序依赖

TestNg使用dependsOnGroups属性来进行依赖测试, 测试方法依赖于某个或某些方法,这个/这些方法作为前置依赖条件 强制依赖:如果被依赖的某一个方法发生了异常,那么之后的方法都不会被执行(默认) 顺序依赖:无论被依赖的方法是否出现异常,后续的方法都会被执行,通过alwaysRun="true"来配置 /** * * <p> * Title: TestngDependOnGroups * </p> * * <p> * Descriptio

三. ServerSocket 用法详解(二) .

在ThreadPool 类中定义了一个LinkedList 类型的 workQueue 成员变量, 它表示工作队列, 用来存放线程池要执行的任务, 每个任务都是 Runnable 实例. ThreadPool 类的客户程序(利用 ThreadPool 来执行任务的程序) 只要调用 ThreadPool 类的execute(Runnable task) 方法, 就能向线程池提交任务. 在 ThreadPool 类的 execute() 方法中, 先判断线程池是否已经关闭. 如果线程池已经关闭, 就

软考之高级系统架构设计师(包含2009-2018历年真题详解+课本教程+论文范文+视频教程)

软考-高级系统架构设计师2009-2018历年考试真题以及详细答案(试题和答案分离的哦),同时含有课本教程.系统架构设计师视频教程.系统架构设计师论文范文.持续更新后续年份的资料.请点赞!!请点赞!!!绝对全部货真价实的资料!!!! 全网最全,独此一家,费心整理,希望各位同学顺利通过考试!!! 高级系统架构师历年真题以及答案解析.希赛第四版教程.最新清华版官方指定教程.论文范文等资源下载地址: 百度网盘: https://pan.baidu.com/s/1LDTJgGkuuNPKZ6K8eEzV

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

better-scroll是一个页面滚动插件,用它可以很方便的实现下拉刷新,锚点滚动等功能. 实现原理:父容器固定高度,并设置overflow:hidden,子元素超出父元素高度后将被隐藏,超出部分可滚动且没有滚动条. 立即使用: <body> <div id="wrapper"> <ul> <li>...</li> <li>...</li> ... </ul> </div> &

TestNg依赖详解(一)------简单的依赖(单一方法依赖)

TestNg依赖测试之简单方法依赖,通过dependsOnMethods属性来配置依赖方法 Java code: /** * * <p> * Title: TestngDependencies * </p> * * <p> * Description: Testng提供了两种依赖实现 * * 1.强制依赖:某个测试用例之前需要执行的依赖链中如果有一个失败,那么接下来所有的测试都不会被执行 * 2.顺序依赖(软依赖):顺序依赖的用处更多是用来检测一个测试链是否按照正确的顺

[转]Mysql导入导出工具Mysqldump和Source命令用法详解

Mysql本身提供了命令行导出工具Mysqldump和Mysql Source导入命令进行SQL数据导入导出工作,通过Mysql命令行导出工具Mysqldump命令能够将Mysql数据导出为文本格式(txt)的SQL文件,通过Mysql Source命令能够将SQL文件导入Mysql数据库中,下面通过Mysql导入导出SQL实例详解Mysqldump和Source命令的用法. 在PHP网站开发中,时常遇到Mysql数据库备份或数据库迁移工作,这时Mysql怎么导入导出数据库中的数据就非常关键,M

JavaScript中SetInterval与setTimeout的用法详解

在写H5游戏时经常需要使用定时刷新页面实现动画效果,比较常用即setTimeout()以及setInterval(),但是大家对SetInterval与setTimeout的用法了解吗,下面通过本文给大家详解js中SetInterval与setTimeout的用法,需要的朋友参考下 setTimeout 描述 setTimeout(code,millisec) setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式. 注:调用过程中,可以使用clearTimeout(id_of_

TestNg依赖详解(三)------灵活的文件配置依赖

配置型的依赖测试,让依赖测试不局限于测试代码中,在XML文件中进行灵活的依赖配置 原创文章,版权所有,允许转载,标明出处:http://blog.csdn.net/wanghantong Javacode: [java] view plain copy /** * * <p> * Title: TestngDependencyOnXML * </p> * * <p> * Description: 不使用注解的情况下,通过对testng-xml来进行依赖配置 * * 执行

iOS自动布局高级用法及纯手码约束写法

本文主要介绍几个我遇到的总结的高级用法(当然我相信肯定有不少比这还高级的). 简单的storyboard中上下左右约束,固定宽高啥的用法在这里就不做赘述了. autolayout自动布局是iOS6以后出现的,但是在开始的一段时间里大家并不怎么会用,都是一上来先勾掉.之后随着5s,iPhone6的出现屏幕多种多样.用多层if来判断尺寸已经完全hold不住了才开始学习自动布局. 在这之前有个叫自动伸缩的autoresizing属性,这个主要用于一个控件和自己父控件之间的关系.只有autolayout