【测试】详解接口测试(2)- HTTP接口用例设计与测试方法(拿B站练手)

article/2025/10/12 12:49:28

文章目录

  • 前言
  • 接口测试是什么
  • HTTP接口的测试用例设计
      • 接口用例设计小结
  • HTTP接口的测试方法
      • 手工测试
      • 自动化测试
  • 接口测试策略
  • 结束语


前言

大家好,我是洋子。在之前的文章《详解接口测试(1)-常见的网络通信协议》当中,我们介绍了接口的概念以及各种类型的接口用到的网络通信协议。鉴于HTTP网络协议使用最为广泛,本文将会基于HTTP协议的接口对其讲解如何进行接口测试,内容包含以下部分:

  • 接口测试是什么
  • HTTP接口的测试用例设计
  • HTTP接口的测试方法
  • 接口的测试策略

接口测试是什么

接口测试是对测试系统组件间接口进行测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换传递控制管理过程,以及系统间的相互逻辑依赖关系

调用一个接口A后,通常会触发下面的业务逻辑

  • (*)在数据库RedisES(Elasticsearch)、或者Kafka里面查询数据、写入新的数据,或者更新历史老的数据
  • 接口A继续调用下游的另外一个接口B,将接口B的数据作为接口A的返回值
  • 数据处理完毕后,把数据格式化成Json或者HTML等返回给前端
  • 进行其余业务逻辑处理

从上面我们可以得知,调用一个接口后,数据的流动情况。以上述业务逻辑(*)为例,有两条最基本的数据流,分别是写入数据流和查询数据流

  • 写入数据流:从外部参数传入调用接口后,经过业务处理,数据最终会存储到数据库或者缓存当中
  • 查询数据流:从外部参数传入调用接口后,经过业务处理,查询数据库或者缓存,将查询到的数据从接口返回

所以在接口测试时,涉及数据库相关的逻辑,我们都需要去检查数据库或者缓存里的数据是否符合预期,这是一个很重要的测试点,测试点可以转换成接口测试用例,在下面会谈到如何设计接口测试用例

细心的小伙伴可能会问,光看接口文档,我怎么知道一个接口调用后背后都做了些什么?

想要彻底了解清楚调用接口后触发的业务逻辑,更好的进行质量保障,需要测试人员直接去看懂开发写的代码,并进行白盒测试,这对测试人员代码code review要求比较高,所以更多企业退而求其次,要求测试人员进行接口测试

如果看不到开发写的代码,只进行接口测试仍然是属于黑盒测试的范畴

不过对于互联网大厂的服务端测试来说,测试一个业务需求一般是code review + 接口测试 + 白盒测试 结合起来进行,这样能更好的保障所测需求的质量

HTTP接口的测试用例设计

和功能测试一样,在进行接口测试前,需要进行接口的测试用例设计,用例设计也不是凭空想象,我们需要以相关文档为依据

  • 功能测试用例:一般是根据产品需求文档PRD或者交互设计文档来进行设计

  • 接口测试用例:一般是依据接口文档技术方案来进行设计

由于HTTP协议的接口应用非常广泛,下面以HTTP协议接口为例,教大家设计接口测试用例

一个合格的HTTP接口文档,至少应具备如下信息,即请求方式(一般为GET或者POST)、请求URL、请求参数、预期返回结果,举个接口文档的例子

请求方式
Get请求URL
/test/api/getlist请求参数参数名       | 是否必传 | 数据类型 | 说明
source_type	     Y	      int	   来源:百度1;好看2;贴吧3
page	         Y	      int	   页码
per_page	     Y	      int	   每页数量
word             N        string   关键词预期返回结果{"errno": 0,"status": 0,"msg": "success","time": 1637156975,"duration": 0.01242208480835,"requestid": 2975372392
}

开发提供的接口文档可能存在不规范或者压根没有接口文档的情况,这时候需要推动开发补齐信息,不然对测试来说没有接口文档就无法提前设计用例,并且进行测试也比较困难

如果实在没有接口文档,那么测试只能通过CharlesFiddler等抓包工具,通过线上环境或者测试环境抓包获取接口信息

有了接口文档以后,我们就可以开始接口测试用例的设计,而接口测试用例设计的重点,在于功能性的业务逻辑检查参数检查。可以从输入(请求)参数、接口业务逻辑处理、接口输出(返回结果) 三个方面来进行考虑

