你应该知道的自动化API测试知识

API 日渐成为当今应用程序开发的核心。作为 Web 组件间通信的主要模式,API 被用于跨系统之间的数据连接和传输以及业务互联。这意味着,产品上线前,通过 API 测试可以提高软件质量,并将重大安全风险降到最低。

什么是API测试?

API测试是直接在API上执行的软件测试类型,用它来验证该API是否满足预期的功能、安全性、可靠性和性能需求。一般测试API通过向API后端发送直接请求来进行测试,无需加载或与用户界面交互。

如下图所示,API测试是在业务层执行,GUI和数据库层间的所有逻辑操作和处理都在这一层进行。对软件质量而言,API测试至关重要,因为它可以在短时间内验证构建中的程序的逻辑。

GUI测试不同,API测试能适应更快的发布周期和定期更改。

可以测试的API类型?

从允许应用程序在同一设备上运行代码的简单代码库,到如今的远程API(允许在一个设备上运行的应用程序调用另一个设备上的托管代码),API一直在不断演进。

在选择API测试的自动化工具时,了解正使用的API技术和测试的最佳方式,这些很重要。

当下,最常见的web服务API包括:

自动化API测试的必要性

API测试可以提高整个test suite的效率。从更高的角度而言,API测试能帮助开发者对解决方案进行验证和维护,并消除错误。

然而,如果API测试执行地不彻底,问题可能在很久后才有人发现。这就迫使开发团队必须暂停当前的sprint开发周期,回去重新寻找问题所在。

如果在测试周期的后期发现大量bug,这可能阻碍开发进度,从长远来看,这样的代价非常昂贵。通过设置自动化的API测试,你可以:

  • 确保所有服务都按预期运行;
  • 确认所有端点是否安全,不受未授权用户和未经身份验证用户的影响;
  • 提高功能性和非功能性测试的覆盖率;
  • 能及时地给开发团队提供反馈,这样就能更快地发布产品;
  • 无论应用程序的端点托管在何处(从AWS Lambda云端到本地设备),所有端点都能测试。

一般,API测试允许你验证web服务API中的四个主要操作——即GET、POST、PUT和DELETE方法。

以下面的一个代码片段为例,它使用了java rest-assured库,验证从服务器接收的JSON格式的响应。

我们假设响应是这样的:

我们可以用REST assured来验证该响应。在这种情况下,一个简单的测试如下所示:

在上面的代码片段中,validateDataOnResponse() 函数调用API端点/data?id=254,然后,我们收到一个JSON格式的响应。该测试也能验证statusCode是否为200,并对该响应在其主体中是否包含名为“Tom”的名字做出判断。

哪种类型的API测试可以自动化?

你可以为API执行不同类型的测试。虽然由于API的测试范围有所不同,但大多数测试可分为以下几类:

  • 功能测试——侧重于测试应用程序代码库中的特定功能。其目的是确保API功能在预期的参数范围内,如果不在预定范围内,则适当的处理错误。理想情况下,这类测试包括的测试用例会支持对HTTP响应代码、错误代码和响应功能的验证。
  • 负载测试——这种类型的测试是为了测试一个特定单元或整个代码库能够承载多少负载。对于设计用来处理大量数据或多个用户的应用程序来说,这种测试尤其必要。为保证峰值性能,你要确定API是否能够实际支持预期的负载量,例如500个请求、5千个请求、5万个请求甚至10万个请求。
  • 安全性测试——安全性测试非常重要,因为它有助于确保API的代码实现免受安全漏洞的影响。基于这个原因,开发人员应该确保他们的API测试用例集中包含验证授权、加密机制、访问控制、会话管理等等。API安全验证和审查流程有时还会涉及模糊测试(fuzz testing)和渗透测试(Penetration testing),这两种测试都可以确保API不受外部安全漏洞的影响。
  • 验证测试——这是在API实现中最后执行但却非常重要的测试之一。这类测试会对产品开发、API行为和整体效率等重要方面进行验证。这种类型的测试服务验证API开发和实现是否符合标准的一致性以及是否符合预期的用户需要和需求。
  • 运行时/错误检测——与上述各类测试不同,以上测试主要关注在特定场景中运用该API后得到的结果,而这类测试关注的是API本身如何运行。这包括监控代码实现、执行、错误检测和资源泄漏中的异常。

API的测试策略

不仅仅只是针对API测试,总体而言,当使用自动化测试时,最大的好处之一是它能配置你的test suite来自动提供输出,这样你就不必人为地去观察系统的响应。

自动API测试可以根据输入条件返回这三类输出中的任何一种:

  • 布尔状态——通过或失败
  • 任何类型的数据或信息
  • 对另一个API函数或事件的调用

但是,在直接对API进行测试时,有时候设定具体的通过或失败场景可能并不容易。

有些情况下,可能没有输出或发生一些不可预知的事情。但是,通过比较测试后产生的响应数据或调用另一个API后的行为,测试人员就能为他们的测试例创建明确的验证场景。

执行全面而严格的API测试是一个可靠的办法,它能确保你的应用程序可以端到端地正常运行。然而,为确保代码更改不会破坏API本身并保证API能正常投入使用,可以考虑将自动化的API测试集成到你的CI/CD(持续集成/持续部署)流水线管道中。

用Loadmill自动化你的API测试

测试的最佳实践之一是用自动化实现那些可重用的迭代测试用例。

同样地,API测试也不例外——你需要在每次发布前重复运行某些特定的测试用例。这意味着从一个版本到另一个版本的发布和维护只能通过自动化来让工作变得更简单。

Loadmill工具能很好地支持API测试,它允许测试人员在应用程序中记录真实的用户会话,并将这些会话转换为可靠的test suites

创建这些用户会话记录的过程也超级简单,只需要几分钟就能完成。这个工具消除了手工编写测试脚本的繁琐且耗时的过程。你还可以使用该工具的node模块CLI来运行API和负载测试。

测试自动化可以让开发团队的进度更快,并将更多精力放在更重要的事情上。随着市场上各种自动化工具争相问世,API测试的效率已经今非昔比。

英文原文:

All you need to know about automated API tests

  • 发表于:
  • 本文为 InfoQ 中文站特供稿件
  • 首发地址https://www.infoq.cn/article/EPMGfGfs3sb5Xd7S2wWa
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券