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

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、生成接口测试报告

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

相关推荐
降临-max9 分钟前
Charles-抓包分析、HTTPS、弱网测试、Breakpoint
软件测试·charles·抓包工具·弱网测试·断点测试
青 春 记 忆6 小时前
Dify Docker Compose 通用无损升级指南:从备份、双版本预演到切换与回滚
运维·人工智能·python·docker·容器
GlueNa2SiO36 小时前
03-Flask模板引擎Jinja2详解
笔记·python·flask
临沂GEO8 小时前
GEO搜索优化科普|正规地理位置流量运营入门指南
大数据·人工智能·python·流量运营
大模型码小白8 小时前
Spring AI Tool 实现自然语言操作 MySQL 数据库详解
服务器·开发语言·数据库·人工智能·python·mysql·spring
荷蒲10 小时前
【小白量化Qbuddy】利用AI学习中文Python
人工智能·python·学习
数据狐(Datafox)11 小时前
京东商品列表API技术解析与落地应用(含标准 JSON 示例)
java·大数据·前端·人工智能·python·数据分析·json
量化吞吐机11 小时前
2026年下半年手工交易规则走向量化表达,产品该先接住哪一步
人工智能·python
Metaphor69212 小时前
使用 Python 读取和删除 Excel 文件属性
python·excel
迷迭香yy13 小时前
Python构建转融券多空识别系统从接口到因子的全流程 IG50免费开源股票数据API接口
开发语言·python·开源