另外对于客户端功能测试的用例设计方法,如等价类和边界值,在接口测试用例设计对于设计输入参数的部分同样适用,如对于请求参数的有大小限制,运用边界值设计,我们可以分别取最小值最小值-1最大值最大值+1来测试
在这里插入图片描述

接口业务逻辑处理的接口用例设计是重中之重,对于这方面的用例设计,除了仔细看接口文档,还需要我们详细阅读开发写的技术方案,在技术方案当中一般有程序流程图数据流图或者时序图

如以下时序图,我们可以清晰的知道每个接口做了哪些操作,关键参数传递,数据如何存放、消费等,从而方便检查当调用接口后数据的落库情况,以及调用接口后业务逻辑是否符合预期
在这里插入图片描述
用例除了正常的接口功能流程,接口业务逻辑异常场景也需要考虑,常见的异常场景是数据库连接超时、没有满足前置条件,如:某个接口需要先登录获取 sesssion,如果直接调用该接口应该给出相应提示

接口用例设计小结

如果输入参数、接口业务逻辑处理(正常与异常流程)、返回结果这三个方面考虑全面的话,接口的功能测试用例基本可覆盖以下三点:

  • 主流程测试用例:正常的主流程业务需求校验
  • 分支流程测试用例:正常的分支流程需求校验
  • 异常流程测试用例:异常业务场景的容错校验

代码覆盖率是用来量化接口测试用例的覆盖程度,想要了解的朋友可以看下我之前的文章《什么是代码覆盖率》

HTTP接口的测试方法

接口测试用例设计完毕后,我们就可以开始正式进行接口测试了,一般接口测试都是对单个接口按照接口用例逐一进行测试

而接口测试方法,最开始可以使用Postman等工具进行手工测试,然后我们可以用Python或者JAVA编写代码进行自动化测试,自动化测试的代码可以逐步完善形成我们的测试框架,在回归测试时解放双手,提高测试效率

手工测试

可以用来做接口测试的工具非常多,PostmanPostWomanIntelliJ IDEA 的 HTTP ClientJMeter等等

我这里还是给大家简单介绍一下Postman的常用功能,其他工具使用在以后的文章当中再为大家介绍

为了方便演示,我这里先使用Charles抓包获取某个接口信息(正常的接口测试流程,开发会提供接口文档,但这时候没有,我们就自己抓把),设置好Charles的代理后(还不知道怎么使用Charles可以看我以前的文章《Charles从入门到精通》),打开B站网页版
在这里插入图片描述
经过我的一番观察,看到了B站的接口地址,我们就用ranking/region这个接口来演示,在Charles的界面,我们可以看到这个接口URL,请求方式是GET,请求参数有两个(分别是rid和day),Cookies等信息
在这里插入图片描述
HTTP请求Header里面,有几个比较重要的属性,这里统一讲解一下

  • Cookie:Cookie里面传递的参数一般都是用来确认用户身份、鉴定角色权限等,一些依赖登陆校验的接口,必须传入合法的Cookie,才能正常返回结果
  • Content-Type:该字段出现在请求Header时,在它被用来告诉服务端如何处理请求的数据,出现在响应Header时,会告诉客户端(一般是浏览器)如何解析响应的数据。Content-Type常见有4种类型,application/x-www-form-urlencoded(键值对),application/json(json格式),text/xml(xml格式),multipart/form-data(字节流二进制格式)
  • Content-Length
  • HOST:它表示访问的服务器域名,也可以是ip地址。如果发送HTTP请求时,携带的该字段域名无法正常解析出IP,找不到服务器资源,就会报404
  • Connection:值为keep-alive,表示需要持久连接(长连接)
  • User-Agent:它说明请求是从什么浏览器发出去,我们程序当中可以模拟UA,前端或者后端会根据UA来判定用户是来自于PC浏览器,还是手机APP,来返回不同的页面
  • Accept:表示客户端可以接收的类型,如Json
  • Accept-Encoding:设置为gzip、deflate、br,表示可以支持的Web服务器返回内容压缩编码类型
  • Accept-Language:表示接受的语言
  • Sec-Fetch-Site和Sec-Fetch-Mode:JavaScript中对跨域的相关设置

