【收藏】什么是API测试?这是我见过的最全的测试指南!

在最近的部署中,当我被问到“什么是API测试?”时,我正与客户一起制定API测试策略。那时我突然意识到,要描述API测试居然是一件如此具有挑战性的事情,即使你如实地描述了它,也往往听起来很无聊和复杂。

好吧,容我在这里告诉你,API测试并不乏味或复杂。它实际上非常有趣且功能强大,换一种思路和方式来理解它,可以释放你创建真正有效的测试策略的能力。要真正了解如何进行API测试,请继续阅读。

什么是API,如何使用?

在服务开发中,应用程序接口(API)是各种应用程序使用通常由协议定义的通用语言相互通信的一种方式。这些示例是用于RESTful服务的Swagger文档或用于SOAP服务的WSDL。甚至数据库都有接口语言,即SQL。

API就像UI允许人类与应用程序交互的方式一样,使机器之间能够高效地进行通信。

API之所以出色,是因为它们代表了构建块,开发人员可以使用它们轻松地组装各种交互,而不必在每次需要机器进行通信时都重写接口。另外,由于API具有协议,因此只要彼此之间按照API协议进行通信,就可以以完全不同的方式构建希望相互通信的应用程序。这使来自世界各地的不同组织的不同开发人员可以创建高度分布的应用程序,同时可以重复使用相同的API。

当用户与应用程序(即移动应用程序)的前端进行交互时,该前端对后端系统进行API调用,从而通过两种主要方式简化了开发过程:

  1. 开发人员不必担心为每个移动设备或浏览器制作定制的应用程序。
  2. 可以更新或修改不同的后端系统,而不必每次都重新部署整个应用程序。

结果,开发人员可以通过将单个服务集中于完成离散任务来节省时间,而不必花费时间将逻辑写入其应用程序。

标准API使用的一个很好的例子

亚马逊购物服务的文档化API使开发人员可以在创建应用程序时与亚马逊购物进行交互。开发人员可以在其用户体验的适当时间使用Amazon API,以创建无缝的客户旅程。

例如,这可能看起来像这样:

用户体验对应的API调用
1.搜索优质的视频游戏1. SearchItems
2.亚马逊建议使用Minecraft2. GetItems
3.将Minecraft添加到我的购物车3. AddToCart

用户与用户界面进行交互,而应用程序与开发人员定义的后端Amazon API进行交互。只要基础API的行为符合预期,一切就可以很好地工作。

……但是如果量很大的话。

于是,我们得出了测试这些API的重要性。

现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:691998057【暗号:csdn999】

什么是API测试?

那么如何执行API测试?它到底意味着什么?如何进行API测试?与仅在UI级别与应用程序进行交互的用户不同,开发人员/测试人员必须确保任何和所有基础API的可靠性。如果不对API本身进行测试,则开发人员和测试人员将被困于手动测试,就像用户在UI级别上对应用程序进行测试一样,等到整个应用程序堆栈都已构建之后才能开始测试。

相反,你可以改为通过以下方式执行自动API测试:在API级别测试应用程序,设计与基础API直接交互的测试用例,并以此获得众多优势(包括以稳定方式在易于自动化的层上测试业务逻辑的能力)。与手动测试(仅限于验证特定的用户体验)不同,API测试使你能够针对未知情况对应用程序进行防弹。

如何进行API测试?

不同类型的API测试——位置、原因和方式

进行API测试的最佳方法是从下至上构建可靠的测试实践。为此,一种设计测试策略的好方法是遵循Martin Fowler的测试金字塔。金字塔方法建议你在具有UI测试的单元测试的坚实基础之上,构建各种API测试(例如,协议、方案、性能等)。API测试允许你在单元测试无法达到的水平上测试应用程序逻辑。

这些测试策略是互补的。在应用程序的较低层进行更早的测试,可以帮助你“快速失败并尽早报错”,尽早在源头而不是在SDLC中发现缺陷。单元测试很重要,但是目前我们专注于API测试。你如何测试APIS?可以进行哪些测试?他们为什么重要?如何进行API测试?

