在所有的开发测试中,接口测试是必不可少的一项。有效且覆盖完整的接口测试,不仅能保障新功能的开发质量,还能让开发在修改功能逻辑的时候有回归的能力,同时也是能优雅地进行重构的前提。编写接口测试要遵守哪些原则?测试代码的结构应该是什么样的?接口测试有哪些实践技巧?本文分享作者在接口测试上的实践总结。
一线开发同学,可能都或多或少地造成过线上bug甚至故障; 也会遇到这样的场景,某同学在开发某功能的时候重构了代码,造成了线上bug或者故障; 在开发某个功能时,发现需要修改公共逻辑,害怕影响到其他功能,非常不雅观地拷贝代码,重新写套单独逻辑来支持。
上面这些情况,都包含了一个关键的问题,无论是功能开发还是逻辑重构,如何来保障代码开发的质量。保障的手段,每个人都知道,就是测试。首先是新功能测试,保障新功能逻辑正确;其次是回归测试,保障原有业务功能逻辑正确。测试的方式,一般是两种,人工测试和自动化测试。随着测试技术和工具的持续发展,人工测试比例逐步降低,被自动化测试逐步替代。自动化测试是可持续和可重复的,甚至是可AI化的。
一 测试分层
测试也是分层的,如下图所示:
在一个系统内,自动化测试一般分单元测试、模块测试和接口测试。
单元测试
目前我的应用代码基本都是基于spring框架面向接口这种编程模式,单元测试已被弱化。单元测试的要求基本上是单个类单个方法的测试,在我们当前模式下,编写成本太高。当然,如果是一个工具或者一段比较内聚而又复杂的逻辑(例如算法逻辑),还是应该使用单元测试来保障逻辑的正确性。
模块测试
在系统比较大、模块比较多的情况下,可以建立模块测试层,保障各模块功能的正确性。不过当前的系统发展趋势是微服务架构,因此模块测试层并非十分必要,可以通过接口测试层来覆盖。
接口测试
个人觉得准确来说应该叫入口测试,这一层,是从系统入口出发进行集成测试。应用入口通常是HSF (一个分布式RPC服务框架) 服务,消息,定时任务。
作为开发,测试手段千万条,接口测试不可少。在我们应用的接口测试有效且覆盖完整的情况下,不仅能保障我们新功能的开发质量,还能让我们在修改功能逻辑的时候有回归的能力,同时这也是我们做代码重构的前提。同时,易测性也是代码结构合理的一个指标,如果发现一段代码编写测试脚本困难或者无法测试,那就说明当前代码结构不合理需要重构。接下来,我将主要谈一谈接口测试的有效性。
二 测试原则
基础原则:
-
自动化:接口测试是非交互式的自动化执行,不需要人参与。
-
独立性:接口测试之间不应该相互依赖。
-
可重复:接口测试可重复执行,不受环境影响。
-
接口测试遵守BCDE原则,保障接口交付质量。
-
Border:边界测试。
-
Correct:正确的输入,正确的预期输出。
-
Design:按照需求和设计文档编写测试逻辑。
-
Error:错误输入,预期输出。
-
数据准备:数据准备通过系统服务进行,不能通过直接插入db方式。
-
可测性:对于不可测的代码需要进行重构成合理的结构。
-
覆盖性:接口测试需要覆盖所有UC,同时代码覆盖率和分支覆盖率应达到一定标准,新增代码必须被覆盖。
-
持续性:如果代码修改导致已有接口测试执行失败,必须修复代码问题或者测试代码逻辑。
-
时间要求:接口测试应该在项目发布之前完成,不应放到项目发布之后补充。
以上的基本原则应适用于所有层的自动化测试用例,在编写接口测试时,除了上面这些原则,还有其他原则需要遵守,先看一张图:
从系统角度来分析入口调用,以 HSF 服务为例:
-
外围系统调用由我们系统提供的服务。
-
系统执行了一堆代码逻辑,其中包含有分支逻辑。
-
系统执行过程中依赖外部 HSF 服务,进行了调用,并得到了返回值。
-
系统执行过程中依赖DB查询或者落地了数据,依赖缓存查询或者落地了数据。
-
系统执行过程中对外发送了消息。
-
给上游系统返回 HSF 执行结果。
有效接口测试的关键原则是要覆盖所有入口,mock所有依赖,校验执行过程中所留下的痕迹,总结如下:
-
入口覆盖:接口测试用例必须覆盖 HSF 服务入口、消息入口、定时任务入口。
-
依赖mock:在基本原则中,有可重复这个原则,即接口测试不能受环境依赖,需要mock掉对外依赖。但对于db依赖,不建议完全mock掉,一方面mock成本高,另外可能覆盖不到sql和表约束逻辑。
-
校验完整:有效的接口测试,应该具备完整的校验,没有校验的接口测试是没有意义的。只要执行过程中,留下的痕迹对业务有影响,都要进行完整校验,方能保障接口测试的有效性。
-
HSF 接口返回值校验:按照场景和接口约定进行 HSF 返回参数校验。
-
DB校验:校验落地数据的正确性。
-
缓存校验:校验存入缓存中数据的正确性。
-
HSF 依赖入参校验:通过mock工具获得依赖 HSF 调用的入参,进行入参校验。
-
消息校验:通过mock工具获得发送的消息对象,进行消息体校验。
最后:下面是配套学习资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!【100%无套路免费领取】
软件测试面试小程序
被百万人刷爆的软件测试题库!!!谁用谁知道!!!全网最全面试刷题小程序,手机就可以刷题,地铁上公交上,卷起来!
涵盖以下这些面试题板块:
1、软件测试基础理论 ,2、web,app,接口功能测试 ,3、网络 ,4、数据库 ,5、linux
6、web,app,接口自动化 ,7、性能测试 ,8、编程基础,9、hr面试题 ,10、开放性测试题,11、安全测试,12、计算机基础