背景:

有时,需要按特定顺序调用测试方法。例如:

  • 在运行更多测试方法之前,请确保一定数量的测试方法已经完成并成功。

  • 在希望将初始化的方法也用作测试方法的同时初始化测试项目。

TestNG允许使用注解或XML指定依赖项。

1. 使用注解指定依赖

    可以使用@Test注解中的属性 dependsOnMethods 或dependsOnGroups。

    有两种依赖关系:

    强依赖。所依赖的所有方法都必须已经运行并成功运行。如果依赖项中至少发生了一次故障,则不会调用它并将其标记为SKIP。

 弱依赖。即使其中一些方法失败了,也会始终在所依赖的方法之后运行。如果想确保测试方法以特定顺序运行但它们的成功并不真正取决于其他方法的成功时,这将非常有用。通过在@Test批注中添加“ alwaysRun = true”来获得弱依赖性。

强依赖的示例:

@Testpublic void serverStartedOk() {} @Test(dependsOnMethods = { "serverStartedOk" })public void method1() {}

在这个示例中,method1()被声明为依赖于方法serverStartedOk(),这保证了将始终优先调用serverStartedOk()。

也可以依赖整个组:​​​​​​​

@Test(groups = { "init" })public void serverStartedOk() {} @Test(groups = { "init" })public void initEnvironment() {} @Test(dependsOnGroups = { "init.*" })public void method1() {}

在这个示例中,method1()被声明为依赖于与正则表达式“ init.*”匹配的任何组,这保证了将始终在method1()之前调用方法serverStartedOk()和initEnvironment()。

注意:如之前所述,在同一个测试项目运行中,不能保证属于同一组的方法的调用顺序是相同的。

如果依赖的方法失败并且有严格的依赖关系(alwaysRun = false,这是默认设置),则依赖于该方法的方法不会标记为FAIL,而是会标记为SKIP。跳过的方法也将在最终报告中展示(在HTML中既不是红色也不是绿色),因为跳过的方法不一定会失败(标有@ Before / After的方法将不展示在最终报告中)。

    DependsOnGroups和dependsOnMethods

DependsOnGroups和dependsOnMethods都接受正则表达式作为参数。对于dependsOnMethods,如果依赖于一个碰巧具有多个重载版本的方法,则将调用所有重载方法。如果只想调用重载方法之一,则应使用dependsOnGroups。

默认情况下,从属方法按类分组。例如,如果方法b()依赖于方法a(),并且有几个包含这些方法的类实例(如果涉及data provider和factory),则调用顺序如下:

a(1)a(2)b(2)b(2)

在所有实例都调用完其a()方法之前,TestNG不会运行b()。

但是在某些情况下,例如在测试登录和退出Web浏览器的情况下,可能不希望出现上述行为。在这种情况下,应该需要如下顺序:​​​​​​​

signIn("us")signOut("us")signIn("uk")signOut("uk")

可以使用XML属性group-by-instances实现。 该属性在<suite>或<test>上有效:​​​​​​​

  <suite name="Factory" group-by-instances="true">or  <test name="Factory" group-by-instances="true">

2. 使用XML指定依赖

可以在testng.xml文件中指定组依赖性。使用<dependencies>标记来实现此目的:​​​​​​​

<test name="My suite">  <groups>    <dependencies>      <group name="c" depends-on="a  b" />      <group name="z" depends-on="c" />    </dependencies>  </groups></test>

<depends-on>属性包含以空格分隔的组列表。