你如何使用API?

下一节将介绍不同类型的API测试,包括在何处/为什么/如何使用它们。

协议测试

API表示2个或更多应用程序之间的协议。协议描述了如何与接口交互、可用的服务以及如何调用它们。该协议很重要,因为它是沟通的基础。如果协议有问题,那么别的什么都没有用了。

API测试的第一个也是最基本的类型是协议测试,它测试服务协议本身(Swagger,PACT,WSDL或RAML)。这种类型的测试可以验证协议是否正确编写,并且可以由客户使用。该测试通过创建一系列可以拉入协议并验证以下条件的测试来工作:

  • 服务协议是按照规范写的
  • 消息请求和响应在语义上是正确的(模式验证)
  • 端点有效(HTTP,MQ / JMS主题/队列等)
  • 服务协议没有改变

我认为这些是你的第一个“烟雾测试”。如果这些测试失败,则实际上没有理由继续测试该特定服务。如果这些测试通过,则可以继续测试API的实际功能。

组件测试

组件测试就像API的单元测试一样——你想采用API中可用的各个方法,并分别测试其中的每个方法。通过对服务协议中可用的每种方法或资源执行测试步骤来创建这些测试。

创建组件测试的最简单方法是消耗服务协定,并让它创建客户端。然后,你可以使用正负数据对每个单独的测试用例进行数据驱动,以验证返回的响应具有以下特征:

  • 请求有效载荷格式正确(模式验证)
  • 响应有效载荷格式正确(模式验证)
  • 响应状态符合预期(200 OK,返回了SQL结果集,甚至是一个错误,如果你要这样做)
  • 响应错误有效负载包含正确的错误消息
  • 响应与预期的基线匹配。这可以采取两种形式:
  • 回归/差异——响应有效负载在每次调用之间看起来完全相同(自上而下的方法,实际上是你捕获响应的快照并每次都对其进行验证)。这也可能是识别API更改的重要催化剂(稍后会详细介绍)。
  • 断言——响应中的各个元素都符合你的期望(这是针对响应中特定值的更浅显、自下而上的方法)。
  • 服务在预期的时间内响应

这些单独的API测试是你可以构建的最重要的测试,因为它们将在所有后续测试技术中得到利用。当你可以在以后所有不同类型的测试中简单地引用这些单独的API调用时,为什么还要重建测试用例呢?这不仅提高了一致性,而且简化了进行API测试的过程。

场景测试

大多数人在考虑API测试时都会想到场景测试。在这种测试技术中,你将各个组件测试组装成一个序列,就像我上面为Amazon服务描述的示例一样。

获取序列有两种很棒的技术:

  1. 查看用户故事,以识别正在进行的各个API调用。
  2. 练习UI并捕获对基础API的流量。

通过场景测试,你可以了解是否可能通过将不同的数据点组合在一起而引入缺陷。

与客户合作时,我遇到了一个非常有趣的示例。他们采用了一系列服务来呼叫客户的财务资料、可用帐户、信用卡和最近的交易。这些API调用中的每个调用都是单独工作的,但是当你按顺序将它们放在一起时,它们就会开始报错。造成这种情况的原因是一个简单的时间戳,从一个API调用返回时,它的格式与后续请求中期望的格式不同。他们在进行单元测试或冒烟测试时没有意识到这一点,因为他们断言返回时间戳时未指定格式。直到测试整个场景后,才可以清楚地发现,将时间戳从一个呼叫转移到另一个呼叫会导致故障。

场景测试的另一个好处是,当你以未预期的方式使用API时,可以验证预期的行为。发布API时,你将向外界提供一系列构建模块。你可能具有将这些块组合在一起的规定技术,但是客户可能会有无法预料的需求,并且意外地将API组合在一起以暴露应用程序中的缺陷。为了防止这种情况,你会想到使用API的不同组合创建许多方案测试,以使应用程序免受重大故障的影响。

