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(持续集成/持续部署)流水线管道中。
测试自动化可以让开发团队的进度更快,并将更多精力放在更重要的事情上。随着市场上各种自动化工具争相问世,API 测试的效率已经今非昔比。
英文原文:
All you need to know about automated API tests
评论 1 条评论