【收藏】什么是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自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第十二届蓝桥杯省赛CC++ 研究生组

十二届省赛题 第十二届蓝桥杯省赛C&C 研究生组-卡片 第十二届蓝桥杯省赛C&C 研究生组-直线 第十二届蓝桥杯省赛C&C 研究生组-货物摆放 第十二届蓝桥杯省赛C&C 研究生组-路径 第十二届蓝桥杯省赛C&C 研究生组-时间显示 第十二届蓝桥杯省赛C&C 研究生组…

AI PPT生成工具 V1.0.0

AI PPT是一款高效快速的PPT生成工具,能够一键生成符合相关主题的PPT文件,大大提高工作效率。生成的PPT内容专业、细致、实用。 软件特点 免费无广告,简单易用,快速高效,提高工作效率 一键生成相关主题的标题、大纲、…

TCP | TCP协议格式 | 三次握手

1.TCP协议 为什么需要 TCP 协议 ?TCP 工作在哪一层? IP网络层是不可靠的,TCP工作在传输层,保证数据传输的可靠性。 TCP全称为 “传输控制协议(Transmission Control Protocol”)。 TCP 是面向连接的、可靠…

YOLOV9训练自己的数据集

1.代码下载地址GitHub - WongKinYiu/yolov9: Implementation of paper - YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information 2.准备自己的数据集 这里数据集我以SAR数据集为例 具体的下载链接如下所示: 链接:https:/…

备战蓝桥杯Day34 - 每日一题

题目描述 解题思路 1.输入数据n,并将字符串类型转换成整数类型 2.求出输入n是2的几次幂(调用math库中的求对数的方法),在下面的循环中要用到 3.定义sum和,将抽取到的牌的总数加起来存储 4.count 0 # 记录 2 的第几…

算法打卡day20|二叉树篇09|Leetcode 669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树

算法题 Leetcode 669. 修剪二叉搜索树 题目链接:669. 修剪二叉搜索树 大佬视频讲解:修剪二叉搜索树视频讲解 个人思路 把这道题想复杂了,还想着如何去重构树 解法 递归法 依旧递归三步走 1.确定递归函数的参数以及返回值 这题递归需要返回值&#…

探索人工智能基础:从概念到应用【文末送书-42】

文章目录 人工智能概念人工智能基础【文末送书-42】 人工智能概念 人工智能(Artificial Intelligence,AI)作为当今科技领域的热门话题,已经深刻地影响着我们的生活和工作。但是,要理解人工智能,我们首先需…

【OpenSSH】Windows系统使用OpenSSH搭建SFTP服务器

【OpenSSH】Windows系统使用OpenSSH搭建SFTP服务器 文章目录 【OpenSSH】Windows系统使用OpenSSH搭建SFTP服务器一、环境说明二、安装配置步骤1.下载完成后,传至服务器或者本机并解压至C:/Program Files/目录下2.打开PowerShell终端3.进入到包含ssh可执行exe文件的文…

物联网和工业物联网的区别——青创智通

工业物联网解决方案-工业IOT-青创智通 物联网(IoT)和工业物联网(IIoT)作为现代科技的重要分支,正在逐渐渗透到我们的日常生活和工业生产中。它们的应用范围广泛,涵盖了从智能家居到自动化工厂的多个领域。…

类于对象(上)--- 类的定义、访问限定符、计算类和对象的大小、this指针

在本篇中将会介绍一个很重要和很基础的Cpp知识——类和对象。对于类和对象的篇目将会有三篇,本篇是基础篇,将会介绍类的定义、类的访问限定符符和封装、计算类和对象的大小、以及类的 this 指针。目录如下: 目录 1. 关于类 1.1 类的定义 2 类…

Windows Insiders WSLg Linux GUI App 支持尝鲜

2021 年 4 月 21 日,微软在 Developer Blogs 发布了 Windows 预览版 WSL(Windows Linux 子系统) 对 Linux GUI App 的支持的公告🔗,碰巧😀我最近重装了波电脑,系统换成了 Windows Insiders&…