由于组件测试构成了场景测试的基础,因此组织通常拥有大量的场景测试。它们是在引入新功能以模拟客户使用新功能的旅程时构建的。这样一来,你确实可以减少测试时间,因为你只需要为新功能构建测试,并且你知道自己拥有可靠的基础测试库来捕获任何意外情况。

性能测试

在特定于性能的测试环境中,性能测试通常会降级到测试过程的结尾。这是因为性能测试解决方案往往很昂贵,需要专门的技能,并且需要特定的硬件和环境。这是一个大问题,因为API具有必须满足的服务级别协议(SLA),才能发布应用程序。如果你等到最后一刻进行性能测试,则无法满足SLA可能会导致巨大的发布延迟。

在流程的早期进行性能测试,可以使你在运行完整的回归周期之前发现与性能相关的问题。如果你到目前为止一直遵循测试过程,那么实际上将非常容易,因为你拥有执行性能测试所需的所有基础测试用例。你可以简单地进行场景测试,将其加载到性能测试工具中,然后以更多的用户数量运行它们。如果这些测试失败,则可以将失败的原因追溯到各个用户,并更好地了解将受到的影响。然后,管理人员可以利用这种了解来决定是否发布应用程序。

安全测试

安全测试对组织中的所有利益相关者都很重要。如果暴露并利用了安全漏洞,则可能导致严重的声誉损失和财务损失。就像用户会意外地使用你的API一样,用户也可能有意尝试利用你的API。黑客可以掌握你的API,发现漏洞并加以利用。

为了防止此类行为,你需要构建测试案例以尝试执行这些类型的恶意攻击。你可以利用现有的测试用例来执行此操作,因为方案测试可以将攻击向量提供给应用程序。然后,你可以重新使用此攻击媒介来发起渗透攻击。一个很好的例子是将不同类型的参数模糊测试或SQL注入攻击与方案测试结合在一起。这样,通过应用程序传播的任何更改都将由你的安全测试选择。要了解有关API安全测试的更多信息,请查看这篇文章并持续关注。

全渠道测试

由于应用程序与之交互的多个接口(移动,Web,API,数据库等),如果单独测试其中的任何一个,你将遇到测试覆盖率的空白,而忽略了这些接口之间复杂的交互的精妙之处。

全渠道测试通过将API和数据库测试交织到移动和Web UI交互的验证中,全面覆盖了应用程序的许多界面,以确保彻底覆盖测试范围。这意味着要进行一个正在使用其中一个接口并与另一个接口进行协调的测试——执行Web(Selenium)或Mobile(Appium)之类的UI测试,并将它们与你的API或数据库测试中的任何一个交织在一起,从系统通过测试执行。借助有效的全渠道测试,你可以创建稳定、可重用的测试案例,这些案例可以轻松实现自动化。

管理变更

更改是应用程序风险的最重要指标之一。变更可以多种形式发生,包括:

  • 服务的协议消息格式更改
  • 从API添加或删除的元素
  • 底层代码更改会影响返回的数据格式
  • 重新架构服务以将其分解为多个部分(随着组织转向微服务,这种情况极为普遍)

发生更改时,你需要构建测试用例以识别更改并提供补救计划。使用提供分析以解决这些更改的影响的解决方案,将使你了解发生了什么更改并确定受影响的特定测试的目标。

然后可以以模板的形式捕获更改,以使用新功能更新任何基础组件或方案测试。由于其余测试引用了这些测试,因此更改的影响将减少。

总结

建立可靠的自动化API测试策略是确保你的应用程序“今天和昨天一样工作”的最佳方法(这不仅仅是一个容易理解的短语而已)。API测试允许你构建一个可靠的框架来识别应用程序多层中的缺陷。这些测试可以全部自动化并且可以连续运行,因此你可以确保应用程序符合业务期望,同时也能保障功能的精确。由于API测试的工作水平远低于UI测试的水平,因此你知道你需要保持一致性,并且所构建的测试将持续很长时间。

