• 自动化测试是一个很鸡肋的东西吗?
  • 发布于 2个月前
  • 95 热度
    0 评论
引言
从《Google软件测试之道》到后来的敏捷开发、DevOps,10多年了,接口自动化测试一直是测试领域必谈的重点。各种自动化测试工具(Postman类)、自动化测试框架、自动化测试平台层出不穷,每个公司/部门甚至每个团队都有一套直接的自动化解决方案。但盲目投入后,反而会感觉越来越鸡肋,食之无用弃之可惜。

接口自动化的价值
不管你是 B/S 还是 C/S 架构,APP 还是小程序,还是什么协议,总体来说是由 GUI 和服务端 API 组成。通常一个迭代是 PM 需求、RD 开发/联调、QA 单功能测试、bugfix(穿插多轮)、合码 QA 集成/回归测试、发版。在这一套模式下,大家常说的接口自动化测试(暂不考虑 UI 自动化)的价值如下:

提高测试效率/降低人力成本?
因为自动化测试执行很快,所以引入接口自动化测试能提高测试效率。但有个很现实的问题,接口自动化只覆盖了服务端 API,GUI 这部分也有很多逻辑,RD 也是有大量工作量投入的,这部分的测试是少不了的。即使是偏服务端 API 的功能,你的手工 GUI 测试替代率是多少?接口自动化执行完了能不需要手工测试吗?这恐怕不敢打包票吧。所以对于一个端到端的测试团队,反而接口自动化 case 的编写和维护成了额外的负担。

降低人力成本也是无稽之谈,因为你手工 GUI 测试的成本并没有降下来,反而需要投入写接口自动化的人力。除非你之前就有一批人是使用 Curl 测接口的。

提高测试覆盖率?
这个理论上有道理,一些接口参数分支,UI 上无法走到,通过接口则可以直接覆盖到,提升了覆盖率,后面 UI 上增加了此分支能保证基本的质量,提升迭代效率。但事实上产品变化很快,还没等覆盖到新参数分支,需求又变了,接口甚至都得重写一遍。掉入了过早优化的陷阱。

持续集成和持续交付(CICD)✓
互联网大部分开发模式都是迭代开发、小步快跑。接口开发完成后还没到测试环节,这时候跑一遍自动化(回归测试),能保证基础功能没影响,代码就可以合入了,过几天就自动进入到测试环节。也能尽早发现问题,缩短交付周期。

同时还可以用作线上监控,保障服务稳定性。这是手工测试无法做到的。

保证结果的一致性和准确性✓
手工用例总是需要人理解然后执行,因为各种原因,不同的人可能对同一条 case 理解不一样,造成执行偏差。然后人总有惰性,偶尔还是会有因觉得执行过程偷懒而导致的漏测。而接口自动化执行的结果是可靠的。

总的来说,如果你是想只通过接口自动化这一种方式降本提效,那可能会事与愿违。而是应该把提质作为目的,即接口自动化作为质量保障的重要手段,尽早的写(左移),穿插到整个研发生命周期里面去,才能发挥更大的作用(特别是现在 DevOps 时代)。对此合适的度量指标:线上问题召回率、自动化 Bug 发现比率(含 CICD 过程中发现的)。

接口自动化的成本
在评估自动化收益的时候我们常用这样一个公式:自动化收益 = 迭代次数 x(手工执行成本 - 用例维护成本)- 用例编写成本。现在来看可能不太合适,如上所述,接口自动化和手工测试并不对等,并不是替代人工。不过自动化测试的成本倒是可以通过类似的公式计算:运行次数 x 用例维护成本 + 用例编写成本。这可能和大家想象的不一样,接口自动化通常被认为是边际成本很低,即用例编写成本会随着运行次数增加而摊薄。但事实上维护成本也不低,而且无法摊薄,因为不运行就不需要维护,只要运行就会出问题,就需要排查、维护。

维护成本的来源可能是多方面的,虽然都有一定的解决办法,但不能忽视这部分的成本,而且分散在日常中还是隐性成本(leader 看不见),如果做的不好,甚至会出现团队都很累,但质量又很差的情况。
维护成本来源 解决方案
接口参数不兼容改动,需要相关case都改动 接口适当封装,case使用封装后的模板或函数,方便使用和维护
前置变量失效导致case失败,比如商品id
或者说一个新环境的适配成本
一方面case里面不能写死id,需要变量化,数据和逻辑分离
另一方面,case需要自给自足,相关依赖资源在前置操作中产生,并在后置操作中销毁
case间的量子纠缠 适当的执行用户隔离,一些资源操作加锁
很多测试框架/平台把重点放在写 case 这块,宣称功能更强大(比如流量录制导入)、体验更好。但拉长 case 周期来看,编写成本是一次性的,10分钟写完一条 case 和1小时写完一条差别不大。更多的应该放在如何写好 case(场景构造、数据准备等)、维护好 case,这才能降低最终的成本。(放心没广告)

总结
还是那句话:软件工程没有银弹。鸡肋不鸡肋要看目的,降本增效可能不是直接的收益。同时也要注意接口自动化维护成本也不小,需要重点投入解决这块的问题,才能使最终的 ROI 高。

当然,本文看着还是泛泛而谈,并没有说接口自动化该如何写,但我认为具体怎么写都是招式问题,先修一下内功心法总纲更重要。
用户评论