前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TestNG框架之依赖项(五)

TestNG框架之依赖项(五)

作者头像
无涯WuYa
发布2021-04-20 11:27:11
7510
发布2021-04-20 11:27:11
举报
文章被收录于专栏:Python自动化测试

每个CASE都不是独立的,这就像同步任务一样,总得有个顺序的过程,自动化测试尤其如此,为什么这样说了?每个测试用例都不是独立的,都会涉及到不同业务场景之间的关联。再举一个更加简单的案例,就是HTTP的交互,在API的自动化测试中,我们对一个系统的操作,首先是要进入到这个系统,那么我们就需要获取登录成功后的的token信息,我们才能够对系统做一系列的操作。当然这样的案例还是有很多的。让我们庆幸的是作为主流的测试框架TestNG它提供的这样的能力,这样我们就可以很完美的在业务中进行整合和应用。在TestNG的框架中,依赖还是在两个维度来展开,一个是测试用例之间的关系,另外一个是我们可以通过testng.xml配置文件来实现我们的诉求。 我们先来看依赖性的测试,行代码的角度来深度了解依赖性测试到底是什么,案例代码如下:

代码语言:javascript
复制
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个测试用例,具体案例代码如下:

代码语言:javascript
复制
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的源码为:

代码语言:javascript
复制
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");
    }
}

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

代码语言:javascript
复制
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,这也就是通过不同的类来实现继承式的依赖,这点功能我个人觉得是非常强大的。

下面我们来看通过组的方式来实现依赖,其实我个人觉得通过组的方式,其实最终本质上还是通过测试方法来实现的依赖,具体见如下的案例代码:

代码语言:javascript
复制
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测试框架的执行顺序了。使用组了功能后,依赖性的功能就会显得特别的强大。

感谢您的阅读,后续会持续更新!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python自动化测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档