加油吧,少年!你准备开始API测试了吗?但在此之前你还需要弄清楚要使用什么工具。有兴趣的朋友请持续关注后续文章,了解如何为你的组织选择最佳的API测试解决方案。

下面是配套资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

最后: 可以在公众号:自动化测试老司机 ! 免费领取一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!

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

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

相关文章

FloodFill算法——岛屿数量

文章目录 题目解析算法解析代码解析 题目解析 岛屿数量 题目依旧是熟悉的配方,熟悉的味道,还是那个0还是那个1还是那个二维矩阵,这时候BFS和DFS闻着味就来了,我们来看一下这个题目,这个题目也很容易理解如下图有一个…

【No.14】蓝桥杯贪心法|最少硬币问题|活动安排问题(4)|翻硬币|快乐司机|防御力|答疑(C++)

算法优点 容易理解:生活常见 操作简单:在每一步都选局部最优 效率高:复杂度常常是O(1)的 算法缺点 局部最优不一定是全局最优 贪心算法(Greedy algorithm),又称贪婪算法。是一种在每一步选择中都采取在…

教你在PC客户端中集成镭速高速传输插件

企业一直以来对文件传输的速度和安全性都有着严苛的要求,传统的FTP/HTTP传输方式因速度慢、易受网络延迟影响、数据包丢失等问题而不再适应现代企业的需求。镭速高速传输插件应运而生,为企业提供了一个快速、安全的文件传输新选择。本文将详细介绍如何在…

代码随想录算法训练营第day54|392.判断子序列 、 115.不同的子序列

目录 392.判断子序列 115.不同的子序列 392.判断子序列 力扣题目链接(opens new window) 给定字符串 s 和 t ,判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字…

【WEEK4】 【DAY3】整合SSM框架之功能实现—修改、删除数据【中文版】

2024.3.20 Wednesday 接上文【WEEK4】 【DAY2】整合SSM框架之功能实现—总览、添加数据【中文版】 目录 7.6.修改功能7.6.1.修改BookController.java7.6.2.修改allBook.jsp7.6.3.新建updateBook.jsp7.6.4.修改MyBatis-config.xml7.6.5.运行 7.7.删除功能7.7.1.修改BookContro…

unicloud快速上手,unicloud项目创建以及项目创建注意事项

uniCloud快速上手 本项目地址https://gitee.com/qayrup/unicloud-demo 创建unicloud项目 新建一个uni项目,并选择启用unicloud,选择阿里云或腾讯云 阿里云和支付宝云都支持一个月免费的云,如果只想体验啥的,可以选择这两个, 但是需要注意,支付宝云需要配置跨域,否则很多云函…

ModuleNotFoundError: No module named ‘Crypto‘的解决办法

Crypto模块是什么 在Python中,Crypto模块(有时也被称为pycrypto)是一个强大的加密库,它提供了各种加密算法的实现,包括AES、DES、RSA等。 在Python 3中,由于pycrypto库与新版本的Python3不兼容&#xff0…

DES加密原理及python脚本

一、加密 1、秘钥处理 ​ DES算法会先对64位密钥进行处理生成48位子密钥后再参与到算法的轮操作中,在每一轮的迭代过程中,使用不同的子密钥。其中的处理包括置换选择、循环左移、压缩置换。 1.1 置换选择 DES秘钥有64位,其中每8位有一个校…

[HackMyVM]靶场 XMAS

kali:192.168.56.104 靶机:192.168.56.126 注意在/etc/hosts 添加 192.168.56.126 christmas.hmv # cat /etc/hosts 127.0.0.1 localhost 127.0.1.1 kali2 192.168.223.131 dc-2 192.168.223.134 wordy 192.168.56.105 midn…

