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. autolayout autoresizing

    WWDC 2012 Session笔记——202, 228, 232 AutoLayout(自动布局)入门 这是博主的WWDC2012笔记系列中的一篇,完整的笔记列表可以参看这里.如果您是首次来到本站 ...

  2. Spring面向切面编程(AOP)方式二

    使用注解进行实现:减少xml文件的配置. 1 建立切面类 不需要实现任何特定接口,按照需要自己定义通知. package org.guangsoft.utils; import java.util.D ...

  3. 解决webstorm乱码

    新的web前端学习群,120342833,欢迎大家一起学习,以前在web学习群里的看到了加下..

  4. wc(Word Count)

    .查看文件的字节数.字数.行数 wc test.txt --> 行数 单词数 字节数 文件名 .用来统计当前目录下的文件数(数量中包含当前目录) ls -l | wc -l -c 统计字节数. ...

  5. 浅析_tmain()与main()的区别

    转自http://www.jb51.net/article/34516.htm _tmain()是为了支持unicode所使用的main一个别名,既然是别名,应该有宏定义过的,在哪里定义的呢?就在那个 ...

  6. Mysql游标

    14.6.6.1 Cursor CLOSE Syntax 14.6.6.2 Cursor DECLARE Syntax 14.6.6.3 Cursor FETCH Syntax 14.6.6.4 Cu ...

  7. Angular.JS

    AngularJS是什么? 完全使用 JavaScript编写的客户端技术.同其他历史悠久的 Web技术( HTML. CSS 和JavaScript)配合使用,使Web应用开发比以往更简单.更快捷. ...

  8. 常用iOS的第三方框架

    图像:1.图片浏览控件MWPhotoBrowser       实现了一个照片浏览器类似 iOS 自带的相册应用,可显示来自手机的图片或者是网络图片,可自动从网络下载图片并进行缓存.可对图片进行缩放等 ...

  9. 使用C与C++混合编程封装UDP协议

    引入头文件,导入lib文件 #include <stdio.h> #include <stdlib.h> #include <string.h> #include ...

  10. WMI测试

    https://social.msdn.microsoft.com/Forums/windowshardware/zh-CN/c5af7959-95d3-4e1b-ab40-96a2a31c2af2/ ...