抓取到接口信息后,除了手动填写接口信息到Postman当中,我们还可以通过Charles拷贝CURL功能,直接导入到Postman,省去手动填写的时间
在这里插入图片描述
在这里插入图片描述
最后一步,在Postman点击Send按钮,我们就成功用Postman模拟浏览器发送了一个HTTP请求用于手工测试,接口的返回值我们可以和开发给的接口文档进行对比,当发现和预期不符时,排除环境等因素,我们就可以跟开发报Bug了
在这里插入图片描述
再安利一个Postman的实用功能,可以看到上图我们的域名是写死的,在日常测试当中,如果我们接口用例非常多,在线下测试、上线回归都会用到不同的域名或者ip地址,这时候如果写死域名,就需要一个个手动修改非常麻烦,我们可以设置环境变量,直接修改环境变量就可以修改域名地址
在这里插入图片描述
切换环境变量,把接口域名替换成环境变量就OK了,格式为{{环境变量名}}
在这里插入图片描述

自动化测试

当接口手工测试完毕后,我们就可以着手进行接口自动化测试用例以及相关代码的编写,使用 Python 或者 Java等语言结合自动化测试框架,编写自动化测试脚本,实现接口自动化测试、结合持续集成自动执行及自动发送测试报告等环节

接口自动化测试框架,我们可以自己造轮子,也可以使用成熟的框架,一个好的接口自动化测试框架应该涵盖以下几点:

  • 流程方面:在回归阶段加强接口各种场景的覆盖度,并逐步向系统测试, 冒烟测试阶段延伸,最终达到全流程自动化。
  • 结果展示:更加丰富的结果展示、趋势分析,质量统计和分析等
  • 问题定位:报错信息、日志更精准,方便问题复现与定位
  • 结果校验:加强自动化校验能力,如数据库信息校验

先说一下自己造轮子,我这里用Python给大家例子,下面这段代码就可以实现发送HTTP请求,但接口URL域名都是写死的,我们需要改写,把公共的部分抽象出来

# Python代码中引入requests库,引入后才可以在你的代码中使用对应的类以及成员函数
import requests
# 建立url_index的变量,存储战场的首页
url_index='http://127.0.0.1:12356/'
# 调用requests类的get方法,也就是HTTP的GET请求方式,访问了url_index存储的首页URL,返回结果存到了response_index中
response_index = requests.get(url_index)
# 存储返回的response_index对象的text属性存储了访问主页的response信息,通过下面打印出来
print('Response内容:'+response_index.text)

抽象出一个Common类

# 定义一个common的类,它的父类是object
class Common(object):# common的构造函数def __init__(self,url_root):# 被测系统的跟路由self.url_root = url_root# 封装你自己的get请求,uri是访问路由,params是get请求的参数,如果没有默认为空def get(self, uri, params=''):# 拼凑访问地址url = self.url_root + uri + params# 通过get请求访问对应地址res = requests.get(url)# 返回request的Response结果,类型为requests的Response类型return res# 封装你自己的post方法,uri是访问路由,params是post请求需要传递的参数,如果没有参数这里为空def post(self, uri, params=''):    # 拼凑访问地址    url = self.url_root + uri    if len(params) > 0:    # 如果有参数,那么通过post方式访问对应的url,并将参数赋值给requests.post默认参数data   # 返回request的Response结果,类型为requests的Response类型   res = requests.post(url, data=params)    else:# 如果无参数,访问方式如下# 返回request的Response结果,类型为requests的Response类型res = requests.post(url) return res

最后看看如何调用

# Python代码中引入requests库,引入后才可以在你的代码中使用对应的类以及成员函数
from common import Common
# 建立uri_index的变量,存储战场的首页路由
uri_index = '/'
# 实例化自己的Common
comm = Common('http://127.0.0.1:12356')
#调用你自己在Common封装的get方法 ,返回结果存到了response_index中
response_index = comm.get(uri_index)
# 存储返回的response_index对象的text属性存储了访问主页的response信息,通过下面打印出来
print('Response内容:' + response_index.text)
# uri_login存储用户接口路径
uri_login = '/login'
# username变量存储用户名参数
username = '123456'
# password变量存储密码参数
password = '123456'
# 拼凑body的参数
payload = 'username=' + username + '&password=' + password
response_login = comm.post(uri_login,params=payload)
print('Response内容:' + response_login.text)