TestNG学习-依赖的更多相关文章

  1. TestNG学习-001-基础理论知识

    此 文主要讲述用 TestNG 的基础理论知识,TestNG 的特定,编写测试过程三步骤,与 JUnit4+ 的差异,以此使亲对 TestNG 测试框架能够有一个简单的认知. 希望能对初学 TestN ...

  2. TestNG学习-002-annotaton 注解概述及其执行顺序

    此文主要讲述用 TestNG 基础的 annotation (注解)知识,及其执行的顺序,并通过一个 TestNG 简单的实例演示 annotation 的执行顺序. 希望能对初学 TestNG 测试 ...

  3. 迟到的 WPF 学习 —— 依赖项属性

    本章学习依赖项属性,英文原文 Dependency Property,它是传统 .Net Framework 属性的扩展,是 WPF 的专属,但所幸使用起来和传统属性几乎一样.WPF 元素所提供的大多 ...

  4. Java自动化测试框架-09 - TestNG之依赖注入篇 (详细教程)

    1.-依赖注入 TestNG支持两种不同类型的依赖项注入:本机(由TestNG本身执行)和外部(由诸如Guice的依赖项注入框架执行). 1.1-本机依赖项注入 TestNG允许您在方法中声明其他参数 ...

  5. testng学习-before&after,parameters,并行,factory,beanshell,监听器,依赖注入

    一系列的before after的操作测试 [TestNG] Running: C:\Users\user\AppData\Local\Temp\testng-eclipse-1538841744\t ...

  6. testNG 学习笔记 Day 1 使用功能详解

    TestSuite处理测试用例有6个规约(否则会被拒绝执行测试) A 测试用例必须是公有类(Public) B 测试用例必须继承与TestCase类 C 测试用例的测试方法必须是公有的( Public ...

  7. TestNg 7.依赖测试

    我本个测试方法执行的时候,依赖于其他的方法.用到关键字dependsOnmethods(依赖于那个方法)也有依赖于哪个组(dependsOnGroups). 看以下的一段代码: package com ...

  8. Java接口自动化测试之TestNG学习(二)

    在maven项目的pom.xml文件中导入TestNG <?xml version="1.0" encoding="UTF-8"?> <pro ...

  9. TestNG—学习笔记2

    关于TestNG,也是一边学一边总结,对于TestNG和Junit的比较其实也没有什么意义,都是一种测试框架,都是为了应用而生的东西,没有必要说谁好谁不好了.用的熟练用的好就是真的好啊. 下面简单的总 ...

随机推荐

  1. jvm源码解析java对象头

    认真学习过java的同学应该都知道,java对象由三个部分组成:对象头,实例数据,对齐填充,这三大部分扛起了java的大旗对象,实例数据其实就是我们对象中的数据,对齐填充是由于为了规则分配内存空间,j ...

  2. JavaScript中函数的定义!

    JavaScript中函数的定义! 1 自定义函数(命名函数) function fun() {}; 2 函数表达式(匿名函数) var fun = function () {}; 3 利用 new ...

  3. Bitter ORM NETCORE ORM 全网最粗暴简单易用高性能的 NETCore ORM 开源了

    开源的来了,懒人程序员的福音,.NET 生态闭环太缺开源精神了, 拥抱开源! 前言: 本人不是不喜欢现有ORM的轮子,而是发现现有的ORM 的都不太符合开发人员的一些习惯.现有的ORM 要么功能太冗余 ...

  4. oblet

      oblet - The Go Programming Language https://golang.google.cn/search?q=oblet // put enqueues a poin ...

  5. React中组件间通信的方式

    React中组件间通信的方式 React中组件间通信包括父子组件.兄弟组件.隔代组件.非嵌套组件之间通信. Props props适用于父子组件的通信,props以单向数据流的形式可以很好的完成父子组 ...

  6. Kafka Fetch Session剖析

    1.概述 最近有同学留言在使用Kafka的过程中遇到一些问题,比如在拉取的Topic中的数据时会抛出一些异常,今天笔者就为大家来分享一下Kafka的Fetch流程. 2.内容 2.1 背景 首先,我们 ...

  7. HTML5 初学者一步一步攀爬 努力加油学习

    Html 5 Html:Hyper Text MarKup Language超文本标签语言 Html:网页的源码 浏览器:"解释和执行"HTMl源码的工具 Head 标签内的信息用 ...

  8. MVC架构 项目实践

    MVC MVC架构程序的工作流程 springmvc 中dao层和service层的区别 项目实践 项目目录 项目实现流程 JSP登录页面View层 LoginServletjavaControlle ...

  9. 排查 Linux 系统运行速度慢

    排查 Linux 系统运行速度慢 一.检查CPU信息 二.使用top检查cpu负载 三.iotop进行检查 四.检查启动的服务 五.free检查闲置内存空间 一.检查CPU信息 在 Linux 系统中 ...

  10. Java模板引擎Freemarker

    Java模板引擎Freemarker 1.取值(插值)指令 2.逻辑指令:if.switch 3.字符串.集合操作 4.自定义函数 5.list排序内建函数.常用指令 6.自定义指令 7.freema ...