什么是接口测试,如何做接口测试?
比起点点点的功能测试,“接口测试”显得专业又高大上,也因此让有些初级测试人员“望而生畏”。别担心,其实接口测试也是功能测试的一种,它是针对接口进行的功能测试。
写在前面:本文参考了茹炳晟老师的《测试工程师 全栈技术进阶与实践》,并结合自己的理解进行了删减和补充。
一. 什么是接口测试?
软件接口,是指软件不同模块之间交互的接口,我们通常所说的API(Application Programming Interface 应用程序接口),即是软件系统不同模块之间衔接的约定。
接口测试即是对软件各个模块的接口进行的测试。
二. 为什么要重视接口测试?
近年来软件的规模日益庞大,软件系统越来越复杂,仅仅从用户界面的测试无法保证系统的健壮性和容错性,且越早发现问题修复的成本越低。下图是迈克 · 科恩(Mike Cohn)提出的传统了软件测试的金字塔模型:
金字塔模型告诉我们:
测试层级越低,问题定位越容易;
测试层级越高,维护成本越高;
测试层级越高,修复成本越高。
但由于互联网产品追求的是快速实现功能并上线,基本不会给开发或测试人员有多余的时间去做足够的单元测试;及时预留了单元测试的时间,频繁的迭代也会让单元测试处于不断写的状态。因此,互联网产品的单元测试也有一定的针对策略,一般是对核心模块相对稳定的业务和服务覆盖单元测试。在此情况下,API测试变得尤为重要。主要原因如下:
- API测试用例的开发、调试和执行效率比较高
- API相对稳定
- API测试用例的执行的稳定性远远高于GUI测试
- 现在很多互联网产品都采用了微服务架构,在此架构下,如果做好了每个服务的API测试,整体产品的质量就有了保障。
因此,互联网产品一般采用的都是菱形的测试策略:
三. 接口测试有哪些好处?
上一小节介绍了为什么要重视接口测试,那做接口测试有哪些好处呢?
实现测试左移
用户界面的GUI测试是模拟真实用户使用软件的行为,它位于测试的最顶层,发现问题后,定位和修复的代价都比较大。API测试可以实现测试的左移,即前后端分离的项目,当后端开发完毕,即可进行接口测试,而无需等待前端。可以保证尽早发现问题,降低问题修复成本。
降低维护成本
相比较用户界面,接口比较稳定,维护成本低
提高测试效率
一方面,由于接口在执行中不依赖于任何界面上的操作,其执行稳定性远远过于GUI,因此可以实现自动化,提高测试效率;
另一方面,可以将一些常用的接口用例做成小工具(或直接执行脚本),测试过程中的一些数据准备及构造的场景,就可以直接拿来用了;
还有,需要反复执行的回归场景,可以直接执行用例。
有利于bug定位
很明显,通过接口发现的问题,就是后端问题,可以直接找负责接口的开发人员;如果仅仅是用户界面发现的问题,可以直接找前端开发。这种测试策略可以明确bug的范围,降低bug定位成本
保证系统的安全性、健壮性和容错性
一些通过UI无法进行的输入,可以通过接口轻易地实现。例如在 什么是测试思维 – 测试工程师的核心技能 举例的微信余额支付从场景:
单单从用户界面上操作,这里的负数、非全数字,都是无法输入的;但是从接口的角度看,这些值都可以作为输入参数。
四. 如何设计和组织接口测试用例?
首先明确一下接口测试的范围。第二节已经说了,由于互联网的“快”,API测试变得尤为重要。但是不是所有的API都要测试呢?——不是。正如单元测试一样,API测试也要考虑性价比,因此一般我们选择核心的业务模块做API测试。由于不同业务的核心模块不同,这里不作讨论。
刚刚介绍了,接口测试是针对接口进行的功能测试。因此,接口测试和功能测试的用例设计原则是一样的:场景分析都要灵活运用测试思维(什么是测试思维 – 测试工程师的核心技能),常用的用例设计方法都是等价类划分、边界值等(软件测试入门必学--如何设计测试用例)。那二者有哪些不同呢?
1)测试对象不同
功能测试:主要测试应用程序的具体功能
接口测试:主要测试应用程序中各个模块间的接口的输入、输出等是否符合预期
2)测试目的不同
功能测试:确保应用程序的具体功能和需求文档一致
接口测试:测试应用程序中各个模块间的接口的输入、输出等是否符合预期,和其他模块的交互是否OK
3)测试重点不同
功能测试:重点在用户界面及功能
接口测试:重点在业务逻辑
4)测试工具不同
功能测试:主要是人工直接操作用户界面
接口测试:需要使用接口测试工具,例如postman,jmeter等,更多是实现基于代码的测试套件
5)测试扩展不同
功能测试:用户界面变化比较频繁,可做充分的探索性测试
接口测试:接口相对稳定,有利于实现自动化,来保证业务逻辑。例如用户界面的重构,如果接口不变,则用户界面可以随意更改,同时用实现的接口自动化来保证业务逻辑。但“自动化”本身不会扩展,其无法替代手工测试的探索性测试。
4.1 单个接口的测试
通过上面几小节内容,我们已经了解到,接口是软件系统不同模块之间衔接的约定。因此接口测试是比较规范的,通常就是三个标准的步骤:
- 准备测试数据
- 发起请求
- 验证响应结果
接口测试时需要关注的点有:
- URL地址:具体的接口url
- 请求方法:GET、POST、PUT、DELETE等
- 请求头域(Header):发送申请时携带的头部信息。通常一些鉴权的信息:authentication/cookie、响应的数据格式:content-type等等的设置。当然响应的数据也会返回一些头部信息。
- 请求参数(Parameter):GET是以键值对的形式,POST的参数在body体里
- 响应内容(Response):接口的返回码及返回内容,即输出。通常要对这部分进行验证。
4.2 多个接口的测试
实际业务场景中,通常一个单一的前端操作可能会触发后端一系列的API调用,因此API测试用例一般都不是单个的API调用,而是一系列,并且经常在后一个API调用中需要使用前一个API调用返回的结果,同时需要根据前一个API调用的返回结果决定在后面应该调用哪个API. 因此这两个问题的解决直接影响到多个接口测试用例的实现。
如何高效地获取单个前端操作所触发的API调用序列?
询问开发人员
这是最直接的方法。但经常询问一则会对开发人员造成打扰,二则显得咱也不够专业。
阅读开发代码
需要有一定的编程基础
3. 参阅开发人员的详细设计文档
一般比较规范的详细设计文档或接口文档都会有业务逻辑图,注明各个接口间的调用顺序。
4. 抓包
可以通过Fiddler等抓包工具,在不依赖开发人员的情况下自己获取。
5. 查看日志
通过基于用户行为的日志,可以获取API调用序列。
如何在后一个API调用中使用前一个API调用返回的结果?
手动检查
自然是可以的,只是效率比较低。
自动化实现
接口的规范性,使得将结果的验证和引用实现自动化,不但可以验证业务流程,还能提高验证的效率。
如果使用postman,可以自动生成验证代码。但当需要频繁执行大量的测试用例时,Postman等基于界面的API测试就无法满足需要了。于是出现了基于代码的API测试框架。比较典型的是基于Java的OkHttp和Unirest、基于python的http.client和Requests、基于Node.js的Native和Request等。一些大型的企业还会结合自身的业务开发自己的API测试框架。各个框架各有优劣,思想都是相通的。大致的思路如下:
提炼出业务主流程,每个主流程对应一个测试套件,即test suite
对于一些异常场景,可以在主流程的test suite中添加,它不会影响最终的结果;也可以单独建立test suite以减少对主业务流程的干扰;
支持多个取值的参数,可以在不同的test suite中交叉覆盖(正交实验法)
五. 常见面试题
- 项目中使用的是什么协议的接口?
- 提示:一般有HTTP、HTTPS、RPC等。然后会结合回答继续问~
- HTTP接口有哪些请求方法?
- 提示:常用的GET、POST、PUT、DELETE等
- HTTP接口的返回码
- 提示:2xx、3xx、4xx、5xx
- 接口测试有哪些好处?
- 接口测试是如何做的?
- 提示:从流程和设计上回到
- 有哪些常用请求头,请求头是做什么的?
- cookie和session的区别,UA等
- 如何区分前后端bug?
六. 思考和总结
接口测试在测试工程师的工作中比重越来越大,因此也是专业TE的必备技能。
本文简单介绍了接口测试的背景以及优点,对于设计和组织部分也是简略一提,更是没有设计工具、框架的使用。其实这部分如果要详细说,每个工具,每个框架都是个很大的话题。本文只是提供一个简单的思路,还需要每个测试人多思考多总结。
如果有机会,我会慢慢总结并分享~Fighting! 与各位共勉!
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
软件测试面试小程序
被百万人刷爆的软件测试题库!!!谁用谁知道!!!全网最全面试刷题小程序,手机就可以刷题,地铁上公交上,卷起来!
涵盖以下这些面试题板块:
1、软件测试基础理论 ,2、web,app,接口功能测试 ,3、网络 ,4、数据库 ,5、linux
6、web,app,接口自动化 ,7、性能测试 ,8、编程基础,9、hr面试题 ,10、开放性测试题,11、安全测试,12、计算机基础
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!
相关文章:

