一文详解!接口自动化的关键思路和解决方案

news2024/11/18 9:28:49

目录

引言

正文

一.接口传参

二. 外部数据源

三. 测试断言

四. 环境切换

五. 批量测试

总结

一.接口自动化的工具思维和测试思维

二.贯穿整个接口自动化项目的三个基本思路:


引言

与UI相比,接口一旦研发完成,通常变更或重构的频率和幅度相对较小。因此做接口自动化的性价比更高,通常运用于迭代版本上线前的回归测试中。

手工做接口测试,测试数据和参数都可以由测试人员手动填写和更新。

因此我们在考虑将接口用例实现自动化的时候,主要思路就是在单个接口请求的测试用例已经完成的前提下,我们如何解决以下问题:

  1. 业务测试场景会调用不止一个接口,下一个接口的请求依赖于上一个接口的数据,需要解决接口依赖问题

  2. token等鉴权数据有过期时间,多个接口用到该参数,需要解决一次修改,多处生效的问题

  3. 一个接口要用到多个测试数据做覆盖

  4. 批量测试下,需要知道某个接口返回的参数/数据是否符合预期

本文使用的自动化接口测试工具为Apifox,官网下载地址:www.apifox.cn 直接下载注册安装后即可使用。 接下来依次讲解下上述问题如何使用apifox解决。

正文

一.接口传参

举一个常见的场景说明。查询接口请求获取数据的时候,需要带一个access_token的参数,而access_token参数需要另外的鉴权接口获取。因此需要鉴权接口将获取到的token参数传递给查询接口,查询接口才能发起请求。

另一个常见的场景是,用户需要先登陆,才能将选中的商品加入购物车。 这个接口顺利发起请求依赖于上一个接口获取数据。 手动测试的情况下,直接人工复制即可。

解决方案: 需要将上一个接口返回的数据进行识别提取出目标参数,保存为全局变量,下一个接口直接调用参数。

步骤: 1)在apifox的接口tab-后置操作tab,选择提取变量

2)填写变量名称,变量类型和提取的表达式。提取表达式符合json path 语法。在本接口数据中由于返回数据只有一层,因此采用$.目标参数的方式提取。 如果有多层参数,可以点击提取表达式旁边的问号,查看详细的json path语法。

获取到的参数以变量的形式存储,点击接口tab右上角的设置图标,可以查看到获取到的环境变量的值。

接着就可以在下一个接口,以参数的方式调用:

二. 外部数据源

一些post数据给后台处理的接口,需要对上传不同的数据来测试接口的返回和异常兼容,一个接口参数需要多次使用不同的数据。 手动情况下我们可以直接在参数里填数据,之后每次手动改。

但如果实现自动化的话,像上述的测试方式难以实现。 常用的解决方案是先编辑好csv文件,将测试数据一一写好保存,最后传入到接口请求参数中。 Apifox在这个问题上提供的解决方案为:a.对于少量的测试数据,可在界面内填好测试数据集供接口每次调用;如果是大量的数据,才使用csv文件;更少量的数据则可以直接写在全局变量中。

以全局变量的方式导入和上节讲到的接口传参类似,区别只在于测试数据不是从上一个接口获取到而是的我们自己填进去的。 若是使用外部测试数据集,在测试管理tab>用例界面右侧,有一个测试数据的开关项,打开即可导入测试数据。当然首先需要先把用例导入到测试步骤中来。

如图所示,我已经将OCRtest(文本识别接口,功能为识别图片上的文字)接口导入用例步骤中,启用了外部测试数据,

接着点击管理测试数据,跳转到测试数据tab:

在这个界面开始 新建/导入测试数据。此处数据集名称是给测试人员识别的,不会传入到接口里,一个数据集(1行)代表该次运行中所有需要传入的测试数据,列名作为接口参数,接口每次发起请求,会依次调用该列下的其中一个值。

运行时,每一条测试数据都会当成一条测试用例来运行。

在上面讲到的“接口参数传递”和“传入测试数据”两个的思路是一样的,依赖于apifox提供的参数化功能,上传的数据参数以外部数据集的形式与接口分隔开来,将关键字段,不断变化的数据抽取出来独立于单个接口;

配置完成之后,接口每次运行都能够自行生成,传递和导入关键数据,如果需要修改,只需要在一个地方,一个文件内批量修改就能够全局生效。 这其中有软件工程中的抽象和封装思想,而接下来会讲到的断言是另一种思路。

