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. 【Git】笔记4 分支管理1

    1.创建与合并分支 一开始的时候,master分支是一条线,Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点: 每次提交,master分支都会向 ...

  2. 【XLL API 函数】xlAbort

    C API 中有 15个 Excel 回调函数只能使用 Excel4.Excel4v.Excel12.Excel12v 函数调用(或间接的使用框架函数 Excel 或 Excel12f 调用).也就是 ...

  3. 【XLL API 函数】xlfUnregister (Form 2)

    此函数可以被 Excel 已经载入的 XLL 或 DLL 调用.它等效于宏表函数 UNREGISTER. xlfUnregister 有两种调用形式: 形式1:Unregister 单独的命令或函数 ...

  4. 电子现金、电子钱包、qPBOC、闪付、UPCash

    一.关于金融IC卡领域的规范 由Europay.Mastercard.Visa三大国际信用卡组织联合制定的金融集成电路(IC)卡金融支付标准,称为EMV规范,其目的是为金融IC卡.金融终端.支付系统以 ...

  5. 关于Windows下的文件后缀名问题

    一.背景说明 有很多的小伙伴对windows下的文件后缀名不能很好地理解作用和区别,更不用说高深的使用了,在这里给大家说一下这些文件后缀名到底有什么区别,有什么作用呢? 二.说明 简单的说来,wind ...

  6. [Java 基础] 使用java.util.zip包压缩和解压缩文件

    reference :  http://www.open-open.com/lib/view/open1381641653833.html Java API中的import java.util.zip ...

  7. 第K 小数

    [问题描述]有两个正整数数列,元素个数分别为N和M.从两个数列中分别任取一个数相乘,这样一共可以得到N*M个数,询问这N*M个数中第K小数是多少.[输入格式]输入文件名为number.in.输入文件包 ...

  8. INNODB

    INNODB,是Mysql5.7的默认存储引擎,是事务安全的,支持ACID,具有提交,回滚和crash-recovery[灾备]能力,以保护用户数据. 优势:一旦Server崩溃,Innodb会自动保 ...

  9. 与你相遇好幸运,Linux常用命令

    开机挂载硬盘 cat  /etc/fstab /dev/sda1  /mnt/sda1 ext3    defaults    0  0 挂载硬盘 mount  /dev/sdb5 /home/dis ...

  10. Faster-rnnlm代码分析2 - HSTree的构造

    也就是构造一棵Huffman Tree,输入是按照词汇频次由高到低排序的 采用层次SoftMax的做法,是为了使得训练和预测时候的softmax输出加速,原有multinomal softmax,是和 ...