软件测试: 从入门到实践 (接口测试)

1.什么是接口

接口通常来说有两种,一种是系统内部的接口,一种是系统对外的接口.

  1. 同一个系统中模块和模块间的接口/前后端联调接口 --内部接口

方法与方法之间,模块和模块之间的交互, 程序内部设定的接口,比如博客系统,有登录模块,发帖模块,想要发帖必须要先登录,那么这两个模块之间就会设定一个内部的接口供系统内部进行调用. 而且前端通过对象/数组等存储的登录数据信息,也需要发送给后端来进行校验,此时就需要后端为前端提高一个可以发送,接收信息的接口.

  1. 另一个是跨系统平台的对接 --外部接口/第三方接口 --

比如想从别的网站或者服务器获得信息或资源或者现有的功能,别人肯定不会把数据库和程序源码共享给你,他们只能通过设定好的接口来供你获得数据,你使用他们提供的接口就能达到数据共享,功能共享的目的.比如京东/LeetCode等web应用的 手机验证码登录,微信登录,微信支付,支付宝支付等功能

2.什么是接口测试

接口测试

说通俗一点,接口测试就是不通过页面操作系统,而是直接和后端接口打交道。在功能测试中,测试人员通常需要打开页面、输入数据、点击按钮,通过前端把数据传递给后端,再观察页面的变化是否符合预期,这个过程中不仅要关注功能是否正确,还要考虑页面展示、前端交互等因素。而接口测试完全跳过了这些步骤,它没有页面,也不关心界面效果。

接口测试是根据接口文档中定义的接口地址、请求方式和参数,直接拼接请求报文发送给后端接口,然后检查接口返回的数据是否正确。测试的核心就是输入什么参数,接口会返回什么结果,通过对比实际返回值与预期结果,判断接口功能是否正常,以及在异常或非法参数情况下是否具备良好的安全性和稳定性。

从这个角度来看,接口测试的逻辑比功能测试更加直接。它只关注数据的传入和传出,不涉及 UI 展示,也不涉及用户操作流程,因此在理解和执行上相对更简单一些。但这种"简单"并不意味着不重要,相反,接口是系统各个模块之间交互的关键,一旦接口出现问题,前端页面再完善也无法正常工作。

接口文档

接口通常是通过接口文档来进行说明和约定的。接口文档的作用,就是告诉调用方这个接口是做什么的、该怎么调用、需要传什么数据,以及会返回什么结果。一般来说,一份完整的接口文档都会包含接口说明、调用的 URL、请求方法(如 GET 或 POST)、请求参数及参数类型说明,以及返回参数的说明。通过接口文档,开发者或测试人员可以在不查看源码的情况下,正确地调用接口并验证其功能。

接口文档在软件项目开发过程中非常重要,接口文档是连接前端开发和后端开发的一座桥梁。

在项目开发之初,前端开发和后端开发会共同去约定一套接口规范,然后由后端开发去编写接口文档,然后前后端就可以按照约定去进行协同开发。

接口文档的管理和编辑有多种方式:

  • 有的团队习惯用wiki或者在线文档去编写接口文档;
  • 有的团队喜欢用专业的接口文档工具,比如:Swagger、Yapi . Knife4j等去生成接口文档。

**swagger 对多种编程语言/框架 都提供了良好的接入方案。**就拿Java来说,只需要引入相应的jar包,在接口上添加相应的api文档注解,就可以自动生成网页版的接口文档。

并且还可以通过接口文档去对接口进行调试,大大提高了开发效率。

但不管是以何种方式去管理和维护接口文档,接口文档都是必须要有的。

测试接口文档可以参考以下测试点:

  1. 确保开发必须提供接口文档。如果开发没有写接口文档的习惯,应push开发去写接口文档。
  2. 检查接口文档的格式内容等是否完备,包括:URL、请求方法、Header、入参、返回值、示例Demo等。
  3. 检查接口设计是否符合公司规范。包括接口命名、接口格式、字段命名、字段类型、响应状态码、接口容错、字段是否冗余、接口是否鉴权、是否做版本区分等等。

header 本质上也是随请求一起发送到服务器的数据,但它的作用和普通入参并不完全相同。header 是 HTTP 协议中的一部分,通常用于存放一些与业务无关、但与请求本身密切相关的信息,比如 cookie、token、认证信息、客户端标识等。这些信息主要用于身份校验、安全控制或请求上下文的管理,而不是直接参与业务逻辑计算。

入参

入参则更多是为了完成具体的业务功能,例如查询条件、提交的数据内容等。服务器在接收到请求时,通常会先解析 header 中的信息,判断当前请求是否具备访问权限或是否通过了身份验证。如果校验不通过,请求可能会被直接拦截,业务逻辑不会继续执行。只有在 header 校验通过之后,服务器才会进一步处理请求地址和入参,根据入参内容执行业务逻辑,并最终返回对应的出参结果。

因此,虽然 header 和入参都是发送到服务器的参数,但它们的关注点不同。header 更偏向于"你是谁、你有没有权限访问",而入参更偏向于"你要做什么、你传了什么数据"。在接口测试中,这两者同样重要,缺少或配置错误都可能导致接口调用失败。

swagger的接口文档展示:

(这个接口文档并非是测试人员编写,而是开发人员编写的):

3.接口测试的前提

