API 日渐成为当今应用程序开发的核心。作为 Web 组件间通信的主要模式,API 被用于跨系统之间的数据连接和传输以及业务互联。这意味着,产品上线前,通过 API 测试可以提高软件质量,并将重大安全风险降到最低。
API测试是直接在API上执行的软件测试类型,用它来验证该API是否满足预期的功能、安全性、可靠性和性能需求。一般测试API通过向API后端发送直接请求来进行测试,无需加载或与用户界面交互。
如下图所示,API测试是在业务层执行,GUI和数据库层间的所有逻辑操作和处理都在这一层进行。对软件质量而言,API测试至关重要,因为它可以在短时间内验证构建中的程序的逻辑。
与GUI测试不同,API测试能适应更快的发布周期和定期更改。
从允许应用程序在同一设备上运行代码的简单代码库,到如今的远程API(允许在一个设备上运行的应用程序调用另一个设备上的托管代码),API一直在不断演进。
在选择API测试的自动化工具时,了解正使用的API技术和测试的最佳方式,这些很重要。
当下,最常见的web服务API包括:
API测试可以提高整个test suite的效率。从更高的角度而言,API测试能帮助开发者对解决方案进行验证和维护,并消除错误。
然而,如果API测试执行地不彻底,问题可能在很久后才有人发现。这就迫使开发团队必须暂停当前的sprint开发周期,回去重新寻找问题所在。
如果在测试周期的后期发现大量bug,这可能阻碍开发进度,从长远来看,这样的代价非常昂贵。通过设置自动化的API测试,你可以:
一般,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测试,总体而言,当使用自动化测试时,最大的好处之一是它能配置你的test suite来自动提供输出,这样你就不必人为地去观察系统的响应。
自动API测试可以根据输入条件返回这三类输出中的任何一种:
但是,在直接对API进行测试时,有时候设定具体的通过或失败场景可能并不容易。
有些情况下,可能没有输出或发生一些不可预知的事情。但是,通过比较测试后产生的响应数据或调用另一个API后的行为,测试人员就能为他们的测试例创建明确的验证场景。
执行全面而严格的API测试是一个可靠的办法,它能确保你的应用程序可以端到端地正常运行。然而,为确保代码更改不会破坏API本身并保证API能正常投入使用,可以考虑将自动化的API测试集成到你的CI/CD(持续集成/持续部署)流水线管道中。
测试的最佳实践之一是用自动化实现那些可重用的迭代测试用例。
同样地,API测试也不例外——你需要在每次发布前重复运行某些特定的测试用例。这意味着从一个版本到另一个版本的发布和维护只能通过自动化来让工作变得更简单。
Loadmill工具能很好地支持API测试,它允许测试人员在应用程序中记录真实的用户会话,并将这些会话转换为可靠的test suites。
创建这些用户会话记录的过程也超级简单,只需要几分钟就能完成。这个工具消除了手工编写测试脚本的繁琐且耗时的过程。你还可以使用该工具的node模块和CLI来运行API和负载测试。
测试自动化可以让开发团队的进度更快,并将更多精力放在更重要的事情上。随着市场上各种自动化工具争相问世,API测试的效率已经今非昔比。
英文原文: