什么是API接口测试

什么是 API ?

API 是“应用程序编程接口”的缩写,是一种允许不同应用程序之间相互通信和交换数据的接口。就好像在餐厅点餐一样,你只需要告诉服务员你想要的食物,而不需要了解厨房中的具体操作,服务员会把你的订单传递给厨房,然后将厨师烹饪好的食物提供给你。在这个过程中,服务员扮演的就是一个 API 的角色。同样地,当你使用 API 时,你只需要调用所需的功能和服务,而不需要了解底层的代码实现。因此,API 就像是应用程序和其他软件之间的“中间人”,使它们能够相互通信和交互。

随着数字化的不断深入,软件系统变得越来越复杂,传统的单体架构已经无法满足业务发展的需求。因此,微服务架构应运而生,它将单体架构中的功能分解成多个小型的、自治的服务,每个服务都具有独立的数据存储、业务逻辑和用户界面。这种架构的优点在于,不同的服务可以独立地进行开发、测试和部署,从而加快了软件开发的速度和灵活性。

微服务架构的诞生也使得 API 的数量激增。在单体架构中,整个应用程序只需要一个 API 来实现所有的功能。但在微服务架构中,每个服务都需要一个 API 来与其他服务进行通信,而且服务的数量可能会非常庞大。因此,API 在微服务架构中的作用愈加重要。

为什么要进行 API 测试?

随着 API 数量的激增, API 的质量也变得愈加重要,任何一个错误的 API 都可能会对整个系统产生严重的影响。

API 测试可以检测 API 的功能正确性、可靠性、安全性等方面的问题,帮助开发者在代码部署到生产环境之前,检测和修复潜在的问题,从而提高整个系统的可用性和可靠性。除此之外,API 测试还可以帮助开发者更快地响应业务需求。尤其是在微服务架构中,不同的服务可能会频繁地进行版本迭代和更新,相对于界面测试,API 测试可以更早开始,让系统更快地响应业务需求。

HTTP/HTTPS 协议

API 基于特定协议的通信接口,通过不同的传输协议进行数据传输。在介绍 API 测试之前,还需要了解一下 HTTP 协议的相关特性和规范,这样会更好掌握 API 接口测试。

目前最常见的 Web Service API 包括:SOAP、REST、RPC,我们大多数时间最常接触到的就是 REST 风格的 Web Service。RESTful API 是一种符合 REST 架构风格的 API,它使用 HTTP 协议的请求方法来访问资源,并使用 URIs(Uniform Resource Identifiers)来标识资源。

HTTP 是一种应用层协议,可以支持多种数据格式的传输,包括 JSON、XML 等。HTTPS 则是在 HTTP 上加入 SSL/TLS 加密层的安全传输协议,提供了更高的安全性。HTTP/HTTPS 协议的请求和响应消息都是由报文组成的,请求报文包含请求方法、请求头、请求体等信息,响应报文包含响应状态码、响应头、响应体等信息。

请求报文

HTTP 请求报文的结构一般由三部分组成:请求行、请求头和请求体。其中,请求行包含请求方法、请求 URI(指定客户端请求的资源的URI,包括路径、查询参数等) 和 HTTP 协议版本;请求头包含一些附加信息,例如请求的主机名、浏览器类型等;请求体则包含请求的具体内容,例如表单数据、JSON 数据等。

例如,以下是一个 HTTP 请求报文的示例:

请求 URL

请求 URL(Uniform Resource Locator)是用于定位互联网上资源的地址。它通常由协议类型、主机名、端口号、路径和查询字符串等组成。例如:

www.example.com:8080/api/login?p…

其中:

  • https 是协议类型
  • www.example.com 是服务器地址
  • 8080 是服务器所开放的端口
  • /api/login 是被操作的资源路径
  • param1=value1&param2=value2 是查询字符串

通过请求 URL,客户端可以向服务器发送请求并获取相应的资源。

请求方法

标准的 RESTful 只有 GET、POST、PUT、DELETE 这四种操作。

方法描述
GET(查询)发送请求来获得服务器上的资源,请求体中不会包含请求数据,请求的数据会附在URL之后,以?分隔。
POST(新增)向服务器提交资源( 例如提交表单或上传文件 )。数据被包含在请求体中提交给服务器。
PUT(修改)向服务器提交资源,并使用提交的新资源,替换掉服务器对应的旧资源。
DELETE(删除)请求服务器删除指定的资源。

请求头

请求头(Request Header)是在 HTTP 请求中,客户端向服务器发送请求时所携带的一些附加信息,用于告诉服务器一些客户端的信息和需求。请求头通常包括一些标准的 HTTP 头部字段,例如 User-Agent、Accept、Accept-Encoding、Cookie 等等。这些头部字段可以帮助服务器了解客户端的类型、能力和需求,从而更好地响应客户端的请求。

