当前位置: 首页 > news >正文

(API)接口测试的关键技术

接口测试也就是API测试,从名字上可以知道是面向接口的测试活动。所以在讲API测试之前,我们应该说清楚接口是什么,那么接口就是有特定输入和特定输出的一套逻辑处理单元,而对于接口调用方来说,不用知道自身的内部实现逻辑,这也是接口的黑盒处理逻辑。从而也就揭示了接口的本质:接口即契约,这个契约是指接口提供方和接口调用方约定好的一种约定。它遵循这样一种形式:在开发前期会约定接口接收什么数据以及返回什么数据,在开发完成后接口提供方实现了原本约定。这也就出现了一个丞待解决,如何验证接口提供方是否遵了契约的约定,为了解决该问题,接口测试就出现了。接口测试是通过模拟接口调用方的行为,依据上述契约要求,并兼顾其它质量特性,对接口提供方提供的接口进行质量验证的活动。
在这里插入图片描述
在分层测试模型中,包含了单元测试、接口测试以及界面测试(也叫UI测试),在行业里最先提出的如图1所示的金字塔模型是最早的分层测试模型,也是第一次按照测试投入和收益综合设计的模型。

在金字塔模型中,界面测试、自动化接口测试和单元测试,每一个阶段所占面积的大小,代表了它们在测试过程中的投入和工作量占比。因此我们可以看出,金字塔模型中单元测试占据了绝大部分的比重,也就说明了我们应该在单元测试投入更多的精力和时间,已达到更大的收益。但是在实践过程中,有些团队单元测试覆盖度还不高,为了弥补单元测试的不足,测试工程师不断地加大在接口测试的投入,将接口测试逐渐划分成单接口测试和业务接口测试,其中:

● 单接口测试不断地扩大检测范围,既保证某一个单一接口的功能的正确性,也会覆盖单接口的可靠性,从而不断增大接口测试的测试深度和测试广度,往下逐渐覆盖一些公共接口的单元测试内容

● 业务接口测试是通过多接口的串联以及上下文参数的处理来完成业务逻辑的模拟,往上则逐渐覆盖应该由 UI 层保障的业务逻辑测试

从而,通过不断地在实践中扩大接口测试的投入,分层测试模型也就逐渐的演变成橄榄核模型了如图1所示,那么这种变化是工程实践选择的结果,它主要的优越性表现如下:

● 接口测试更容易和其他制品相关系统相结合

● 相对于界面测试,接口测试可以更早开始,也可以测试一些界面测试无法测试的范围,因此它使“尽早测试介入,尽早发现缺陷,修复缺陷的成本越低”这句话变成现实

我们提及的接口测试绝大部分情况下都是指的是自动化接口测试,其实自动化接口测试是两部分技术手段的结合体,这里面包含了自动化和接口测试两方面要素。

● 接口测试:依托于测试技术协议客户端模拟行为(该客户端是协议层访问客户端,具体可表现为客户端系统,也可以是微服务的调用发起方等任何包含协议发起方代码或者实现的系统或软件)的基础之上,按照测试用例设计方法完成接口入参的设计,并与被测服务端发生交互、验证结果是否满足预期的测试行为。

● 自动化:能够按迭代、定时、按需的完成没有人工或者较少人工直接参与的测试活动。

接口测试是建立在协议客户端模拟行为之上,验证被测系统功能性特性的测试实践手段。因此,我们可以看出,接口测试也是质量层次模型中功能适合性的测试实践方法。接口测试的主要包含了模拟协议客户端、接口的逻辑模拟、数据驱动、测试报告、关键字驱动、断言操作、测试替身是接口测试中关键技术。

● 协议客户端模拟:协议客户端模拟行为的测试技术,这既可以是测试脚本也可以是测试平台,它主要提供一种模拟与被测服务交互的技术手段,提供与被测系统发生交互的基础,从而为接口测试的实现建立基础手段,例如HTTP协议比较常用的方式是代码调取对应的协议访问客户端类,java的HttpClient、Python的requests等,或者利用常规的工具postman等。

● 接口的逻辑模拟:通过录制修改或者脚本开发的方式,在协议客户端模拟技术的基础之上实现与被测服务的交互,该交互主要实现了被测接口的访问和参数传递以及返回值的获取,例如HTTP协议的接口通过写代码完成访问uri、参数、访问方法等的设置,发起访问并获取返回值,或者通过postman新建请求请求完成对应的设置。

● 数据驱动:是指为自动化接口测试的接口逻辑模拟部分提供被测接口参数的入参,这个入参可以按照某一种形式存储在外部文件或者外部服务中,通过自有的参数策略进行选取,从而实现一个接口逻辑模拟方式的多次入参的访问,从而最大的提高接口模拟逻辑的复用,提高自动化接口测试开发效率。例如在编写脚本的时,常会将参数放入.csv、json、数据库等文件或者服务中。

● 断言操作:提供针对自动化接口测试返回值的部分或者全部的预期值的自动比对,其中支持一些布尔值的运算,例如等于、包含、不包含等。