什么是接口测试,如何做接口测试?
比起点点点的功能测试,“接口测试”显得专业又高大上,也因此让有些初级测试人员“望而生畏”。别担心,其实接口测试也是功能测试的一种,它是针对接口进行的功能测试。 写在前面:本文参考了茹炳晟老师的《测试工程师 全…...

Keil 编译 Debug
# 头文件无法导入进来 # 导入头文件,只有函数声明,但缺少函数实现 已经导入了air32f10x_gpio.h但是没有导入 .c,就导致 编译出错出现undefined symbol (某个函数),这时候按照下面的操作,导入外设模块就好。...

【通用消息通知服务】0x3 - 发送我们第一条消息(Websocket)
【通用消息通知服务】0x3 - 发送我们第一条消息 项目地址: A generic message notification system[Github] 实现接收/发送Websocket消息 Websocket Connection Pool import asyncio from asyncio.queues import Queue from asyncio.queues import QueueEmpty from contextli…...

Eclipse打jar包与JavaDOC文档的生成
补充知识点——Eclipse打jar包与JavaDOC文档的生成 1、Eclipse如何打jar包,如何运行jar包 Java当中编写的Java代码,Java类、方法、接口这些东西就是项目中相关内容,到时候我们需要把代码提供给甲方、或者是我们需要运行我们编写的代码&…...