如在上例中的请求报文中的请求头中:

  • Host:指定了请求的目标服务器地址
  • User-Agent:指定了发送请求的客户端,即使用 Firefox 58.0 浏览器的 Windows 10 操作系统。
  • Accept:指定了客户端能够接受的响应数据类型为 json
  • Content-Type:指定了请求体中的数据类型为 json
  • Content-Length:指定了请求体的长度为 43 个字节

请求体

请求体(Request Body)是在 HTTP 请求中,客户端向服务器发送请求时,携带的一些数据信息,用于告诉服务器客户端需要提交的数据。请求体通常用于 POST、PUT 等请求方法中,用于向服务器提交数据,例如表单数据、JSON 数据等等。

请求体的格式和内容通常由请求头中的 Content-Type 字段指定,例如 application/x-www-form-urlencoded、application/json 等等。服务器可以根据请求体中的数据信息,进行相应的处理和响应。

响应报文

HTTP 响应报文的结构也由三部分组成:状态行、响应头和响应体。其中,状态行包含 HTTP 协议版本、状态码和状态描述;响应头包含一些附加信息,例如响应的内容类型、响应的长度等;响应体则包含响应的具体内容,例如 HTML 页面、JSON 数据等。

以下是一个 HTTP 响应报文的示例:

如何进行 API 测试

API 测试工作主要流程有:

  1. 确定测试目的和范围:首先需要阅读产品设计文档和接口文档,明确要测试的接口的功能和特性,并确定测试的范围,例如测试的是哪些接口、请求和响应的数据格式、参数、返回值等。
  2. 设计测试用例:根据该接口参数,构造不同的用例,测试接口在参数合法及非法情况下能否达到预期效果。
  3. 使用 API 接口测试工具发送请求并验证响应,如 Postman、AREX 等。

接口测试的测试点

接口测试是对系统中的各个接口进行测试,以验证接口的功能、性能、安全等方面是否符合需求和规范。

1. 功能测试

验证接口的功能是否正确实现了、接口是否按照设计文档中来实现。

单接口功能测试:

  • 兼容性测试:验证接口在不同的操作系统、浏览器、设备等环境下的兼容性。
  • 参数验证:验证接口参数的正确性、完整性、合法性等,包括参数类型、长度、格式、范围等。
  • 接口返回值验证:验证接口返回值的正确性、完整性、合法性等,包括返回值类型、长度、格式、范围等。
  • 异常测试:验证接口在异常情况下的处理能力,包括参数错误、数据异常、网络异常、服务器错误等。

多接口的业务场景功能测试:

针对一个或多个业务场景,测试多个接口之间的交互和协作是否正常。这种测试通常需要模拟真实的业务场景,包括多个接口的调用顺序、参数传递、返回结果等,以确保整个业务流程的正确性和稳定性。在测试过程中,需要对每个接口进行单独测试,同时也需要对多个接口之间的交互进行测试,以发现潜在的问题和缺陷。

2. 性能测试

验证接口在高并发、大数据量等情况下的性能表现,包括响应时间、吞吐量、并发数等。

  • 压力测试:模拟多用户并发访问接口,观察接口的性能表现,如响应时间、吞吐量、错误率等。可以使用一些工具来进行压力测试,比如JMeter、LoadRunner等。
  • 负载测试:测试接口在不同负载下的性能表现。负载测试可以分为静态负载和动态负载两种方式。静态负载是指在预定的并发数下测试接口的性能表现,而动态负载是根据实际负载情况动态地调整并发数,以测试接口在不同负载下的性能表现。
  • 并发测试:测试接口在并发访问下的性能表现。并发测试可以通过多线程的方式实现,模拟多用户同时访问接口,观察接口的性能表现。
  • 容量测试:测试接口能够承受的最大负载量。容量测试可以通过逐步增加负载的方式实现,直到达到系统的极限为止,观察接口的性能表现。
  • 稳定性测试:测试接口在长时间运行中的稳定性表现。稳定性测试可以通过长时间运行的方式实现,观察接口在长时间运行中的性能表现。

3. 安全测试

测试接口的安全性,包括其防护能力、认证授权、数据加密等方面的测试。

  • 鉴权和授权测试:测试接口在访问控制方面是否符合预期,验证用户身份和授权是否正确,防止未授权的用户或恶意用户访问系统。
  • 输入验证测试:测试接口在输入验证方面是否正确,验证输入数据的正确性、合法性和格式等,防止恶意用户利用输入数据来攻击系统。
  • SQL注入测试:测试接口是否存在SQL注入漏洞,防止攻击者通过注入恶意SQL语句来获取敏感数据或者破坏系统。
  • XSS测试:测试接口是否存在跨站脚本攻击漏洞,防止攻击者通过在页面中注入恶意脚本来获取用户的敏感信息。
  • CSRF测试:测试接口是否存在跨站请求伪造漏洞,防止攻击者通过伪造用户请求来执行恶意操作。