三. 测试断言

手工运行测试人员可以自行看接口请求是否成功,数据是否正常,但在自动化实践中,我们则需要代码帮我们判断实际返回和期望返回是否匹配。

http响应文本是高度结构化的,因此我们的期望返回无非是header和body中的响应状态码,关键字段,和关键值应该为某个值。只需要判断这些字段是否我们想要的即可。

断言是专门用来验证输出与期望是否匹配的工具,在测试实践中,我们一般通过比较实际输出值和输入值来校验的,即我们要判断返回数据“是否存在”“是否包含”“数据是否等于”“文本是否等于”。

因此判断用例请求结果的实现方案可分为三个要素:判断对象,校验方法,校验值与期待值。

思路明确了,接下来看如何用脚本/功能实现。Apifox的断言功能面板(路径:接口tab>运行>后置操作>断言)的可断言对象包括了响应数据中的JSON,html和xml,header,cookie,基本上可以满足我们的要求。

校验的方法为断言对象的值是否符合测试人员规定的值范围

被校验的值可通过json path 表达式提取

那么像对状态码的判断,某个确定返回值的校验这个,可以直接使用apifox提供的功能面板进行操作就行了。如果测试人员想要更加灵活的断言方式需要在后置操作里选择自定义脚本。

对于不太熟悉脚本的测试人员,可以使用Apifox右侧提供的代码模板,点击就会添加到左侧的脚本编辑面板里,基本上只需要修改断言的期望值就行了,难度不大。

如果是对单个接口做测试,断言结果会直接在响应tab返回

如果是批量测试,在测试结果里会显示断言结果:

这样我们构建接口自动化用例中的“结果判断”的问题就解决了。

四. 环境切换

接口在测试服测试通过之后还需要一轮线上验证,测试任务才算完成。

通常测试服和正式服的的区别只在于前置URL不同。为了让线上验证环节不耗费太多重复活动,我们这里可以在自动化项目开始构建的时候就先利用apifox提供的功能进行配置。 将项目里所有接口共用的http协议和域名配置到前置URL中,接口地址只填资源路径和参数。

进行线上验证时,将参数配置和数据配置同步更新/切换为线上数据配置之后,只需要在运行环境里切换环境,就可以进行线上验证。

五. 批量测试

  1. 用例组织形式 apifox里,用例是以测试用例--用例组--测试套件的形式组织的。 一个测试用例可容纳多个测试步骤,一个接口请求为一个步骤。 接口用例可直接从接口用例导入。如果设置和接口同步,那么接口一旦变更,测试用例这边也会同步变更。

一个常规用例步骤如下,涉及多个接口,接口之间存在参数传递,多个接口完成一个业务场景的测试。

接口用例导入完毕之后,进行测试参数配置,点击运行即可自动运行。

2.用例执行顺序

在一条测试用例里,接口请求的顺序由上到下依次执行,如果需要变更接口请求的步骤,只需要拖动接口移动到新的位置上去即可。

3.测试套件运行 一个接口用例完成一个业务场景/一个业务流程的测试,一个测试套件包含多条用例,可将相同模块的用例集中到一起执行。这种用例组织模式和测试人员常用的用例管理软件testlink的组织方式实质是一样的。 这样只要点击运行,就可以一键完成一个业务模块的接口测试。

测试完毕后会显示用例测试结果,上方面板为整体执行情况,下方分条列出具体用例执行结果。 如果需要导出测试报告,点击按钮可一键生成html格式的文件。

总结

一.接口自动化的工具思维和测试思维

我们这个接口自动化项目的搭建和执行基本都是围绕Apifox提供的功能进行的。和postman相比,用起来的感觉是特别顺手,用例的组织和测试的思维模式基本上也是几个大中厂都在用的,也符合国内测试组的工作流程,程,是工具来适应人,而不是人去适应工具,在理解门槛和思维切换这点上成本大大降低。

项目一路构建下来,基本都是功能界面的操作,几乎没有需要脚本的地方,对于不熟悉脚本的测试人员来说,可以用它来短时间快速完成测试任务。

如果大家不怎么熟悉那些英文测试术语,用起这个本土接口测试软件,理解成本少点,可能效率会更加高一点。

