软件测试52讲笔记--23 知其然知其所以然:聊聊API自动化测试框架的前世今生

这是我购买的"极客时间"上的一套课程的笔记,总共52讲,定期对其中的内容做一笔记,巩固学习内容。

23 知其然知其所以然:聊聊API自动化测试框架的前世今生

早期的基于Postman的API测试

主要问题:

  1. 频繁执行大量测试用例时,基于界面的API测试比较笨拙。
  2. 难以与CI/CD流水线集成。

基于Postman和Newman的API测试

对于需要连续调用多个API并且有参数传递的情况,这并不是理想的测试方案。

基于代码的API测试

小型企业,会选用成熟的API测试框架。
中大型企业,一般会自己开发更适合自身业务的API测试框架。
这种根据公司业务上下文开发实现的 API 测试框架,在使用上有很多优点,而且灵活性也很好,主要体现在以下几个方面:

  • 可以灵活支持多个 API 的顺序调用,方便数据在多个 API 之间传递,即上一个 API 调用返回结果中的某个字段值可以作为后续 API 调用的输入参数;
  • 方便在 API 调用之前或者之后执行额外的任意操作,可以在调用前执行数据准备操作,可以在调用后执行现场清理工作等;
  • 可以很方便地支持数据驱动测试,这里的数据驱动测试概念和 GUI 测试中的数据驱动测试完全相同,也就是可以将测试数据和测试代码分离解耦;
  • 由于直接采用了代码实现,所以可以更灵活地处理测试验证的断言(Assert);
  • 原生支持命令行的测试执行方式,可以方便地和 CI/CD 工具做集成。

然后作者提供了一个伪代码示例来说明,可以去看原文。

自动生成API测试代码

Postman 工具本身已经支持将 Collection 转化成测试代码,但如果直接使用这个功能的话,还有两个问题需要解决:

  • 测试中的断言(assert)部分不会生成代码,也就是说测试代码的生成只支持发起 request 的部分,而不会自动生成测试验证点的代码;
  • 很多中大型互联网企业都是使用自己开发的 API 测试框架,那么测试代码的实现就会和自研 API 测试框架绑定在一起,显然 Postman 并不支持这类代码的自动生成。

鉴于以上两点,理想的做法是自己实现一个代码生成工具,这个工具的输入是 Postman 中 Collection 的 JSON 文件,输出是基于自研 API 框架的测试代码,而且同时会把测试的断言一并转化为代码。

作者也提供了相应的例子,不再赘述。

Response结果发生变化时的自动识别

问题:到底应该验证API返回结果中的哪些字段?

不可能对返回结果中的每一个字段都写assert。

而API测试中,有一个很重要的概念是向后兼容。是指,发布的新API版本应该能够兼容老版本的API。

因此,需要找到一个方法,既可以不对所有的response字段都去写assert,又可以监测到response的结构以及没有写assert的字段值的变化。

于是,诞生了“Response结果变化时的自动识别”技术。也就是说,即使没有针对每个Response字段都去写assert,仍然可以识别出哪些Response字段发生了变化。

思路:在API测试框架中引入一个内建数据库,推荐非关系型数据库(比如MongoDB),然后用这个数据库记录每次调用的request和Response的组合,当下次发送相同的request时,API测试框架就会自动和上次的Response做差异检测,对于有变化的字段给出告警。

那么对于每次API调用都不同的字段,比如token、session ID、时间戳等,可以通过规则配置设立一个“白名单列表”,把动态值的字段排除在外。

【心得】
最有用的是Response结果发生变化时的自动识别这块啊!自己在项目中遇到过类似的问题,虽然采取了一定的措施,但是没有想到作者这个解决方案。准备顺着作者的思路捋一捋,看看如何具体实现。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,463评论 19 139
  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 32,125评论 2 89
  • 年少时,我们因谁因爱或是只因寂寞而同场起舞; 沧桑后,我们何因何故寂寞如初却宁愿形同陌路; ...
    寻风的日子阅读 1,592评论 3 0
  • 这是我昨天写的和今天写的一些事。 昨天的标题是《社会研究专题的初衷》 以下是内容: 社会研究专题专注于写一些社会科...
    知识分享阅读 1,891评论 0 1
  • “还有那各式各样广东包啊,上海包啊,广东包啊,上海包啊…” 在这里,我不诠释上海包是否就是小笼包,但只要一提起上海...
    Mialzy阅读 3,693评论 0 0