对于安全测试,需要针对不同的安全风险和威胁,采用不同的测试方法和技术进行测试。同时,也需要考虑测试环境的安全性,如测试数据的保护、测试过程中的安全管理等。为了提高测试效率和覆盖率,可以使用安全测试工具来辅助测试,如漏洞扫描工具、代码静态分析工具等。

发送请求验证响应

这里使用 AREX 进行演示,首先我们需要创建一个接口请求:

添加请求 URL

在地址栏中输入你要发送请求的接口地址。

选择请求方法

新建请求后,请求方法默认选择为 GET,GET 请求将从服务器获取信息。

添加查询参数

Query Parameters 即 URL 中 ? 后的参数,通过 & 分隔多个参数,可以向 Web 应用程序传递附加信息。

配置请求头

如需要随请求发送特定的请求头信息,可以添加请求头键值对。

Body 参数

当你需要将数据从客户端发送给 API 时,则需要随请求发送请求体数据。通常在 PUT 、POST 和 PATCH 请求中会使用到请求体。

使用脚本

脚本分为前置脚本后置脚本两种,分别对应 API 请求前返回数据后的两个阶段。

前置脚本是在 API 请求前执行的 JavaScript 代码,可以使用前置脚本添加认证信息、设置请求超时时间、检查请求参数的格式等。AREX 提供了常用的前置脚本,可直接点击使用。

后置脚本(Tests)是在 API 请求返回数据后执行的 JavaScript 代码。主要用来测试(断言)请求返回结果的正确性。

配置好请求参数后,点击发送即可获取响应。

返回响应

响应框的上方可以看到请求的状态码、请求时间和请求大小。

Response Body 是响应的正文,即从服务器返回的响应内容,内容的数据格式默认为 JSON。

Raw 视图可以查看原始的响应体内容。

Headers 可以看到响应头信息。

如果设置了后置脚本,则可以在 Results 中查看执行脚本的结果。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/416472.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

博弈论---Nim游戏(公平组合游戏,概念,证明异或为0就是必败态,示例)

目录 概念: 公平组合游戏ICG 有向图游戏 Nim游戏 先手)必胜状态 先手)必败状态 如何确定先手是否必胜或者必败(都采用最优策略) 证明:全部异或为0则是必败状态 综上: 例子 概念&#…

如何对比 MySQL 主备数据的一致性?

随着业务范围的扩大,很多企业为了保障核心业务的高可用性,选择了 MySQL 主从架构,这一套方案通常具备主备数据同步、数据备份与恢复、读写分离、高可用切换等特性,是一种相当成熟可靠的数据库架构方案。然而这套方案在特定情况下可…

c#使用log4net的3种调用方法

https://blog.csdn.net/summer_top/article/details/107961245 第一步:下载log4net。 右键项目引用,进入管理NuGet包。 搜索log4net,下载安装。 第二步:创建LogHelper类。 public class LogHelper { private LogHelp…

Java泛型简介

Java泛型简介 Java泛型是在Java 5中引入的一个特性,它允许程序员在编译时指定类、接口或方法能够接受的类型。泛型的主要目的是提供编译时类型安全检查,避免在运行时因为类型转换错误而导致的ClassCastException。 在没有泛型之前,Java中的集…

Spring08、使用注解开发

8、使用注解开发 8.1、说明 在spring4之后&#xff0c;想要使用注解形式&#xff0c;必须得要引入aop的包 在配置文件当中&#xff0c;还得要引入一个context约束 <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.sprin…

SpringMVC 学习(五)之域对象

目录 1 域对象介绍 2 向 request 域对象共享数据 2.1 通过 ServletAPI (HttpServletRequest) 向 request 域对象共享数据 2.2 通过 ModelAndView 向 request 域对象共享数据 2.3 通过 Model 向 request 域对象共享数据 2.4 通过 map 向 request 域对象共享数据 2.5 通过…

采用广度优先搜索-BFS遍历图

基本思想 1.建立一个队列 2.把初始顶点加入&#xff0c;此后每次取出队首顶点进行访问 3.把从该顶点出发可以到达的&#xff0c;未曾加入过队列的顶点全部加入队列 4.不断取出&#xff0c;直至队列为空结束 遍历实现 1.邻接矩阵实现 const int maxn100; const int INF10000…