完成到这里,我们自己只是完成了接口的发送通用化,如何进行用例管理,如何发送测试报告我们都还没有做,往往还是要跟开源的测试框架结合,比如Java的JUnit、Python的Unittest等等

所以洋子还是不太建议自己去手动造轮子,因为成熟的接口自动化框架有非常多,已经非常完善,如果有定制化需求,我们也可以基于这些框架进行二次开发修改,如果用Python,我们可以使用unittest/pytest/robotframewok/httprunner/nose等等。如果用Java,可以使用Junit/TestNG/REST-assured等框架

我自己之前已经写过robotframewok框架的使用教程,感兴趣可以查看文章《在培训机构也学不到的Robot Framework自动化测试企业级实战教程》

接口测试策略

前面我们所谈到的接口测试,都是对接口的功能层面进行测试。如果接口需要承载的QPS非常高,我们还需要进行接口的性能测试。如果该接口涉及交易等重要场景,还需要进行接口安全测试

结束语

本文跟大家介绍了HTTP接口的测试用例设计以及测试方法,记得要多加练习,我们才能掌握接口测试,如果你觉得这篇文章还不错的话,麻烦点一下【赞】和【在看】


http://chatgpt.dhexx.cn/article/HBx68l5Q.shtml

相关文章

接口测试入门(一)-HTTP协议基础

- 接口功能测试算是测试工程师绕不过去的一个重要技能。 - 而掌握接口测试,需要先知道什么是HTTP协议。 - 原理虽然很枯燥,但是同时也很重要。打好基础的情况下,才能将知识体系建的更高、更扎实 目录 一、HTTP协议基础-定义与起源 二、HTTP…

接口测试(http协议,get和post请求和响应)

TCP/IP四层协议模型 HTTP协议 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网 络协议。是基于TCP/IP模型的应用层协议。 为什么叫超文本?不但可以传输文本数据,还可以传输音频、视频、超链接、…

HTTP接口测试

目录 一、什么是HTTP 1、定义 2、HTTP工作架构 3、结构(取自菜鸟网站) 3.1 客户端请求消息 3.2 服务端请求消息 二、如何进行HTTP接口测试 三、HTTP常用请求方式 1、GET请求 1.1 不带参数的GET请求 1.2 带参数的GET请求 2、POST请求 2.1 …

CAD图纸如何从低版本转换成高版本

我今天在绘制CAD图纸的时候突然发现,换个电脑后绘制好的CAD图纸打不开了。之后分析才发现是之前绘图的时候,保存的CAD图纸版本过低。这就需要把CAD图纸从低版本转换成高版本。今天小编就在这里给大家演示一下。 1.在电脑浏览器里搜索 xun jie CAD&#…

免费在线转换,CAD转换成PDF

为了提高我们绘图工作的效率,经常需要转换CAD文件的版本格式,例如把CAD转换成PDF格式。有没有一种不需要安装转换软件就可以快速操作方法呢?今天小编给大家介绍一种行之有效的方法,在线CAD转换器就可以帮我们快速完成这一操作。 …

cad转换器高版本转低版本怎么转?

CAD图纸由于版本过高导致无法查看和传输,是CAD制图工作中的小伙伴们都会遇到的问题之一。这一问题虽然不是什么大问题,但是也非 常影响我们正常的制图工作,该如何解决呢?今天我们就一起讨论一下,cad转换器高版本转低版…

cad批量转换低版本如何实现?

在CAD制图工作中,我们可能会遇到一些比较麻烦的问题。其中就有CAD图纸由于版本过高导致无法打开查看的问题,而且有时候CAD图纸过多,若是每 一张单独查看也会很麻烦。这时候该如何解决呢?cad批量转换低版本如何实现?今天…

怎么把高版本的CAD文件转换成低版本的

我们在打开CAD文件的时候有经常出现打不开的现象,这时候软件就会提示CAD版本过高,这时候就需要将CAD文件转换低版本了,那么怎么把高版本的CAD文件转换成低版本的呢? 这里小编就用迅捷PDF在线转换器,教大家CAD版本转换。…

CAD版本转换怎么操作?几个步骤教会你

