(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 函数主要的排序方法,所以今天要对快速排序法这种重要算法的详细原理进行分析。 思路:首先快速排序之所以高效一部分原因是利用了离散数学中的传递性。 例如 1 < 2 且 2 < 3 所以可以推出 1 < 3。在快速排序的过程中巧…...
linux环境搭建私有gitlab仓库
搭建之前,需要安装相应的依赖包,并且要启动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 开发坦克大战(一)Pygame什么是Pygame?初识pygame1. 使用pygame创建窗口2. 设置窗口背景颜色3. 获取窗口中的事件4. 在窗口中展示图片(1). pygame中的直角坐标系(2). 展示图片(3). 给部分区域设置颜色5. 在窗口中显示文字6. 播放音…...
2.5|iot冯|方元-嵌入式linux系统开发入门|2.13+2.18
一、 Linux 指令操作题(共5题(共 20 分,每小题 4分)与系统工作、系统状态、工作目录、文件、目录、打包压缩与搜索等主题相关。1.文件1.1文件属性1.2文件类型属性字段的第1个字符表示文件类型,后9个字符中,…...
一起Talk Android吧(第四百九十六回:自定义View实例二:环形进度条)
文章目录 知识回顾实现思路实现方法示例代码各位看官们大家好,上一回中咱们说的例子是"如何使用Java版MQTT客户端",这一回中咱们说的例子是"自定义View实例二:环形进度条"。闲话休提,言归正转,让我们一起Talk Android吧! 知识回顾 看官们,我们又回…...
上传图片尺寸校验
使用方法 ● Image ● URL ● onload代码: 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】缺失值处理和拉格朗日插值法(含源代码实现)
目录:缺失值处理和拉格朗日插值法一、前言二、理论知识三、代码实现一、前言 对于含有缺失值的数据集,如果通过删除小部分记录达到既定的目标,那么删除含有缺失值的记录的方法是最有效的。然而,这种方法也有很多问题,…...
SpringCloudAlibaba-Sentinel
一、介绍官网:https://github.com/alibaba/Sentinel/下载jar包,启动,访问http://localhost:8080/创建module添加如下依赖<!--SpringCloud ailibaba sentinel --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring…...
【程序化天空盒】过程记录02:云扰动 边缘光 消散效果
写在前面 写在前面唉,最近筋疲力竭,课题组的东西一堆没做,才刚刚开始带着思考准备练习作品,从去年5月份开始到现在真得学了快一年了,转行学其他的真的好累,,不过还是加油! 下面是做…...
链表OJ(三) 反转链表合集
目录 反转链表 反转链表 II 链表中的节点每k个一组翻转 描述 给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。 数据范围: 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语言随着这些年的发展已经成为了一]影响深远的编程语言,无数平台,系统都采用Java语言编写。但是,伴随着发展,Java也越来越庞大,逐渐发展成为-门“臃肿” 的语言。而且,无论是运行个大型的…...
Connext DDSPersistence Service持久性服务(2)
可选数据库组件及兼容性当Persistence Service配置为PERSISTENT模式时,您可以选择将主题数据存储在文件中还是存储在外部关系数据库中。 唯一支持的外部数据库是MySQL。 当PersistenceService在PERSISTENT模式下使用时,您可以将其配置为将DDS样本存储到关系数据库中,例如MyS…...
MongoDB
MongoDB 应用场景 在传统数据库(Mysql),在数据操作的 **High performance 对数据库高并发读写的需求、Hugu Storage 对海量数据的高效率存储和访问的需求、High Scalability && High Availability 对数据库高扩展和高可用性的需…...
python 迭代器生成器
目录 一、可迭代对象 1.1 判断是否为可迭代对象 二、迭代器 2.1 判断对象是否是一个迭代器 2.2 手写一个迭代器 2.3 迭代器应用场景 三、生成器 3.1 生成器介绍 3.2 使用yield 关键字 生成器,来实现迭代器 3.3 生成器(yield关键字)…...
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(数组)对象是一种用来存储一系列值的容器,它可以包含任意类型的数据,包括数字、字符串、对象等等。通过使用数组对象,我们可以轻松地组织和处理数据,以及进行各种操作,比如…...
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…...
Connext DDSPersistence Service持久性服务
DDS持久性服务,它保存了DDS数据样本,以便即使发布应用程序已经终止,也可以稍后将其发送到加入系统的订阅应用程序。 简介Persistence Service是一个Connext DDS应用程序,它将DDS数据样本保存到临时或永久存储中,因此即使发布应用程序已经终止,也可以稍后将其交付给加入系…...
自抗扰控制ADRC之微分器TD
目录 前言 1 全程快速微分器 1.1仿真分析 1.2仿真模型 1.3仿真结果 1.4结论 2 Levant微分器 2.1仿真分析 2.2仿真模型 2.3仿真结果 3.总结 前言 工程上信号的微分是难以得到的,所以本文采用微分器实现带有噪声的信号及其微分信号提取,从而实现…...
链表学习之复制含随机指针的链表
链表解题技巧 额外的数据结构(哈希表);快慢指针;虚拟头节点; 复制含随机指针的链表 该链表节点的结构如下: class ListRandomNode { public:ListRandomNode() : val(0), next(nullptr), random(nullptr…...
【人脸检测】Yolov5Face:优秀的one-stage人脸检测算法
论文题目:《YOLO5Face: Why Reinventing a Face Detector》 论文地址:https://arxiv.org/pdf/2105.12931.pdf 代码地址:https://github.com/deepcam-cn/yolov5-face 1.简介 近年来,CNN在人脸检测方面已经得到广泛的应用。但是许多…...
【Unity3d】Unity与Android之间通信
在unity开发或者sdk开发经常遇到unity与移动端原生层之间进行通信,这里把它们之间通信做一个整理。 关于Unity与iOS之间通信,参考【Unity3d】Unity与iOS之间通信 Unity(c#)调用Android (一)、编写Java代码 实际上,任何已经存在的Java代码…...
Allegro如何更改DRC尺寸大小操作指导
Allegro如何更改DRC尺寸大小操作指导 在做PCB设计的时候,DRC可以辅助设计,有的时候DRC的尺寸过大会影响视觉,Allegro支持将DRC的尺寸变小或者改大 如下图,DRC尺寸过大 如何改小,具体操作如下 点击Setup选择Design Parameters...
Mongodb WT_PANIC: WiredTiger library panic
文章目录故障现象排查过程1.查看Log2.同步恢复数据故障现象 周五突然收到Mongo实例莫名奇妙挂了告警,一般都是RS复制集架构模式(5节点),查看此实例角色为SECONDAR,挂了暂时不影响线上业务,但还是需要尽快修…...
【HTML】HTML 表格总结 ★★★ ( 表格标签 | 行标签 | 单元格标签 | 表格标签属性 | 表头单元格标签 | 表格标题标签 | 合并单元格 )
文章目录一、表格标签组成 ( 表格标签 | 行标签 | 单元格标签 )二、table 表格属性 ( border 属性 | align 属性 | width 属性 | height 属性 )三、表头单元格标签四、表格标题标签五、合并单元格1、合并单元格方式2、合并单元格顺序3、合并单元格流程六、合并单元格示例1、原始…...
linux013之文件和目录的权限管理
用户、组、文件目录的关系: 简介:用户和组关联,组合文件目录关联,这样就实现了用户对文件的权限管理。首先来看一下,一个文件或目录的权限是怎么查看的,ls -l, 如下,这个信息怎么看呢…...
设计模式之状态模式
什么是状态模式 状态模式是指允许一个对象在其内部状态改变时改变他的行为,对象看起来似乎改变了整个类。 状态模式将一个对象在不同状态下的不同行为封装在一个个状态类中,通过设置不同的状态对象可以让环境对象拥有不同的行为,而状…...
大石桥网站制作/武汉今日头条最新消息
在刚刚结束的 IJCAI 2021 大会上,深度学习模型知识产权保护国际研讨会正式举行,这场研讨会由微众银行、马来亚大学、香港科技大学、上海交通大学共同主办。 机器学习,尤其是深度神经网络(DNN)技术,近年来在…...
招聘网站比对表怎么做/网站排名seo培训
本文转自:http://www.cnblogs.com/henw/archive/2011/09/23/2186387.html 1. 需要引用的类库 ?1234using System.Net; using System.IO; using System.Text; using System.Text.RegularExpressions;2. 获取其他网站网页内容的关键代码 ?12345WebRequest request …...
临西企业做网站/乐陵seo优化
前提:知识点在理解的前提下,一定题量的针对训练,才是提高熟练度的唯一方法。 题目链接:https://vjudge.net/contest/325203#problem/E Sample Input VISIT http://acm.ashland.edu/ VISIT http://acm.baylor.edu/acmicpc/ BACK B…...
网站建设的一般过程包括哪些方面/自媒体账号申请
88. 合并两个有序数组 - 力扣(LeetCode) 就是归并排序的merge嘛,借助一个辅助数组就可以了。 class Solution { public:void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {if(n 0) return;vector&l…...
广州知名网站/5118素材网站
2019独角兽企业重金招聘Python工程师标准>>> 1、数组的概念 数组是相同类型的变量的有序集合 int a[5]; 数组包含5个int类型的数据 a代表数组第一个元素的起始地址,这20个字节的名字为a。a[0], a[1]等都是a中的元素,并非元素的名字࿰…...
个人空间备案网站名称/曼联vs恩波利比分
概要:why:为什么回收,见whatwhat:垃圾回收哪些内存(不可达对象的确定)when:何时执行GC(安全点、安全区域)how:如何回收(原理——垃圾回收算法、实现——垃圾收集器)1、垃圾回收哪些内存JVM运行时数据区中&a…...