六自由度Stewart平台的matlab模拟与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1运动学原理 4.2 Stewart平台运动学方程 5.完整工程文件 1.课题概述 六自由度Stewart平台的matlab模拟与仿真&#xff0c;模拟六自由度Stewart平台的动态变化情况以及伺服角度。 2.系统仿真结果 3.核…

Linux安装Nginx配置Keepalived高可用

Vmwaire 安装 Linux 解决启动没有IP地址问题 cd /etc/sysconfig/network-scripts vi ifcfg-ens33# 重启linux reboot # 再次查看ip ip addrLinux 镜像地址下载 ps: 发现阿里有一个工具箱&#xff0c;里面有各种镜像 阿里镜像地址 https://developer.aliyun.com/mirror/ 安装…

web学习笔记(二十一)

目录 1.构造函数创建对象 1.1规则 1.2 new关键字调用构造函数时&#xff0c;函数内部做了什么事情&#xff1f; 1.3总结 2.混合模式创建对象 3.JavaScript 继承---借助构造函数 4.原型链 4.1原型链实现方法继承 5.完美的组合继承 6.call方法的使用 1.构造函数创建对象…

【GB28181】wvp-GB28181-pro快速修改登录页面名称(前端)

引言 作为一个非前端开发人员,自己摸索起来比较费劲,也浪费了很多时间 本文快速帮助开发者修改为自己名称的一个国标平台 文章目录 一、 预期效果展示二、 源码修改-前端三、 验证修改效果一、 预期效果展示 二、 源码修改-前端 需要修改的文件位置: 项目工程下web_src目录…

一、深度学习介绍

目录 1、深度学习与机器学习的区别 1.1 特征提取方面 1.2 数据量和计算性能要求 1.3 算法代表 2、深度学习应用场景 1、深度学习与机器学习的区别 1.1 特征提取方面 1.2 数据量和计算性能要求 1.3 算法代表 2、深度学习应用场景

Linux课程四课---Linux开发环境的使用(vim编辑器的相关)

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; ​&#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382; &#x1f389;&#x1f389;&#x1f389…

CP AutoSar之LIN Driver详细说明

本文遵循autosar标准&#xff1a;R22-11 1 简介 本文指定了 AUTOSAR 基础软件模块 LIN 驱动程序的功能、API 和配置。 1.1 范围 LIN驱动程序适用于ISO 17987主节点和从节点。AUTOSAR中的LIN实现偏离了本LIN驱动器规范中所述的ISO 17987规范&#xff0c;但LIN总线上的行为不…

搜维尔科技:CATIA为建筑、基础设施和城市规划提供虚拟孪生力量

超越传统项目交付方法限制的协作 复杂建筑和基础设施项目开发的设计和工程流程需要多个利益相关者和所有项目阶段的密切合作。此外&#xff0c;日益复杂的施工项目要求所有团队都依赖 CATIA 和3D EXPERIENCE 虚拟孪生技术作为“通用语言”&#xff0c;以促进协作并减少阶段之间…

Pytorch添加自定义算子之(5)-配置GPU形式的简单add自定义算子

参考:https://zhuanlan.zhihu.com/p/358778742 一、头文件 命名为:add2.h void launch_add2(float *c,const float *a,const float *b,int n);

开发前端需求时,我们该如何准确预估个人工时

公众号&#xff1a;程序员白特&#xff0c;欢迎一起交流学习 原文作者&#xff1a;掘金-悟空和大王 前言 分享一篇前端开发人员比较感兴趣的话题&#xff0c;如何评估工时。 领导为什么会压工时&#xff1f; 使他的KPI更好看不清楚做这个东西实际要多长时间因为第2点的原因&…

极狐GitLab 使用指南:开启多种导入导出源

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 极狐GitLab 支持从主流的平台将项目导入到极狐GitLab&#xff…

Qt|QTreewidget类下函数qt助手详解说明示例(上)

该系列持续更新&#xff0c;喜欢请一键三连&#xff0c;感谢各位大佬。 QT5.14.2 参考官方QT助手 文章目录 QTreeWidget ClasspropertiesPublic Functions默认构造函数默认析构函数添加根节点void addTopLevelItem(QTreeWidgetItem *item)添加多个根节点void addTopLevelItems…

图神经网络实战——图论

图神经网络实战——图论 0. 前言1. 图属性1.1 有向图和无向图1.2 加权图与非加权图1.3 连通图非连通图1.4 其它图类型 2. 图概念2.1 基本对象2.2 图的度量指标2.2 邻接矩阵表示法 3. 图算法3.1 广度优先搜索3.2 深度优先搜索 小结系列链接 0. 前言 图论 (Graph theory) 是数学…