力扣:80. 删除有序数组中的重复项 II(Python3)
题目: 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下…...

linux:需要注意docker和aws的rds的mysql默认是UTC而不是中国时区
问题: 如题 解决办法: docker参考: mysql时间不对,修改时区_set global time_zone 无效_《小书生》的博客-CSDN博客 aws参考: https://www.youtube.com/watch?vB-NaqV-A1BY mysql - AWS修改RDS时区 - 个人文章 - Segm…...

访问 GitHub 方法
访问 GitHub 方法 方法一:最常见的就是 fq,但这个是违法的行为,自己私下搞可以,不能教你们。 方法二:利用加速器,这是正规合法操作。这里推荐一个免费的加速器,下载安装 Watt Toolkit加速器,原名…...

旅游APP外包开发注意事项
旅游类APP通常具有多种功能,以提供给用户更好的旅行体验。以下分享常见的旅游类APP功能以及在开发和使用这些APP时需要注意的问题,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 常见功能…...

ROS机器人编程---------(二)ROS中的核心概念
ROS机器人编程 ROS中的核心概念 ROS的通信机制 在ROS中结点是最小单元,比如说机器人的遥控器可以作为一个控制结点,机器人上的摄像头也可以看作一个结点,ROS通过协调各个结点来实现 在启动任何ROS结点之前,都必须先启动ROS Mas…...

Python学习教程:进程的调度
前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! 要想多个进程交替运行,操作系统必须对这些进程进行调度, 这个调度也不是随即进行的,而是需要遵循一定的法则,由此就有了进程的调度算法。 python更多源码/资料/解答/教程等 …...

ElasticSearch第三讲:ES详解 - Elastic Stack生态和场景方案
ElasticSearch第三讲:ES详解 - Elastic Stack生态和场景方案 本文是ElasticSearch第三讲,在了解ElaticSearch之后,我们还要了解Elastic背后的生态 即我们常说的ELK;与此同时,还会给你展示ElasticSearch的案例场景&…...

基于Java+SpringBoot+Vue前后端分离农商对接系统设计和实现
博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…...

【模方ModelFun】实景三维建模和修模4.0.7最新版安装包以及图文安装教程
模方ModelFun 具有多种功能,旨在帮助用户进行实景三维建模和修模。以下是一些主要功能的简要介绍: 实景三维建模:【模方ModelFun】提供了自动化的实景三维重建功能,可以从实景图像中提取几何形状和纹理信息,生成高质量…...

介绍几个搜索引擎
Google:全球最大的搜索引擎,提供全面的搜索服务,包括网页、图片、视频、新闻、地图等。 Baidu:中国最大的搜索引擎,提供类似于Google的全面搜索服务,同时也有网盘、知道等功能。 Bing:微软公司…...

iPhone 隔空投送使用指南:详细教程
本文介绍了如何在iPhone上使用隔空投送,包括如何在iOS 11到iOS 14的iPhone上启用它、发送文件以及接受或拒绝AirDrop发送给你的文件。对于iOS 7以上的旧款iPhone,提供了另一种方法。 如何打开隔空投送 你可以通过以下两种方式之一启动隔空投送功能:在“设置”应用程序或控…...

