全网最火爆,Python接口自动化测试-接口依赖处理解决方案(超详细)


前言

接口依赖指的是,在接口测试的过程中一个接口的测试经常需要依赖另一个或多个接口成功请求后的返回数据。

那如何处理呢?不同场景的处理方式有所不同。

不管是那种场景的接口依赖都可以通过单元测试框架的前置条件/脚手架代码进行处理,不同的是如何传递依赖的数据。

Python接口自动化测试:https://www.bilibili.com/video/BV16G411x76E/

几乎是所有的单元测试框架中用例都被设计成隔离的,也即是用例对象和用例对象间是隔离的,独立的。所以传递依赖数据需要一个第三方容器。

两种方案:
定义一个全局变量来共享
通过当前测试用例类的类属性共享

单接口测试
在单接口测试时接口依赖有两种场景。

1、在整个接口用例测试前的依赖
例如:需要登录后的接口,需要在测试前先访问登录接口获取对应的鉴权凭证,例如token。

2、在接口的每一个用例测试前的依赖
例如:项目审核接口,需要在每次测试前都创建一个项目

单接口测试场景(解决方案一)

在整个接口用例测试前的依赖,我们放在unittest框架的类级前置方法setUpClass中进行处理。数据传递通过全局变量和类属性进行共享都可以。
代码示例如下:

import unittest


def do_something():
    """
    模拟表示前置接口
    """
    return 3.14


# 定义一个全局变量类
class EnvData:
    pass


class SomeTestCase(unittest.TestCase):

    @classmethod
    def setUpClass(cls) -> None:
        # 执行前置操作
        data = do_something()
        # 将data绑定到全局变量类的类属性上
        EnvData.data = data
        # 将data绑定到当前类的类属性上
        cls.data = data

    def test_something(self):
        print('执行测试')
        # 获取前置方法中产生的数据
        # 从全局变量中获取
        print(EnvData.data)
        # 从当前用例的类属性中获取
        print(self.__class__.data)
        # 如果当前用例对象没有同名对象属性,也可以直接从对象属性中获取
        print(self.data)

if __name__ == '__main__':
    unittest.main()

推荐使用类属性进行传递。

单接口测试场景(解决方案二)

在接口的每一个用例测试前的依赖,放到unittest框架的方法级前置方法setUp中进行处理。数据可以通过全局变量,类属性,对象属性进行传递,推荐使用对象属性。
代码示例如下:

import unittest


def do_something():
    """
    模拟表示前置接口
    """
    return 3.14


class SomeTestCase(unittest.TestCase):

    def setUp(self) -> None:
        # 执行前置操作
        data = do_something()
        # 将data绑定到当前对象的属性上
        self.data = data

    def test_something(self):
        print('执行测试')
        # 获取前置方法中产生的数据
        # 从对象属性中获取
        print(self.data)

if __name__ == '__main__':
    unittest.main()

业务流测试

多接口测试业务流时,下一个接口依赖上一个接口的执行结果。

业务流测试场景解决方案

业务流测试时,需要将前一个用例的结果传递给后面的用例。因为用例间是隔离的,所以可以通过全局变量和类属性进行传递。
代码示例如下:

import unittest

# 定义一个全局变量类
class EnvData:
    pass


class SomeTestCase(unittest.TestCase):
  
    def test_01case(self):
        # 模拟接口返回需要传递的数据
        res1 = 1
        # 将需要传递的数据保存到全局变量类的属性中
        EnvData.res1 = res1
        # 也可以绑定到当前用例类中进行传递
        self.__class__.res1 = res1
  
    def test_02case(self):
        # 获取上一个接口传递的数据
        # 通过全局变量类获取
        res1 = EnvData.res1
        # 通过类属性获取
        res1 = self.__class__.res1
        # 如果没有同名的对象属性也可以直接通过对象属性获取
        res1 = self.res1

了解了上面的类容,我们来总结一下,接口自动化时怎么处理接口依赖这个问题的回答如下:

对于单接口测试如果依赖接口只需要在测试开始执行一次,那么可以将依赖接口的请求放在类级前置方法中,然后通过全局变量或者当前用例类属性来传递依赖数据。

对于单接口测试如果依赖接口需要在每个用例前执行,那么可以将依赖接口的请求放在方法级前置方法中,然后通过用例对象属性来传递依赖数据

对于多接口的业务流测试,可以将下一个接口需要依赖的数据通过当前用例类属性来传递依赖数据。

下面是我整理的2023年最全的软件测试工程师学习知识架构体系图

一、Python编程入门到精通

请添加图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

如果放弃太早,你永远都不知道自己会错过什么。活着不是靠泪水搏取同情,而是靠汗水获得掌声。耐心点,坚强点;总有一天,你承受过的疼痛会有助于你。

不要抱怨生活,就算是生活的不如意,就算你生活在最底层,就算你一无所有又如何,毕竟你还活着,还拥有自我,这已是最大的幸运。

梦想这个东西,放在心中越重,离现实越远,不要等着天上掉馅饼,也不要奢望上天对你的同情,唯有去努力,才有可能看见一片新的天空。

猜你喜欢

转载自blog.csdn.net/m0_70102063/article/details/129780472