前言
由于快到金九银十了,笔者最近呢发的都是一些有关面试方面的文章,有需要的小伙伴可以看看笔者的文章希望可以帮助到大家,今天呢笔者想和大家来聊聊在面试中被问到怎么处理接口依赖改怎么回答,废话就不多说了咱们直接进入主题哈。
接口依赖
面试的时候经常会被问到在接口自动化测试过程中怎么处理接口依赖?
首先我们要搞清楚什么是接口依赖。
1. 什么是接口依赖
接口依赖指的是,在接口测试的过程中一个接口的测试经常需要依赖另一个或多个接口成功请求后的返回数据。
那怎么处理呢?不同场景的处理方式有所不同。
2. 接口依赖的多种场景
2.1 单接口测试
在单接口测试时接口依赖有两种场景。
- 在整个接口用例测试前的依赖
- 例如:需要登录后的接口,需要在测试前先访问登录接口获取对应的鉴权凭证,例如token。
- 在接口的每一个用例测试前的依赖
- 例如:项目审核接口,需要在每次测试前都创建一个项目
2.2 业务流测试
多接口测试业务流时,下一个接口依赖上一个接口的执行结果。
3. 解决方案
不同场景下的解决方案不同。我们在做接口自动化时不管是python语言还是java语言,都会使用单元测试框架。这里我们主要以python的unittest框架为主,不同框架只是实现方式有所不同,但是思想架构都大同小异。
不管是那种场景的接口依赖都可以通过单元测试框架的前置条件/脚手架代码进行处理,不同的是如何传递依赖的数据。几乎是所有的单元测试框架中用例都被设计成隔离的,也即是用例对象和用例对象间是隔离的,独立的。所以传递依赖数据需要一个第三方容器。一般有两种方案:
- 定义一个全局变量来共享
- 通过当前测试用例类的类属性共享
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
4. 回答
了解了上面的类容,我们来总结一下,接口自动化时怎么处理接口依赖这个问题的回答如下:
对于单接口测试如果依赖接口只需要在测试开始执行一次,那么可以将依赖接口的请求放在类级前置方法中,然后通过全局变量或者当前用例类属性来传递依赖数据。
对于单接口测试如果依赖接口需要在每个用例前执行,那么可以将依赖接口的请求放在方法级前置方法中,然后通过用例对象属性来传递依赖数据
对于多接口的业务流测试,可以将下一个接口需要依赖的数据通过当前用例类属性来传递依赖数据。
总结:
感谢每一个认真阅读我文章的人!!!
作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。
软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。