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

2020 年 4 月 30 日

你应该知道的自动化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(持续集成/持续部署)流水线管道中。


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


英文原文:


All you need to know about automated API tests


2020 年 4 月 30 日 11:15726
用户头像

发布了 63 篇内容, 共 35.7 次阅读, 收获喜欢 113 次。

关注

评论 1 条评论

发布
用户头像
这算是广告么
2020 年 04 月 30 日 14:28
回复
没有更多评论了
发现更多内容

百万并发「零拷贝」技术系列之经典案例Netty

码农神说

Java Netty 零拷贝

京东T8连夜肝出的《JVM性能优化知识点》吊打所有提问的面试官

互联网架构师小马

Java 性能优化 JVM 虚拟机 垃圾回收

求组队,PK华为HMS全球应用创新大赛!

InfoQ_e92167c73263

android

我天!xx.equals(null) 是什么骚操作??

导导

架构师 0 期第八周命题作业

何伟敏

判了!中科大博士写游戏外挂赚了12万获刑,被抓才知道帮团队赚了300万……

程序员生活志

游戏开发 游戏 游戏外挂 新闻

信创舆情一线--50多家科技公司源代码泄露

统小信uos

新三板专家-程晓明:四板将是推动区块链技术与资本市场结合试验田

CECBC区块链专委会

区块链技术 推进落地应用

架构师训练营第九周

Melo

知识点梳理:聊聊iOS SDK数据采集那点事儿

易观大数据

区块链+国防安全,科技是核心战斗力

CECBC区块链专委会

新技术 国防安全 科技信息

该学一学了!零基础入门Docker

程序员的时光

Docker

2行代码搞定一个定时器!

简爱W

Java中的模板设计模式,太实用了!

BUZHIDAO

Java

刚坐下,一个面试官居然问了我 30个Spring Boot问题!

只喝纯牛奶

BFC "苦"前端久矣!

大导演

CSS 前端进阶训练营

轻量级BI应用-Superset实践

Jackchang234987

BI 数据产品

架构师 0 期第八周总结

何伟敏

Java SSM 框架常见面试题

老大哥

Java

Spring Boot+Redis+拦截器+自定义Annotation实现接口自动幂等

我是苞谷

面试官问:僵尸进程和孤儿进程有了解过吗

Java小咖秀

Linux 学习 面试 进程 经验

视频丨包不同的沙雕敏捷之砸锅卖铁买兰博

华为云开发者社区

程序员 运维 敏捷 敏捷开发 技术人

Developer 转型记:一个开发平台的“魔力”

华为云开发者社区

华为 AI 开发者 开发者工具 华为云

一次线上JVM Young GC调优,搞懂了这么多东西!

南方有乔木兮

MySQL的索引基础知识

guoguo 👻

week8--课后作业

Geek_165f3d

编程日课•理解学院

顿晓

学习 编程日课 理解学院

揭秘淘宝平台广告策略,拆解最佳投放实践

华为云开发者社区

数据分析 广告 用户增长 淘宝 电商

一图看懂华为云DevCloud如何应对敏捷开发的测试挑战

华为云开发者社区

微服务 敏捷开发 测试 云服务 华为云

给技术同学的建议:人人都该懂的埋点知识

易观大数据

埋点 智能运营

一条更新sql在mysql中是怎么执行的

简爱W

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