高频面试题/面试经常被问到怎么处理接口依赖该怎么回答

news/2025/2/6 7:04:03/

前言

由于快到金九银十了,笔者最近呢发的都是一些有关面试方面的文章,有需要的小伙伴可以看看笔者的文章希望可以帮助到大家,今天呢笔者想和大家来聊聊在面试中被问到怎么处理接口依赖改怎么回答,废话就不多说了咱们直接进入主题哈。

接口依赖

面试的时候经常会被问到在接口自动化测试过程中怎么处理接口依赖?

首先我们要搞清楚什么是接口依赖。

1. 什么是接口依赖

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

那怎么处理呢?不同场景的处理方式有所不同。

2. 接口依赖的多种场景

2.1 单接口测试

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

  1. 在整个接口用例测试前的依赖
  2. 例如:需要登录后的接口,需要在测试前先访问登录接口获取对应的鉴权凭证,例如token。
  3. 在接口的每一个用例测试前的依赖
  4. 例如:项目审核接口,需要在每次测试前都创建一个项目

2.2 业务流测试

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

3. 解决方案

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

不管是那种场景的接口依赖都可以通过单元测试框架的前置条件/脚手架代码进行处理,不同的是如何传递依赖的数据。几乎是所有的单元测试框架中用例都被设计成隔离的,也即是用例对象和用例对象间是隔离的,独立的。所以传递依赖数据需要一个第三方容器。一般有两种方案:

  1. 定义一个全局变量来共享
  2. 通过当前测试用例类的类属性共享

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

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

import unittestdef do_something():"""模拟表示前置接口"""return 3.14# 定义一个全局变量类class EnvData:passclass SomeTestCase(unittest.TestCase):@classmethoddef setUpClass(cls) -> None:# 执行前置操作data = do_something()# 将data绑定到全局变量类的类属性上EnvData.data = data# 将data绑定到当前类的类属性上cls.data = datadef 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 unittestdef do_something():"""模拟表示前置接口"""return 3.14class SomeTestCase(unittest.TestCase):def setUp(self) -> None:# 执行前置操作data = do_something()# 将data绑定到当前对象的属性上self.data = datadef test_something(self):print('执行测试')# 获取前置方法中产生的数据# 从对象属性中获取print(self.data)if __name__ == '__main__':unittest.main()

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

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

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

4. 回答

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

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

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

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

最后: 为了回馈铁杆粉丝们,我给大家整理了完整的软件测试视频学习教程,朋友们如果需要可以自行免费领取 【保证100%免费】

在这里插入图片描述

全套资料获取方式:点击下方小卡片自行领取即可


http://www.ppmy.cn/news/435470.html

相关文章

day53_spring

今日内容 零、 复习昨日 零、 复习昨日 略 一、代理设计模式 代理的设计理念是限制对象的直接访问,即不能通过 new 的方式得到想要的对象,而是访问该对象的代理类。 这样的话,我们就保护了内部对象,如果有一天内部对象因为 某个原…

腾讯王者荣耀AI论文首次曝光:五AI王者局开黑与人类战队打成平手

夏乙 问耕 发自 凹非寺量子位 出品 | 公众号 QbitAI 王者峡谷可能马上要被AI支配了! 腾讯刚刚发布的一篇论文显示,王者荣耀AI在不声不响间,又掌握了新的技能:组团开黑。而且战绩不俗。 5个各自独立的王者荣耀AI学会开黑技能后&…

王者荣耀AI即将上线,队友再也不用担心你掉线了

李根 发自 凹非寺 量子位 报道 | 公众号 QbitAI 腾讯确实在让AI打王者荣耀。 不过并非实际参与在线竞技,而是专门开发了一个王者荣耀AI,并已经取得了不错的突破,将在近期真正让玩家实际体验到。 腾讯AI资深专家研究员、NLP技术中心副总监张…

C语言学习笔记:函数

✨博文作者:烟雨孤舟 💖 喜欢的可以 点赞 收藏 关注哦~~ ✍️ 作者简介: 一个热爱大数据的学习者 ✍️ 笔记简介:作为大数据爱好者,以下是个人总结的学习笔记,如有错误,请多多指教! 目录 简介 …

阿里巴巴最新30万字1008道Java经典面试题总结(附答案)限时开源

前言 在备战面试的时候,大家总会通过刷题的方式来准备,然而刷题是有用没错,有时候还得看看押题能不能压中重点,大厂喜欢问些什么技术点,不然当那个笑眯眯的面试官问出那些你再熟悉不过的问题 Java 问题时,…

uniapp中使用mixins(混入)使用

mixins 选项接收一个混入对象的数组。这些混入对象可以像正常的实例对象一样包含实例选项,这些选项将会被合并到最终的选项中,使用的是和 Vue.extend() 一样的选项合并逻辑。也就是说,如果你的混入包含一个 created 钩子,而创建组…

LightningChart .NET 10.5.1 Crack LightningChart 2023

LightningChart .NET v.10.5.1 已经发布! DataCursor 和 3D TransparencyRenderMode 现在可用。 为所有 3D、Polar 和 Smith 系列启用 DataCursor 在早期阶段,LightningChart 提供了不同的工具,需要用户编写额外的代码才能启用数据跟踪功能。…

mysql日期自动加1天

 UPDATE mytable SET time2 DATE_ADD(time1,INTERVAL 1 DAY) WHERE status1