Python Flask框架 -- 模版渲染、模版访问对象属性、过滤器与自定义过滤器

模版渲染 使用 render_template 来渲染模板 from flask import Flask, render_templateapp Flask(__name__)app.route(/blog/<blog_id>) def blog_detail(blog_id):return render_template(blog_detail.html, blog_idblog_id, username核)if __name__ __main__:app.r…

ByteTrack多目标跟踪——YOLOX详解

文章目录 1 before train1.1 dataset1.2 model 2 train2.1 Backbone2.2 PAFPN2.3 Head2.3.1 Decoupled Head2.3.2 anchor-free2.3.3 标签分配① 初步筛选② simOTA 2.3.4 Loss计算 项目地址&#xff1a; ByteTrack ByteTrack使用的检测器是YOLOX&#xff0c;是一个目前非常流行…

C++程序变量的引用

在C中&#xff0c;变量的“引用” 就是变量的别名&#xff0c;因此引用又称为别名。由于引用不是独立的变量&#xff0c;编译系统不给它单独分配存储单元&#xff0c;因此在建立引用时只有声明&#xff0c;没有定义&#xff0c;只是声明它和原有的某一变量的关系。 一、引用变更…

企业员工培训考试系统开发方案

一、项目背景与目标 &#xff08;一&#xff09;项目背景 随着企业对员工培训的重视程度不断提高&#xff0c;传统的线下培训方式已经无法满足现代企业的需求。为了提高培训效果&#xff0c;降低培训成本&#xff0c;需要开发一款企业员工培训考试系统&#xff0c;通过在线课…

马蹄集oj赛(双周赛第二十三次)

目录 数列分割 小码哥的地毯 小码哥的三色墙 palace 高数考试 新全排列 黑白双煞 等差 数三角形 区间修改 相对马高 小码哥剪绳子 数列分割 难度:黄金 时间限制:1秒巴 占用内存:64 M 小码哥给你一个长度为n的数列&#xff0c;求将该数列分割成两个左右两个部分且两…

OceanPen Art AI绘画系统 运营教程(二)AI视频AI创作PPT

在一个崇高的目标支持下&#xff0c;不停地工作&#xff0c;即使慢&#xff0c;也一定会获得成功。 —— 爱因斯坦 演示站点&#xff1a; ai.oceanpen.art 官方论坛&#xff1a; www.jingyuai.com 登陆后台 ppt密匙设置 导航菜单配置 Key池管理 二、前端显示 体验站点…

哲♂学家带你深♂入了♂解结构体及结构体内存大小问题

目录 概要 一、结构体的声明 二、结构体变量的创建和初始化 三、结构体的特殊声明 四、结构体内存对齐 1、对齐原则 2、例一 对齐数 计算方法 3、例二 总结 概要 结构体是我们日常编程中经常要用到的一种自定义类型&#xff0c;使用起来也是十分的方便。接下来就由…

计算机二级Python题目3

题目来源&#xff1a;计算机二级Python半个月抱佛脚大法&#xff08;内呈上真题版&#xff09; - 知乎 目录 1. 基础题 1.1 基础题1 1.2 基础题2 1.3 基础题3 2. turtle绘图题 3. 大题 3.1 大题1 3.2 大题2 1. 基础题 1.1 基础题1 a,b,ceval(input()) ls[] for i in …

2核4G服务器优惠价格和性能测试,2024年

阿里云2核4G服务器租用优惠价格&#xff0c;轻量2核4G服务器165元一年、u1服务器2核4G5M带宽199元一年、云服务器e实例30元3个月&#xff0c;活动链接 aliyunfuwuqi.com/go/aliyun 活动链接如下图&#xff1a; 阿里云2核4G服务器优惠价格 轻量应用服务器2核2G4M带宽、60GB高效…