TestNG学习-依赖

简介: TestNG学习-依赖

背景:

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

  • 在运行更多测试方法之前,请确保一定数量的测试方法已经完成并成功。
  • 在希望将初始化的方法也用作测试方法的同时初始化测试项目。


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

1. 使用注解指定依赖

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

   有两种依赖关系:

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

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

   强依赖的示例:

@Test
public 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>属性包含以空格分隔的组列表。


   See you tomorrow~


相关文章
|
Java 测试技术 API
Junit5单元测试框架详解
前面我们学习了Selenium自动化测试框架,但是有的时候测试用例会很多,我们需要一个工具来管理这些测试用例,而Junit就是一个很好的管理工具,简单点来说,Junit就是一个针对Java的单元测试框架;
192 0
|
Java 测试技术 Spring
Gradle从0入门到实战系列【八】SpringBoot集成Junit单元测试
JUnit 是一个 Java 编程语言的单元测试框架。JUnit 在测试驱动的开发方面有很重要的发展,是起源于 JUnit 的一个统称为 xUnit 的单元测试框架之一。
1673 1
Gradle从0入门到实战系列【八】SpringBoot集成Junit单元测试
|
4月前
|
Java 测试技术 Maven
单元测试问题之在Maven项目中引入JUnit 5和Mockito的依赖如何解决
单元测试问题之在Maven项目中引入JUnit 5和Mockito的依赖如何解决
263 1
|
4月前
|
前端开发 Java 测试技术
单元测试问题之在Spring MVC项目中添加JUnit的Maven依赖,如何操作
单元测试问题之在Spring MVC项目中添加JUnit的Maven依赖,如何操作
|
7月前
|
XML Java 测试技术
TestNG 与 JUnit 测试框架:哪个更好?
【2月更文挑战第16天】
310 1
TestNG 与 JUnit 测试框架:哪个更好?
|
Java 测试技术
Springboot集成JUnit5优雅进行单元测试
Springboot集成JUnit5优雅进行单元测试
147 0
|
Java
【Java项目】Mapstruct的使用以及使用过程中遇到的各种问题的解决
【Java项目】Mapstruct的使用以及使用过程中遇到的各种问题的解决
556 0
|
Java 测试技术 开发者
Junit单元测试框架【基础篇】
Junit单元测试框架【基础篇】
Junit单元测试框架【基础篇】
|
XML Java 测试技术
TestNG学习(一)
TestNG学习(一)
|
SQL Java 测试技术
秒懂如何使用SpringBoot+Junit4进行单元测试(下)
秒懂如何使用SpringBoot+Junit4进行单元测试(下)