二.贯穿整个接口自动化项目的三个基本思路:

a.单个接口的测试数据和变量参数化,接口测试结果进行断言
b.单个接口用例以业务测试场景为框架搭建,接口依赖通过参数传递&接口执行顺序解决
c.用例组织以业务模块和业务流程、逻辑为框架组织成测试组和测试套件,方面后期迭代和更新维护

本文用APifox做接口自动化测试的具体流程和思路就介绍到这里,希望对大家有帮助。

 作为一位过来人也是希望大家少走一些弯路,在这里我给大家分享一些自动化测试前进之路的必须品,希望能对你带来帮助。(WEB自动化测试、app自动化测试、接口自动化测试、持续集成、自动化测试开发、大厂面试真题、简历模板等等),相信能使你更好的进步!

留【自动化测试】即可【自动化测试交流】:574737577(备注ccc)icon-default.png?t=N5K3http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=78pGJgx2Fbq3Wv_MrJkBr4Me9CWufea7&authKey=PvfVee5Yu%2F%2FtpxyVtk8QSgpeOPORA2oMLGWJTDqfGCtQ%2BRMv8MY1T%2BN9UleFs9Q%2B&noverify=0&group_code=574737577

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/670348.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用nps搭建内网穿透服务

使用nps搭建内网穿透服务 如何使用nps搭建内网穿透服务前提准备操作流程配置服务端配置客户端 P2P模式,大流量低延迟 正式开始之前呢,先介绍一下什么是内网穿透: 内网穿透(NAT穿透)是一种技术,它允许您通过…

软件测试简历编写以及软件测试面试题大全

目录 前言: 一、简历重要性以及编写原则 二、简历模板 三、简历包装 四、互联网公司常用接口测试面试题 五、互联网公司常面自动化测试面试题 前言: 软件测试是软件开发过程中必不可少的一环,也是一个不断发展和变化的领域。在寻找软件测试职…

广角积分球均匀光源

现阶段,摄影测量技术已涉及多行多业,其在交通、考古以及景物三维重建中的应用尤为显著,但是普通相机取景范围有限,不能全面捕获整个空间信息,因此一种新型相机--全景相机逐步被应用到实际当中。80年代初,国…

场景解析丨活用PDCA循环,让你的项目管理更高效!

聚焦制造业共性项目管控难题 结合装备制造行业特性, 从PDCA循环角度, 通过痛点、解决方案、实际案例的剖析, 看企业如何做好项目管理。 本期干货内容分享 1. 计划的可执行性 计划要达成共识,打造合理三级计划体系 2. 执行的…

Android预装apk

预装APK到system/app目录 注:APK名字不能含有中文、空格等特殊字符。 在 驱动路径/android/vendor/aw/public/prebuild/apk 创建一个目录存放对应的APK将所需预装的APK放入该目录中在该目录中创建 Android.mk文件,并编译 # 文件名 LOCAL_PATH : $(call…

supervisor简介

1、概述 supervisor是一个用python语言编写的进程管理工具,它可以很方便的监听、启动、停止、重启一个或多个进程。当一个进程意外被杀死,supervisor监听到进程死后,可以很方便的让进程自动恢复,不再需要程序员或系统管理员自己编…

回调函数(callback)是什么?一文理解回调函数(callback)

这里写目录标题 一、什么是回调函数1.1、回调函数的定义和基本概念1.2、回调函数的作用和使用场景 二、回调函数的实现方法2.1、函数指针2.2、函数对象/functor2.3、匿名函数/lambda表达式 三、回调函数的应用举例四、回调函数的优缺点五、回调函数与其他编程概念的关系5.1、回…

性能提升30%!袋鼠云数栈基于 Apache Hudi 的性能优化实战解析

Apache Hudi 是一款开源的数据湖解决方案,它能够帮助企业更好地管理和分析海量数据,支持高效的数据更新和查询。并提供多种数据压缩和存储格式以及索引功能,从而为企业数据仓库实践提供更加灵活和高效的数据处理方式。 在金融领域&#xff0…

Mysql高阶语句(一)

Mysql高阶语句(一) 一、MySQL高级进阶SQL 语句1、SELECT斜体样式2、DISTINCT3、WHERE4、AND、OR5、IN6、BETWEEN7、通配符、LIKE8、ORDER BY9、| | 连接符10、GROUP BY11、HAVING 二、函数1、数学函数2、聚合函数3、字符串函数4、日期时间函数 一、MySQL…