● 测试报告:对测试结果有一个统一的展示方式,通过提供表格、统计图等给出形象的总体分析,甚至可以将缺陷报告、误报缺陷自动过滤模块的内容同时输出到报告中。

● 关键字驱动:提供关键字封装功能,能够通过关键字将一些接口封装成某一个流程的关键字,通过该关键字就可以完成对应业务流的测试、调用等。这样就可以把一些自动接口测试隐藏到业务识别关键字,提高编码的可读性和复用性。

● 测试替身:是为了达到测试目的并且减少被测试对象的依赖,在依赖接口编程的程序中使用测试替身代替一个真实的依赖对象,从而保证了测试的速度和稳定性。

自动化在自动化接口测试中仅仅是为了说明自动化执行,但是随着测试技术的发展,质量效能的不断发展,自动化并不仅仅存在于自动化执行,很多提高研发效能的技术也不断的涌现,例如测试缺陷自动提交、误报缺陷自动过滤、接口的逻辑模拟生成。

● 自动化执行:自动化接口测试能够按需或者定时的调取部分或者全部自动化接口测试脚本完成测试,这里按需就是按照固定的需要,这既可能是迭代的需要也可能是质量保障环节的需要,提供测试还要提供定时执行的能力,这既可以由自动化接口测试框架或者平台自己提供,也可以借助持续集成平台完成。

● 测试缺陷自动提交:自动化接口测试在执行测试过程中如发生执行失败,并确定是被测系统缺陷的时候,可以自动的将该现象、脚本、以及实际返回上报到缺陷,完成新缺陷的上报。

● 误报缺陷自动过滤:自动化接口测试在执行测试出现失败后,会先判断对应失败是不是非被测系统的缺陷导致的,而是由于环境问题、数据问题、依赖问题而导致的服务不可用,这部分并不是缺陷,可以自动将其反馈给测试工程师而并不上报新缺陷。

● 接口的逻辑模拟生成:能够通过某种接口输入内容,自动的完成访问接口逻辑的生成,常规的是自动生成自动化测试脚本代码。

学习安排上

如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

在这里插入图片描述

视频文档获取方式:

这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片进群即可自行领取

相关文章:

(API)接口测试的关键技术

接口测试也就是API测试,从名字上可以知道是面向接口的测试活动。所以在讲API测试之前,我们应该说清楚接口是什么,那么接口就是有特定输入和特定输出的一套逻辑处理单元,而对于接口调用方来说,不用知道自身的内部实现逻…...

快速排序算法原理 Quicksort —— 图解(精讲) JAVA

快速排序是 Java 中 sort 函数主要的排序方法&#xff0c;所以今天要对快速排序法这种重要算法的详细原理进行分析。 思路&#xff1a;首先快速排序之所以高效一部分原因是利用了离散数学中的传递性。 例如 1 < 2 且 2 < 3 所以可以推出 1 < 3。在快速排序的过程中巧…...

linux环境搭建私有gitlab仓库

搭建之前&#xff0c;需要安装相应的依赖包&#xff0c;并且要启动sshd服务(1).安装policycoreutils-python openssh-server openssh-clients [rootVM-0-2-centos ~]# sudo yum install -y curl policycoreutils-python openssh-server openssh-clients [rootVM-0-2-centos ~]…...

SpringSecurity授权