【嵌入式开发 Linux 常用命令系列 4.3 -- git add 时单独排除某个目录或者文件】

文章目录 git add 时单独排除某个目录或者文件使用 .gitignore 文件使用命令行排除文件或目录 git add 时单独排除某个目录或者文件 在使用 git add 命令时,如果你想要排除特定的目录或文件,可以使用 .gitignore 文件或使用路径规范来指定不想添加的文件…

智能T0算法交易促进年化收益

T0交易越来越得到普及,越来越多的人在关注T0交易。按照交易主体来看,一种是人工T0交易,另一种是自动化智能T0算法交易。人工T0交易会受制于操作员的计算能力、反应速度以及主观判断等因素的影响,稳定性不如智能自动化T0算法交易。…

搭建自己的博客-拾壹博客

写在前面 唠叨两句 作为一个技术开发人员,没有一个自己的博客,人生注定缺少点什么东西,是不是?最近研究了一些博客搭建,本文是使用开源项目”拾壹博客“进行搭建。 推荐等级 所需技术难度:4星 后续自定义…

GPU云服务器与自建GPU服务器的对比

GPU云服务器是一种基于GPU的计算服务,广泛应用于深度学习、图形图像处理和科学计算等领域。其快速、稳定、灵活的特点使其备受青睐。与标准的CVM云服务器一样,GPU云服务器提供方便快捷的管理方式,通过其强大的计算性能,能够快速处…

直播行业网络安全建设

一、引言 直播行业近年来蓬勃发展,吸引了大量用户和资本的关注。然而,随着行业的壮大,网络安全问题也日益凸显。构建一个安全、稳定的直播行业网络对于保障用户权益、维护行业秩序具有重要意义。本文将详细探讨直播行业安全网络的构建与保障…

zookeeper分布式锁原理剖析

在ZooKeeper的CLI中,create命令用于在指定路径上创建一个新的节点。以下是create命令的参数解释: -s:顺序节点标志。如果指定了该选项,则创建的节点将是顺序节点。顺序节点的名称将以“path”后跟一个连字符和递增的数字序列结尾…

基于python+vue食品安全信息管理系统flask-django-nodejs-php

食品安全信息管理系统设计的目的是为用户提供食品信息、科普专栏、食品检测、检测结果、交流论坛等方面的平台。 与PC端应用程序相比,食品安全信息管理系统的设计主要面向于用户,旨在为管理员和用户提供一个食品安全信息管理系统。用户可以通过APP及时查…

在面对一个大型的代码,需要分文件编写的时候,应该怎么办呢;以及在编写出一个功能时,有人想要买这个功能,怎么在不给出源代码的情况下让买家可以使用这个代码功能呢?

我们一点点来,首先,假设我们要写一个加法功能的实现, 这里是在单个文件里调用函数,实现一个加法的功能, 下面我们把自定义函数放在下面,上面对自定义函数进行一个声明, 下面我们把代码放到多个…

httprunner4详解

httpruuner官方文档:https://httprunner.com/docs/introduction/overview/ 案例1:使用电商开源项目演示: 项目地址:https://github.com/macrozheng/mall 案例2:使用erp2项目演示: 开源项目:http://erp2.hzb-it.com/ 1.Httprunner环境搭建 HttpRunner v4.0 同时采用…

大数据--hdfs--java编程

环境: virtualbox ubantu1604 Linux idea社区版2023 jdk1.8 hadoop相关依赖 使用java操作 1. 判断/user/stu/input/test.txt文件是否存在,存在则读出文件内容,打印在控制台上。反之,输出“文件不存在”。 package abc;impo…

【JS进阶】第二天

JavaScript 进阶 - 第2天 了解面向对象编程的基础概念及构造函数的作用,体会 JavaScript 一切皆对象的语言特征,掌握常见的对象属性和方法的使用。 了解面向对象编程中的一般概念能够基于构造函数创建对象理解 JavaScript 中一切皆对象的语言特征理解引用…