TestNG依赖项详解(五)

    每个CASE都不是独立的,这就像同步任务一样,总得有个顺序的过程,自动化测试尤其如此,为什么这样说了?每个测试用例都不是独立

的,都会涉及到不同业务场景之间的关联。再举一个更加简单的案例,就是HTTP的交互,在API的自动化测试中,我们对一个系统的操作,首

先是要进入到这个系统,那么我们就需要获取登录成功后的的token信息,我们才能够对系统做一系列的操作。当然这样的案例还是有很多的。

让我们庆幸的是作为主流的测试框架TestNG它提供的这样的能力,这样我们就可以很完美的在业务中进行整合和应用。在TestNG的框架中,依

赖还是在两个维度来展开,一个是测试用例之间的关系,另外一个是我们可以通过testng.xml配置文件来实现我们的诉求。

    我们先来看依赖性的测试,行代码的角度来深度了解依赖性测试到底是什么,案例代码如下:

package test.depend;

import org.testng.annotations.Test;
import org.testng.Assert;

public class DependTest
{
    @Test(dependsOnMethods = "test_two")
    public void test_one()
    {
        System.out.println("This Is A Test One");
    }

    @Test
    public void test_two()
    {
        System.out.println("This Is A Test Two");
    }
}

 

在如上的代码中可以看到,test_one的测试用例执行是依赖test_two的,那么也就意味了什么,意味了我们在执行test_one的测试用例

的时候,它首先会执行test_two的测试用例,再次执行test_one的测试用例,这就是依赖性。当然在TestNG测试框架中依赖性分为依赖

测试方法和依赖测试组,我们这地方主要是依赖测试方法这部分。我们单独的执行test_one测试用例,其实内部就先执行test_two的测试

用例,然后执行test_one的测试用例,当然如果我们只是执行test_two,因为它没有任何的依赖项,是其他测试用例依赖它,并不是它依

赖其他测试用例,所以单独执行test_two的测试用例,就只会执行test_two的测试用例。如上就是依赖性的实际案例应用。当然实际的业务

可能更加复杂,比如执行一个测试场景,依赖项可能会有多个测试步骤,那么也就是说一个测试用例可以依赖N个测试用例,具体案例代码

如下:

package test.depend;

import org.testng.annotations.Test;
import org.testng.Assert;

public class DependTest
{
    @Test(dependsOnMethods = {"test_two","test_three"})
    public void test_one()
    {
        System.out.println("This Is A Test One");
    }

    @Test
    public void test_two()
    {
        System.out.println("This Is A Test Two");
    }

    @Test
    public void test_three()
    {
        System.out.println("This Is A Test Three");
    }
}

 

再次看如上的代码,可以看到,测试用例test_one依赖test_two和test_three,所以单独的执行test_one后,它的顺序就是test_two->

test_three->test_one,执行后的结果信息如下所示:

 

在如上的测试结果信息中,可以看到执行的结果和我们预期的是一致的。

     在上面讲的都是在同一个类中的测试方法之间的依赖关系,还有一种方式就是继承件的依赖关系,简单点理解就是不同类之间的测试方

法的依赖,我们还是通过具体的案例代码来说明这部分的应用,类DependFather.class的源码为:

package test.depend;


import org.testng.annotations.Test;
import org.testng.Assert;

public class DependFather
{
    @Test()
    public void test_one()
    {
        System.out.println("This Is A Test One");
    }

    @Test
    public void test_two()
    {
        System.out.println("This Is A Test Two");
    }
}

 被继承的类,也就是子类的源码为:

package test.depend;

import org.testng.annotations.Test;

public class DependTest extends DependFather
{
    @Test(dependsOnMethods={"test_one"})
    public void test_four()
    {
        System.out.println("This Is A Test Four");
    }
    @Test
    public void test_five()
    {
        System.out.println("This Is A Test Five");
    }
}

 我们可以看到,子类测试方法test_four依赖的测试方法test_one是基类的测试方法,我们单独执行test_four,它

首先会执行基类的测试方法test_one,再执行子类的测试方法test_four,这也就是通过不同的类来实现继承式的依

赖,这点功能我个人觉得是非常强大的。

     下面我们来看通过组的方式来实现依赖,其实我个人觉得通过组的方式,其实最终本质上还是通过测试方法来

实现的依赖,具体见如下的案例代码:

package test.depend;

import org.testng.annotations.Test;

public class DependGroups
{
    @Test(dependsOnGroups = {"test-group"})
    public void test_one()
    {
        System.out.println("this is a test one");
    }

    @Test(groups = {"test-group"})
    public void test_two()
    {
        System.out.println("this is a test two");
    }

    @Test(groups = {"test-group"})
    public void test_three()
    {
        System.out.println("this is a test three");
    }
}

在如上的案例代码中,我们可以看到,test_two和test_three被分到了test-group的组中,test_one的测试方法依

赖测试组test-group,也就意味着依赖这个组里面所有的测试用例,那么测试用例之间的执行顺序就会TestNG测试

框架的执行顺序了。使用组了功能后,依赖性的功能就会显得特别的强大。

 

posted @ 2021-01-06 22:37  无涯(WuYa)  阅读(516)  评论(0)    收藏  举报