文章目录工具类使用自定义失败处理代码配置跨域其他权限授权hasAnyAuthority自定义权限校验方法基于配置的权限控制工具类 import javax.servlet.http.HttpServletResponse; import java.io.IOException;public class WebUtils {/*** 将字符串渲染到客户端** param response 渲…...

学习 Python 之 Pygame 开发坦克大战(一)

学习 Python 之 Pygame 开发坦克大战&#xff08;一&#xff09;Pygame什么是Pygame?初识pygame1. 使用pygame创建窗口2. 设置窗口背景颜色3. 获取窗口中的事件4. 在窗口中展示图片(1). pygame中的直角坐标系(2). 展示图片(3). 给部分区域设置颜色5. 在窗口中显示文字6. 播放音…...

2.5|iot冯|方元-嵌入式linux系统开发入门|2.13+2.18

一、 Linux 指令操作题&#xff08;共5题&#xff08;共 20 分&#xff0c;每小题 4分&#xff09;与系统工作、系统状态、工作目录、文件、目录、打包压缩与搜索等主题相关。1.文件1.1文件属性1.2文件类型属性字段的第1个字符表示文件类型&#xff0c;后9个字符中&#xff0c;…...

一起Talk Android吧(第四百九十六回:自定义View实例二:环形进度条)

文章目录 知识回顾实现思路实现方法示例代码各位看官们大家好,上一回中咱们说的例子是"如何使用Java版MQTT客户端",这一回中咱们说的例子是"自定义View实例二:环形进度条"。闲话休提,言归正转,让我们一起Talk Android吧! 知识回顾 看官们,我们又回…...

上传图片尺寸校验

使用方法 ● Image ● URL ● onload代码&#xff1a; async validImageSize(file, imgWidth, imgHeight) {const img new Image()img.src URL.createObjectURL(file)const { w, h } await new Promise((resolve, reject) > {img.onload () > {const { width: w, he…...

【Python】缺失值处理和拉格朗日插值法(含源代码实现)

目录&#xff1a;缺失值处理和拉格朗日插值法一、前言二、理论知识三、代码实现一、前言 对于含有缺失值的数据集&#xff0c;如果通过删除小部分记录达到既定的目标&#xff0c;那么删除含有缺失值的记录的方法是最有效的。然而&#xff0c;这种方法也有很多问题&#xff0c;…...

SpringCloudAlibaba-Sentinel

一、介绍官网&#xff1a;https://github.com/alibaba/Sentinel/下载jar包,启动,访问http://localhost:8080/创建module添加如下依赖<!--SpringCloud ailibaba sentinel --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring…...

【程序化天空盒】过程记录02:云扰动 边缘光 消散效果

写在前面 写在前面唉&#xff0c;最近筋疲力竭&#xff0c;课题组的东西一堆没做&#xff0c;才刚刚开始带着思考准备练习作品&#xff0c;从去年5月份开始到现在真得学了快一年了&#xff0c;转行学其他的真的好累&#xff0c;&#xff0c;不过还是加油&#xff01; 下面是做…...

链表OJ(三) 反转链表合集

目录 反转链表 反转链表 II 链表中的节点每k个一组翻转 描述 给定一个单链表的头结点pHead(该头节点是有值的&#xff0c;比如在下图&#xff0c;它的val是1)&#xff0c;长度为n&#xff0c;反转该链表后&#xff0c;返回新链表的表头。 数据范围&#xff1a; 0≤n≤10000≤…...

SQLSERVER2019安装步骤过程

第一步官网下载SQLSERVER软件包 目前官网只能下载最新版本2022版本。 通过迅雷下载网址 SQL Server 2019 Enterprise (x64) - DVD (Chinese-Simplified)企业版 ed2k://|file|cn_sql_server_2019_enterprise_x64_dvd_2bfe815a.iso|1632086016|58C258FF0F1D006DD3C1F5F17AF3E…...

Java模块化概述

3 模块化 3.1 模块化概述 Java语言随着这些年的发展已经成为了一]影响深远的编程语言&#xff0c;无数平台,系统都采用Java语言编写。但是&#xff0c;伴随着发展&#xff0c;Java也越来越庞大&#xff0c;逐渐发展成为-门“臃肿” 的语言。而且&#xff0c;无论是运行个大型的…...

Connext DDSPersistence Service持久性服务(2)

可选数据库组件及兼容性当Persistence Service配置为PERSISTENT模式时,您可以选择将主题数据存储在文件中还是存储在外部关系数据库中。 唯一支持的外部数据库是MySQL。 当PersistenceService在PERSISTENT模式下使用时,您可以将其配置为将DDS样本存储到关系数据库中,例如MyS…...

MongoDB

MongoDB 应用场景 ​ 在传统数据库&#xff08;Mysql&#xff09;&#xff0c;在数据操作的 **High performance 对数据库高并发读写的需求、Hugu Storage 对海量数据的高效率存储和访问的需求、High Scalability && High Availability 对数据库高扩展和高可用性的需…...

python 迭代器生成器

目录 一、可迭代对象 1.1 判断是否为可迭代对象 二、迭代器 2.1 判断对象是否是一个迭代器 2.2 手写一个迭代器 2.3 迭代器应用场景 三、生成器 3.1 生成器介绍 3.2 使用yield 关键字 生成器&#xff0c;来实现迭代器 3.3 生成器&#xff08;yield关键字&#xff09;…...

Iceberg基于Spark MergeInto语法实现数据的增量写入

SPARK SQL 基本语法 示例SQL如下 MERGE INTO target_table t USING source_table s ON s.id t.id //这里是JOIN的关联条件 WHEN MATCHED AND s.opType delete THEN DELETE // WHEN条件是对当前行进行打标的匹配条件 WHEN MATCHED AND s.opType update THEN…...

JavaScript Array(数组) 对象

JavaScript 中的 Array&#xff08;数组&#xff09;对象是一种用来存储一系列值的容器&#xff0c;它可以包含任意类型的数据&#xff0c;包括数字、字符串、对象等等。通过使用数组对象&#xff0c;我们可以轻松地组织和处理数据&#xff0c;以及进行各种操作&#xff0c;比如…...

Debian如何更换apt源

中科大 deb https://mirrors.ustc.edu.cn/debian/ stretch main non-free contrib deb https://mirrors.ustc.edu.cn/debian/ stretch-updates main non-free contrib deb https://mirrors.ustc.edu.cn/debian/ stretch-backports main non-free contrib deb-src https://mirr…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

JVM 内存结构 详解

内存结构 运行时数据区&#xff1a; Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器&#xff1a; ​ 线程私有&#xff0c;程序控制流的指示器&#xff0c;分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 ​ 每个线程都有一个程序计数…...

Rust 开发环境搭建

环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行&#xff1a; rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu ​ 2、Hello World fn main() { println…...