http,https,cookie/session/token,get/post

学习链接如下:

token鉴权-CSDN博客

JavaWeb核心技术之会话技术SessionAndCookie(图解版)_咖啡的电脑程序代码是什么-CSDN博客

软件测试: 从入门到实现(GET/POST请求的区别)-CSDN博客

​HTTPS是如何确保安全的-CSDN博客

4.接口测试重要性

看完这一篇文章你就能知道接口测试的重要性了

Java后端开发数据校验工作_java 后端校验并在页面显示-CSDN博客

接口本质上就是前端页面、APP 等客户端与后端系统进行数据交互的通道。很多人会有一个疑问:既然功能测试已经测得很完整了,页面上的功能也都正常,为什么还要单独去做接口测试呢?

可以通过一个很常见的例子来理解这个问题。假设系统中有一个用户注册功能,需求中规定用户名长度为 6~18 个字符,只能包含字母(区分大小写)、数字和下划线。在做功能测试时,测试人员通常会在页面上验证这些规则,比如输入 20 个字符、输入特殊符号等,看系统是否给出提示。但这些校验,很有可能只是前端做的校验逻辑。

如果后端并没有做同样严格的校验,而有人通过抓包工具绕过前端,直接构造请求把非法的用户名参数发送给后端,那么这些原本在页面上"过不去"的数据,就可能被后端正常接收并处理。试想一下,如果用户名、密码等关键信息在后端没有校验限制,攻击者完全可以随意构造请求参数,甚至进一步通过 SQL 注入等手段绕过登录校验,获取不该拥有的权限,后果是非常严重的。

也正是在这种场景下,接口测试的必要性就体现出来了。接口测试不依赖页面,不受前端校验逻辑的影响,可以直接验证后端是否真正按照需求实现了参数校验、异常处理和安全控制。很多在页面操作中根本发现不了的问题,往往可以在接口层被暴露出来。

通过接口测试,可以有效检查系统在异常输入情况下的处理能力,验证接口是否具备基本的安全性和稳定性。同时,由于接口是前后端之间的契约,只要接口定义不变,前端页面即使发生调整,后端逻辑也无需频繁修改,这对于系统的长期维护和扩展来说尤为重要。

5.接口测试的流程

1、分析接口文档和需求文档

分析接口文档或者需求文档一般会去找测试点,那么接口测试的测试点我们一般从几种方向去找

功能性测试点

性能测试点

安全性测试点

2、编写接口测试计划

测试计划就是功能测试计划基本一样就是知名的5w1h了

  1. why------为什么要进行接口测试; 2) what---测试接口包括哪些; 3) when---测试接口不同阶段的起止时间; 4) where---相应接口文档,接口缺陷的存放位置,测试环境等; 5) who---项目有关人员组成,哪些接口分配给哪些人; 6) how---使用哪些测试工具以及测试方法进行测试。

3、编写接口测试用例

测试用例就是根据具体的哪个接口来编写,一般会分为单接口和多接口两种场景来编写测试用例

  1. 单接口场景的测试

正向数据:也就是能正常发送请求,正常获取响应的数据,一般我们从三个方面去组织:

所有必填参数

全部参数(必填参数+选填参数)

参数组合(必填参数+某些选填参数)

反向测试:用不属于规定范围的数据区发送请求检查服务器能否正常处理

异常数据:数据为空,长度过多或者过少(边界值外),类型不符(需要数字类型传递str类型),错误的数据

异常的参数:不传参数,少传参数,多传参数,传递错误的参数

异常的业务数据:结合业务功能考虑输出的各种异常返回情况

  1. 多接口场景的测试

业务场景功能测试(站在用户角度考虑常用的使用场景)

多业务场景功能测试主要是测试接口之间数据依赖

4、接口测试执行

根据设计的测试用例就可以执行测试用例当然执行的方式有几种

  1. 使用postman之类的工具,一个一个进行测试,这种方式我们叫做手工测试

  2. 使用jmeter之类的有自动化功能方式进行测试,这种叫做工具自动化测试

  3. 我们可以自己编写测试脚本,使用测试脚本自动加载测试,这种就是自动化测试了

5、生成接口测试报告

测试完成了以后就可以生成测试报告了

相关推荐
小鸡吃米…2 小时前
带Python的人工智能——计算机视觉
人工智能·python·计算机视觉
玄同7653 小时前
Python 数据类型:LLM 语料与 API 参数的底层处理逻辑
开发语言·人工智能·python·自然语言处理·llm·nlp·知识图谱
databook3 小时前
数据分析师的“水晶球”:时间序列分析
python·数据挖掘·数据分析
技术路上的探险家4 小时前
vLLM常用启动参数的详细解释
python·大模型·qwen·vllm
WHJ2264 小时前
记录解决jupyter打开闪退
ide·python·jupyter
老歌老听老掉牙4 小时前
1V1砂轮轮廓的几何建模与可视化分析
python·sympy·砂轮
浔川python社4 小时前
浔川社团关于福利发放方案再次调整的征求意见稿公告
python
玄同7654 小时前
Python 真零基础入门:从 “什么是编程” 到 LLM Prompt 模板生成
人工智能·python·语言模型·自然语言处理·llm·nlp·prompt
hakesashou4 小时前
python 随机函数可以生成字符串吗
开发语言·python