img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

不同场景下的解决方案不同。

我们在做接口自动化时不管是 python 语言还是 Java 语言,都会使用单元测试框架。这里我们主要以 python 的 unittest 框架为主,不同框架只是实现方式有所不同,但是思想架构都大同小异。

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

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

1,定义一个全局变量来共享

2,通过当前测试用例类的类属性共享

3.1 单接口测试场景 1 解决方案

在整个接口用例测试前的依赖,我们放在 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()

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

3.2 单接口测试场景 2 解决方案

在接口的每一个用例测试前的依赖,放到 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()

3.3 业务流测试场景解决方案

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

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
**04.总结**

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

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

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

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

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走!

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

4f45ff00ff254613a03fab5e56a57acb)**

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

Logo

一站式 AI 云服务平台

更多推荐