作者
Chrystal R. China
Staff Writer, Automation & ITOps
IBM Think
Michael Goodwin
Staff Editor, Automation & ITOps
IBM Think
什么是 API 测试?
API 测试是验证应用程序编程接口 (API) 是否按预期运行的过程。它通常涉及向 API 发送各种数据请求,并确认其响应是否满足可靠性、性能、易用性和安全性预期。
API 测试可检查数据和格式的准确性、错误处理机制、身份验证和授权合规性、兼容性问题、负载问题等。开发团队可以选择手动运行这些测试,或使用软件来自动执行测试并最大限度提高流程效率。无论采用哪种方法,全面的 API 测试都需要依靠一系列测试方法来确保 API 和应用程序的最佳性能及安全性。
现代应用程序通常为三层结构,即数据层、服务(或应用程序)层和表示层。服务层包含应用程序的业务逻辑(和 API 的核心功能),同时决定了 API 如何与其他应用程序组件和功能进行通信。
从历史上看,开发人员会在软件开发生命周期结束时实施 API 层测试。然而,如今许多企业正在采用 API 优先的开发战略,即开发团队将应用程序构建为通过 API 交付的服务网络。
维护优化的 API 对于 API 优先的方法至关重要,因此开发人员通常选择在生命周期的早期纳入 API 测试实践。这种主动方法(称为“左移”)可帮助团队更早地发现和修复问题,防止代价高昂的错误和项目延误,并优化整个开发流程。
但值得注意的是,即使在完成部署后,API 测试可能仍然会持续进行。生产后测试(或右移测试)为企业提供了补充测试方法,如果结合运用左移策略,企业就能将持续反馈回路集成到 DevOps 和 CI/CD 管道中。
除了创建更稳定且可靠的 API 之外,API 测试还为企业提供了显著优势。它有助于提高企业软件应用程序的质量、最大限度降低开发成本并加速软件交付。
最新的 AI 新闻 + 洞察分析
在每周的 Think 时事通讯中,发现专家精选的有关 AI、云等的洞察分析和新闻。
立即订阅
为什么 API 测试很重要?
API 无处不在。它们是一系列系统和流程的连接组织,企业和个人用户都对它们“寄予厚望”。API 测试确保 API 按预期方式工作。让我们稍微探讨一下。
API(包括 SOAP、GraphQL 和 REST API)可连接数字世界中的应用程序、Web 服务、系统和数据库,从而支持企业集成数据库、连接核心旧版系统与现代平台,以及连接不同环境中的部署。它们还能帮助组织为外部开发人员和合作伙伴提供服务,并塑造高度互联化的用户体验。
个人用户总是会遇到 API,也许是在不知不觉中。当用户在天气应用程序中输入城市以查看当前状况时,该应用程序会调用天气 API 来获取实时天气数据。同样,当用户在导航应用程序中点击“获取路线”时,该应用程序的后端会调用路线 API,该 API 检索分步路线并将其发送给用户。
更重要的是,如今的用户希望与可靠且反应迅速的应用程序进行交互。当加载时间从 1 秒增加到 3 秒时,用户跳出率将增加 32%。1如果网站加载时间超过三秒,40% 的用户会放弃访问该网站。2对 API 的重视促使许多组织采用 API 优先方法,其中 API 可视作应用程序的主要构建块(并受到相应的关注)。
API 层面的问题可能导致用户经历性能问题(例如延迟增加),并使企业数据遭受网络攻击,这两者都会损害企业的盈利能力。为了避免这些问题,应用程序和 API 优先的网络需要安全的高性能 API。持续测试对于构建和维护此类 API 至关重要。
API 测试验证 API 是否提供预期结果,以及它们是否能够根据不同的输入和场景一致地执行这些操作。它使团队能够在服务器级别的问题到达用户界面并造成更大的问题之前予以解决。
API 测试可帮助团队安全地模拟在界面级别执行存在风险或不切实际的场景(例如,探测安全漏洞)。在微服务架构中,每个微服务通常管理自己的数据存储并通过 API 公开功能,API 测试有助于确保微服务有效且安全地进行交互。
AI 学院
利用混合云实现 AI 就绪
本课程由 IBM 资深思想领袖带领,旨在帮助企业领导者获得所需的知识,以便划分可以推动增长的 AI 投资的优先级。
转到视频集
API 测试的类型
要全面、准确地了解 API 健康状况,IT 团队需要进行一系列测试,包括:
功能测试
功能测试(包括单元测试、回归测试和整合测试)有助于确保 API 针对特定请求输出正确的响应和数据格式。它涉及向 API 端点发送特定请求,并检查其是否返回预期的状态码、响应体和数据结构。
功能测试的主要目的在于验证不同测试场景的功能,包括正常和边缘用例、错误处理以及业务规则合规性。
单元测试
单元测试是一种软件测试技术,其中对应用程序的各个单元或组件(例如函数、方法或类)进行单独测试,以确保它们按预期运行。对于 API,这意味着向单个 API 端点发送单个请求以获得单个响应或一系列响应。
单元 API 测试试图确认代码库的每个部分均正确运行,以便开发人员可以及早检测到错误并创建更可靠的 API 代码。
性能测试
性能测试可评估 API 在不同情况下的速度、响应能力和吞吐量,包括其如何应对流量高峰和大量并发 API 调用。团队可以开展一系列性能测试(负载测试、压力测试和耐久性测试等),以识别流量瓶颈并确保低延迟,尤其是当 API 作为大型动态系统的组成部分时。
例如,IT 人员可能想要检查电子商务网站上购物车 API 在重大在线购物活动(例如假日销售)期间的响应速度和可靠性。
安全测试
安全测试有助于确保 API 保护敏感数据并防止未经授权的访问。它包括识别端点漏洞,例如跨站点脚本、SQL 注入以及身份验证或授权协议中的漏洞。安全测试还可以识别未加密的数据传输、弱密码的使用和不安全的网络架构。
例如,身份验证测试可以验证 API 身份验证机制(例如 API 密钥、JSON Web 令牌 (JWT)、OAuth 访问令牌和传统的用户名-密码对)的有效性。API 渗透测试可以通过模拟真实世界的网络攻击和评估 API 的响应来帮助团队发现安全漏洞。
集成测试
整合测试可评估系统中不同组件或模块如何协同运作,通常在 API 完成单元测试后进行。它要求团队测试 API 的输入和输出,以验证模块之间的交互和接口。
集成测试有助于揭示有问题的数据交换、通信协议和外部系统依赖性,这些问题可能会造成接口问题并破坏应用程序的整体性能。团队可以使用渐进式方法(逐步集成和测试 API 组件)、“大爆炸”方法(一次性集成所有组件并一起测试整个系统)或其他测试方法。
在 API 开发中,整合测试偶尔会被忽略,但这是维持应用程序健康状况的关键流程,尤其是当应用程序依赖于外部 API 时。
压力测试和负载测试
压力测试和负载测试具有相似的目标:确定 API 的容量。
压力测试将 API 推向其正常操作极限之外,以确定其临界点。它模拟各种情况(例如资源受限和极端负载),在问题发生前识别瓶颈、可扩展性问题以及 API 可以处理的最大容量。
负载测试衡量 API 在不同级别的并发请求或用户活动下的表现。它可以帮助开发团队了解 API 如何响应不同的流量负载,从而有效管理 API 流量并最大限度地减少响应时间和错误率。
API 文档测试
文档测试有助于确保 API 有明确的记录,并且文档准确地描述其功能。它还验证 API 功能集成并验证 API 的行为是否符合文档中的规定。
文档测试人员可以确认 API 是否返回预期数据,其参数是否定义正确,以及数据格式是否与当前文档一致。
互操作性测试
互操作性测试可验证 API 是否能够与不同的操作系统、框架、硬件环境和编程语言有效建立连接并进行通信。根据定义,API 应具备互操作性。
API 互操作性测试有助于确保 API 遵守行业标准、协议和数据格式,以便它们与各种客户端应用程序和服务具有广泛的兼容性。这些测试还确认 API 可以支持标准数据格式(例如 JavaScript Object Notation (JSON)、XML、协议缓冲区)、通信协议(例如 HTTP、WebSocket、gRPC)、字符编码、本地化和身份验证机制。
契约测试
契约测试捕获两个系统或模块(例如两个微服务)之间的交互,以评估通信的兼容性和有效性。它们验证 API 交互是否遵守预定义契约,以及契约在整个部署过程中是否保持一致,这使得它们对于在微服务架构中测试 API 特别有用。
使用契约测试,开发人员可以防止微服务和第三方 API 集成问题并简化前端开发人员和后端工程师之间的沟通。
模糊测试
API 模糊测试评估应用程序 API 的安全性和稳定性。它是指向 API 发送一系列格式错误或意外的输入,以查找漏洞,例如输入验证错误、缓冲区溢出、注入缺陷和其他安全问题。
模糊测试可以使 API 的行为变得不可预测,并揭示其处理输入和请求序列的方式中的缺陷。此操作有助于 IT 团队发现可能用于破坏应用程序的安全问题。
端到端测试
端到端测试评估 API 在更广泛的系统或应用程序中的完整集成和功能。它模拟真实世界的场景,帮助开发人员了解 API 如何与系统组件、数据库和外部服务交互。
端到端测试流程通常包括设置全面的测试环境、验证身份和授权、准备相关测试数据、发送包含各种参数配置的数据请求,以及验证 API 的响应以确保数据一致性。
手动测试与自动化 API 测试
API 驱动型环境的最佳测试方法取决于 API 的性质及其复杂性。对于主要处理基本“创建、读取、更新、删除”操作的简单 API,手动测试足以满足企业需求。手动测试是一个相对简单的过程,包括发送 API 请求和检查响应是否符合预期。
对于 API 手动测试,制定测试规划并确定要测试的场景和标准非常重要。然后,团队可以准备必要的输入参数、发送数据请求,并观察 API 响应是否存在任何错误或意外结果。
如果 API 更复杂或需要大量数据操作,API 测试 自动化有助于简化测试流程,可借助开源和第三方工具实现这一目标。自动化测试对于大型项目、受严格监管的环境和处理敏感数据尤为实用,因为它比手动测试更高效且可扩展。
API 测试与 API 监控
API 测试和 API 监控旨在确保 API 以最佳方式运行并且应用程序可以与其他应用程序和服务有效地进行通信。然而,它们关注的是应用程序生命周期的不同部分。
虽然 API 测试是一种主动策略,其重点在于检测开发阶段的性能、安全性和可靠性问题;监控则负责优先检测部署后的问题。API 监控工具还可以长期跟踪并实现 API 遥测可视化,确保团队能够分析历史数据并确定 API 发布后整个生命周期内的性能趋势。
由于监控和测试实践都有助于确保 API 和应用程序针对最终用户进行优化,因此企业需要两者来维持健康的 API 生态系统。
API 测试趋势
API 优先的软件开发、云原生 SaaS 应用程序和加速 CI/CD 管道的广泛部署,意味着 API 已深入数字环境的各个领域。这也意味着 API 正在以前所未有的速度持续演进。因此,希望保持领先地位的企业必须考虑采用创新的 API 测试工具和实践。
部分新兴测试趋势的示例如下:
AI 辅助的 API 测试
DevOps 团队和质量保证工程师正在转向人工智能 (AI) 和机器学习 (ML) 技术,以简化和加强他们的测试实践。3
AI 驱动式工具可以自动生成复杂 API 工作流的测试用例,并提升其生成效率。例如,机器学习可以帮助 API 测试工具生成更智能的定制化测试用例,从而扩大 API 的测试覆盖范围。测试工具还可以利用 ML 算法来生成预测性分析,帮助团队预测测试故障并防范 API 问题。
通过添加 agentic AI(支持 AI 智能体代表人类自主完成任务),API 工具可以创建自我修复 API 测试,同时在不同的浏览器、设备和操作系统上选择、优先处理并运行测试。
零信任 API 安全性
越来越多的企业采用零信任架构4,这种架构优先考虑对尝试与 API 交互的任何设备或用户实施稳健的授权和身份验证实践。
零信任 API 安全性遵循的原则是,任何网络流量(无论来自组织内部还是外部)都不应自动被信任。默认情况下,用户和设备都被视为不可信。零信任原则对于保护易受攻击且面向公众的 API 和端点特别有用。
API 虚拟化
API 虚拟化使团队能够创建模拟的并行 API 开发和测试环境。虚拟化 API 使得测试无法访问或需要大量计算资源进行测试的活动 API 成为可能。它们有助于减少 API 依赖性,并简化复杂微服务架构中的 API 测试。
右移测试策略
不同于优先考虑在开发流程初期阶段主动检测和解决问题的左移测试,右移测试可支持团队在 API 发布后根据实际条件验证其性能和安全性。API 测试人员可以运行受控实验来收集实际应用程序使用情况的数据,而非仅依赖预测或模拟,从而揭示左移测试无法预见的问题。
将右移测试用作左移策略的补充项,可以帮助开发人员在开发生命周期的每个阶段实施端到端 API 测试。在现代容器化、云原生、基于微服务的架构中,这一组合方法对于实现 CI/CD 目标至关重要。
右移方法也有助于实施生产后软件试运行。例如,开发人员可以借助金丝雀版本,面向用户子集预先发布新功能,用于进行监控和测试,而后再全面推广。A/B 测试则支持开发人员发布两个版本的 API,以了解哪个 API 的效果更好。
API 测试的优点
实施严格的 API 测试实践可以:
强化 API 和应用程序。API 测试可帮助开发人员构建、交付和维护稳定、可靠的应用程序。
缩短平均修复时间 (MTTR)。API 测试可帮助 DevOps 团队在软件生命周期的初期阶段、影响用户之前识别并解决 API 问题。
快速跟踪反馈。API 测试工具直接与应用程序逻辑交互,因此可以快速执行验证,以便开发人员加速获取反馈。
加强 API 安全性。API 测试可以帮助团队发现漏洞(例如,弱身份验证协议)并填补安全漏洞,以防不良行为者利用它们。
加快软件开发周期。API 测试工具可加快反馈周期,从而加速软件迭代、简化调试并持续改进。这些功能可帮助企业增强 CI/CD 管道并维持敏捷开发实践。
简化测试维护。由于 API 不会频繁更改(与用户界面不同,用户界面会根据用户访问的时间和方式而变化),因此 API 测试无需频繁更新或维护即可维持效力。
扩大测试覆盖范围。相较于用户界面测试,在 API 层测试应用程序的测试覆盖范围更广,因此可能会遗漏后端应用程序问题。