CAD是建筑设计行业经常使用的图纸文件,但是有些图纸的格式可能会因为版本太高或者太低而打不开。不知道小伙伴们遇到这种情况是不是也束手无策呢?其实我们只需要使用一些软件来转换CAD版本即可。那么小伙伴们知道CAD版本转换怎么操作吗?还不了…

CAD版本转换怎么操作?这些方法了解了吗

目前市场上有很多CAD版本。每个人的使用习惯和计算机配置都不一样。不同版本的CAD软件生成不同的CAD文件。虽然制作CAD文件的操作方法相似,但新旧版本存在兼容性问题。高版本的CAD软件可以看到低版本软件制作的设计图纸,但低版本工具看不到高版本工具制作…

cad在线转换低版本_资源分享/CAD版本转换器

我们收集你的掌上玩物,我们COPY YOU。 YOU知唔知 CAD转换器 ◎消息来源:网络资源平台 文件预览 使用说明 1.将高版本文件拖动到转换器界面中打开 2.文件——另存问——类型选择低版本CAD格式,保存后的低版本文件就可以直接使用低版本CAD打…

CAD怎么转换版本?两个办法解决

CAD怎么转换版本?CAD文件相信建筑设计等相关行业的小伙伴都不会陌生,经常跟它打交道。它本身有不少版本,有时候同事发来的文件版本和我们的软件版本不同导致不兼容,这时候要进行处理就会比较麻烦,有没有什么方法能快速…

CAD如何免费转换PDF格式

有的时候,我们需要将我们的CAD文件转出PDF格式的文件发给客户,以便客户打开查看,那么我们如何将CAD文件转换为PDF格式?今天和大家分享一种简单的操作方法,并且是免费试用的。 1,首先打开百度首页,用“Speedpdf”作为关…

高版本CAD如何降低版本?来看这种降低版本方法

CAD文件的版本过高,我们该如何将它降低呢?如果有的小伙伴工作是关于CAD绘图方面的,就会经常使用CAD编辑软件,有时候在打开CAD文件时,会发现文件打不开,原因可能是文件本身受到损害,还有可能就是…

CAD版本怎么转换?试试这种方法

相信很多从事CAD绘图的小伙伴们对CAD版本转换应该不陌生吧,对于CAD版本通常有两种问题,一是CAD高版本可以打开低版本的图纸,相反低版本不能打开高版本图纸;二是高版本图纸转换为低版本可以直接在工具中另存为文件,就可…

怎么把高版本CAD转换成低版本?CAD版本转换方法分享

某些情况下,较新的CAD软件版本可能不被较旧的CAD软件版本所支持。如果你需要与使用较旧版本CAD的人进行交流、共享或协作,将高版本CAD转换为低版本可以确保文件能够顺利打开和编辑。那么问题来了,怎么将高版本CAD转换成低版本呢?教…

cad高版本怎么转换成低版本?这个办法挺实用

CAD软件是工程师、建筑师和设计师等专业人员最常用的工具之一。随着时间的推移,CAD软件的版本也在不断更新。但是,有时候你可能会遇到需要将CAD高版本转换为低版本的情况,比如在与其他人员合作时,他们使用的CAD软件版本比你的低。…

CAD版本转换怎么转?简单几步帮你解决

从事CAD相关行业的小伙伴每天都会接触到很多CAD图纸文件,有些图纸的格式会因为版本太低或者太高导致文件打不开。需要使用CAD版本转换器来转换图纸的版本。有的刚接触这一行的小伙伴就不是很明白怎么转换了,那么CAD版本转换怎么转呢?下面就和…

cad哪个版本最好用?转换软件说明

cad哪个版本最好用?自上世纪问世以来,CAD早已作为制图工作的代表性工具,设计等相关领域的工作者们基本都离不开它。其发展到现在,更新迭代了很多版本,第一次使用可能不清楚哪一版更好用,个人比较推荐的是06…

CAD怎么转换版本?转换器轻松转换

在工程制图和设计过程中,不同的CAD版本可能会导致文件不兼容的问题。有时候,我们需要将CAD文件从一个版本转换为另一个版本,以便进行进一步编辑或与其他人共享文件。这时候,CAD转换器就是一个非常实用的工具,它能够帮助…