软件测试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结果发生变化时的自动识别这块啊!自己在项目中遇到过类似的问题,虽然采取了一定的措施,但是没有想到作者这个解决方案。准备顺着作者的思路捋一捋,看看如何具体实现。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容

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