百度文心一言GPT免费入口也来了!!!
文心一言入口地址:文心一言能力全面开放 文心一言是百度全新一代知识增强大语言模型,文心大模型家族的新成员,能够与人对话互动,回答问题,协助创作,高效便捷地帮助人们获取信息、知识和灵感。 文心一言的技…...

线程调度和线程控制
在Java中,线程调度和线程控制是多线程编程中重要的概念,它们用于管理和控制线程的执行。以下是关于线程调度和线程控制的一些重要概念和技术: **1. 线程调度(Thread Scheduling): ** 线程调度是操作系统或Java虚拟机决定哪个线程在何时执行的过程。Java提供了多种线程调度…...

laravel excel导入导出
一、安装第三方 composer require maatwebsite/excel版本2.1和现在版本 有所不一样 二、导入 <?php namespace App\Import; use Maatwebsite\Excel\Concerns\ToCollection;class TestImport implements ToCollection {public function __construct(){}public function c…...

Windows无法删除分区怎么办?
我们知道Windows系统内置的磁盘管理工具是一个很实用的程序,可以帮助我们完成很多磁盘分区相关的基础操作,比如当我们想要删除硬盘上的某一个分区时,先想到的可能会是磁盘管理工具。但是当我们准备在磁盘管理工具中删除某个分区时,…...

【请求报错:javax.net.ssl.SSLHandshakeException: No appropriate protocol】
1、问题描述 在请求服务时报错说SSL握手异常协议禁用啥的,而且我的连接数据库的url也加了useSSLfalse javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)2、解决方法 在网上查找了方法…...

elementUI textarea可自适应文本高度的文本域
效果图; 通过设置 autosize 属性可以使得文本域的高度能够根据文本内容自动进行调整,并且 autosize 还可以设定为一个对象,指定最小行数和最大行数。 <el-inputtype"textarea"autosizeplaceholder"请输入内容"v-model"te…...

WebRTC-Streamer交叉编译
WebRTC-Streamer交叉编译 flyfish 文章目录 WebRTC-Streamer交叉编译零、前言一、提前准备工作1 安装需要的工具2 可选的交叉编译工具3 默认执行python是python34 获取源码5 使用其他版本的方法 二、非交叉编译编译1 在 src目录执行 安装所需的依赖2 执行命令 三、 交叉编译1 …...

将目录下的所有pdf文件都转换为对应名字的png图片
本来想用Foxit来把pdf转换为png,但没想到是收费的功能,所以在参考1处找了一段python代码,稍作修改实现了这个功能。做个记录后续可能有用。 在python3.9.12上运行代码遇到了版本的坑,好几个坑,最终发现只要安装这个特…...

windows主机和Ubuntu虚拟机共享设置
参考文章 Ubuntu Linux 与主机共享文件夹 vim 修改文件出现错误 “ E45: ‘readonly’ option is set (add to override)“ vim退出时报错“E212: Cant open file for writing”的解决办法 VMware 安装后,安装Ubuntu 20.04一路顺利。 1,在VMware设置…...

北京APP外包开发需要注意的问题
开发APP的过程中,由于开发APP需要投入大量的时间、精力和资源,所以在开始前一定要做好充足的准备和规划。您需要注意以下重点,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1…...

自然语言处理:提取长文本进行文本主要内容(文本意思)概括 (两种方法,但效果都一般)
本文主要针对长文本进行文本提取和中心思想概括,原文档放在了附件里面:<科大讯飞公告> -----------------------------------方法一:jieba分词提取文本(句子赋分法)------------------------- 1、首先导入相关…...

基于SpringCloudAlibaba实现的NacosConfig
概述 Nacos除了实现了服务的注册发现之外,还将配置中心功能整合在了一起。通过Nacos的配置管理功能,我们可以将整个架构体系内的所有配置都集中在Nacos中存储。这样做的好处主要有以下几点: 分离的多环境配置,可以更灵活的管理权…...

景联文科技:高质量AI数据标注助力大语言模型训练,推动人工智能落地应用
大语言模型在各类LLM新技术的融会贯通下,不断加速Instruction-tuning、RLHF、思维链等新技术在大语言模型中的深度应用,人工智能技术以惊人的速度不断进化。 大语言模型(LLM)是一种基于深度学习技术和海量文本数据,它们…...

深度学习(前馈神经网络)知识点总结
用于个人知识点回顾,非详细教程 1.梯度下降 前向传播 特征输入—>线性函数—>激活函数—>输出 反向传播 根据损失函数反向传播,计算梯度更新参数 2.激活函数(activate function) 什么是激活函数? 在神经网络前向传播中&#x…...

点云从入门到精通技术详解100篇-点云信息编码(中)
目录 2.4.3 基于预测树结构的几何信息压缩算法 2.5 点云属性信息编码技术...