短视频矩阵源码

短视频矩阵源码的开发部署其实并不难,主要依托于抖音平台各种开放权限进行研发,市面上常见的源码功能构建也是大同小异,主要处理还在于细节及产品优化上。 如: 1. 视频制作板块,文字转语音功能,当然各种云&…

【人工智能技术专题】「入门到精通系列教程」零基础带你进军人工智能领域的全流程技术体系和实战指南(NLP、GPT-Pre-Training和数据标注都是什么)

零基础带你进军人工智能领域的全流程技术体系和实战指南(NLP、GPT-Pre-Training和数据标注都是什么) 前言专栏介绍专栏说明学习大纲前提条件面向读者学习目标核心内容NLP自然话言理解指的是什么定义概念涉及到的领域技术与应用关系 重要性语言结构剖析分…

AI已在职场大规模应用,求职者被要求熟练使用ChatGPT

“能熟练使用ChatGPT、Midjourney等AI软件生产高质量文图内容完成辅助工作。”当这条岗位要求悄然出现在今夏的应聘季,时光仿佛被拉回到数十年前,那个要求“会使用Word、Excel等计算机软件”的求职年代。 彼时,因为计算机的逐渐普及&#xf…

Linux服务器Jenkins部署打包Android

程序猿日常 记Jenkins部署打包Android介绍 Jenkins 自动打包 Android 应用,后面介绍打包Flutter应用,然后介绍打包Android原生Flutter混合应用 准备工作 1.jenkins服务器地址 账户密码 2.项目git地址 访问账号密码 3.ssh 链接服务器账户密码 安装An…

【Java高级语法】(十)面向对象:掀开Java 的面向对象盖章时代,一起来发现OOP的有趣编程秘密!~

Java高级语法详解之面向对象 1️⃣ 类和对象2️⃣ 三大特性2.1 封装(Encapsulation)2.2 继承(Inheritance)2.3 多态(Polymorphism) 3️⃣ 面向对象编程(OOP)和面向过程编程(PP)4️⃣ 方法重载和方法重写🔍 小结&#x…

MySQL高级SQL语句操作一

MySQL高级SQL语句操作 一、准备环境二、常用操作三、通配符与like1、通配符2、like 四、ORDER BY五、函数1、数学函数2、聚合函数3、字符串函数 六、GROUP BY七、HAVING八、别名(字段別名 、表格別名)九、子查询(连接表格) 一、准…

记录--前端实现文件预览(pdf、excel、word、图片)

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前端实现文件预览功能 需求:实现一个在线预览pdf、excel、word、图片等文件的功能。 介绍:支持pdf、xlsx、docx、jpg、png、jpeg。 以下使用Vue3代码实现所有功能,建…

管理类联考——英语——趣味篇——不择手段——a开头单词

本书分为两个部分。第一部分是核心词汇的讲解,借助谐音、联想、编故事、词根词缀、举例、图画等手段,为每个单词找到它存在的语境,基本上可以让你做到过目不忘。在这一部分中,单词被划分为20个单元,同学们可以每天搞定…

Vue全家桶(五):Vue3快速上手

目录 1.Vue3简介2.Vue3带来了什么2.1 性能的提升2.2 源码的升级2.3 拥抱TypeScript2.4 新的特性 3. 创建Vue3.0工程3.1 使用 vue-cli 创建3.2 使用 vite 创建3.3 Vue3的初始化工程 4. Composition API介绍4.1 Composition API 的优势4.1.1 Options API 存在的问题4.1.2 Composi…

基于STM32 ARM+FPGA的电能质量分析仪方案(一)硬件设计

本章主要给出了本系统的设计目标和硬件设计方案,后面详细介绍了硬件电路的设计 过程,包括数据采集板、 FPGAARM 控制板。 3.1系统设计目标 本系统的主要目的是实现电能质量指标的高精度测量和数据分析,其具体技术指标如 下所示&#xff1…

C++指针对象和异常(12)

异常(exception) 为什么有异常 异常在C用于错误处理,C语言中一般使用返回值表示错误,C对错误处理进行了扩展,统一使用异常机制来处理程序中发生的错误。 C的异常处理包括两个部分 ----- 抛出异常和捕获异常,如果抛出的异常被捕…