背景
目前,接口测试是开展项目测试实施过程中非常重要的环节,对于新增接口和修改接口更是需要做到应测必测,但是在实施过程中普遍存在一些问题,经分析总结如下:
1.耗时长: 接口测试整体流程较长,对每个字段都需要进行各种校验,且人工进行基础性字段验证的过程极为痛苦重复。
2.无数据留存: 每次接口测试所使用的完整的测试用例、测试数据、测试结果不易留存,不方便复测和排查问题。
3.容易遗漏: 纯手工测试,受制于测试人员的能力、经验,测试的覆盖度无从追溯,且枯燥乏味的字段校验极容易遗漏。
基于以上问题,我们需要研发一种可以通过预配置实现、基于经验积累、满足多种测试要求的接口测试工具。
工具实现思路
本章将通过对接口测试的步骤和用例组装过程进行拆分来介绍工具实现的总体思路。
图一 接口用例自动化生成的总体思路
工具将接口测试划分为三个阶段,分别为准备阶段、执行阶段以及后续工作。准备阶段主要是准备接口测试所需要素和配置,执行阶段主要为工具自动化执行生成测试用例、数据和接口测试的执行,后续工作主要为生成擎云所需要的自动化测试文件,对执行结果进行断言判断,手工录入tfs进行缺陷跟踪等。
其中,工具将接口测试的重点聚焦于接口测试的准备阶段,通过air接口文档或自定义格式接口文档进行,通过配置“用例集”与参数“组装规则”生成执行阶段所需要的完备测试用例与数据,然后通过工具自动进行执行。
图二 接口用例自动化生成的具体细节
工具将接口用例组装过程拆分成接口层、参数层、用例集组装层、兜底测试组装层、参数组装规则层这几部分,下面对这几层进行详细的介绍。
1.接口层:接口层中包含的是接口的整体信息,主要有接口的类型(post/get),接口所包含的参数,接口可能所需要的header头等信息。该部分信息可以通过读取air接口文档或自定义接口文档或者手工录入的方式进行维护。
2.参数层:该层聚焦于接口中的某个具体参数,如图二中的单个“phoneNo”参数,该层主要为了聚焦单个参数并将其送至后续的“用例集组装层”、“兜底测试组装层”进行衍生和变形。
3.用例集组装层:该层通过预先配置好的“用例集”对参数进行组装,从而生成单个参数所需要衍生出的测试用例与数据。譬如某条用例集“反例/首位为1,小于11位数字/1341111111”,那么工具会根据该条用例衍生出“phoneNo”:“1341111111”的数据和“被测接口phoneNo参数首位为1,小于11位数字”的反向测试用例。
参数与用例集的匹配有自选和工具根据参数名进行匹配两种方式,关于“用例集”这一概念的具体设计思路我们将在下文进行详细解释。
4.兜底测试组装层:所谓的兜底测试,就是指我们在接口测试中,需要反复的对每一个字段都进行测试的基础性验证。如参数为空、为空格的情况,参数超出和少于长度限制的情况,参数类型与规定类型不同的情况。该种验证极易检测出代码中的异常捕获缺失与代码异常错误泄露的缺陷,但人工进行该种检测极为枯燥重复,所以需要使用工具对参数进行兜底用例的衍生与测试。
兜底测试组装层的用例和数据的衍生规则与用例集组装层是类似的,不同的是兜底测试组装层会对每个参数都进行相应的兜底测试,兜底测试也不需要选择相应的用例集。
5.参数组装层:参数组装层主要是为了将参数层衍生出的众多单个参数的案例根据一定逻辑和规则组装到一起,最终形成完整的测试报文与测试案例,目前使用的参数组装规则主要有以下三种:控制变量法、正交法、parwise法。
关于“参数组装规则”这一概念的具体设计思路我们将在下文进行详细解释。
用例集
用例集是自动化接口测试的“血肉”,是完成数据预配置、经验积累的实现方式,是对接口数据进行衍生和测试的基础。用例集中包含了测试系统、参数属性、内容、用例内容的信息,下面我们对这几个字段进行详细解释。
图三 最小用例集
1.测试系统:标志了该用例集所在的测试系统,由于不同系统中所使用的测试数据、测试考量点不同,所以用例集需要根据系统对接口参数进行匹配,同时标识系统也方便了同系统的测试人员对数据进行分享和复用。
2.参数属性:标志了该用例集为参数类型还是参数名,如果为参数名的话,就当作普通的用例集对该参数名进行优先匹配,如果为参数类型的话,工具就会自动对该系统内该种参数类型的参数进行兜底测试。
3.内容:与参数属性相对应的参数名称或参数类型。
4.用例内容:包含了用例描述、正反向类型和测试数据。其中,测试数据为非必选项,如果测试数据为空的话,那么仅可以生成接口测试用例而不可以生成接口测试报文。
图四 不同接口测试维度的测试颗粒度与用例集维护难度关系图
工具生成用例的测试多样性和覆盖度离不开我们对用例集的设计。通常,我们设计接口测试用例集从以下三个角度进行。
1.兜底测试:指每个参数都需要进行校验的情况,如参数为空,参数过长等,该种情况往往通过设置参数类型的用例集和工具自动识别来进行测试,兜底测试的数据几乎不会改变,也不需要进行维护。
2.功能测试:指满足功能需求,有一定功能含义的测试用例,如对卡号这个参数来说,已销户的卡号对大多数交易来说就是一个有功能含义的反例,对于功能测试,大多数测试用例与数据是有一定的时效性和可复用性的,但对数据的维护仍需要一定成本,对于经常变动的数据,目前的解决方案是通过sql语句进行动态提取。
3.安全测试:满足横向越权、竖向越权等安全测试要求的测试用例,测试人员需要对越权类场景进行识别与设计,同时对越权测试所使用数据也需要进行精心的构造,一旦完成了对数据的构造,那么安全测试的测试用例和数据也可以看成一种特殊的“功能测试”添加进对应参数的用例集中。
参数组装规则
如果说用例集是自动化接口测试的“血肉”的话,参数组装规则就是自动化接口测试的“骨”,规则将各个参数所衍生出的用例根据一定的逻辑紧密联系到一起,最终形成覆盖度高却不冗余的测试用例。目前支持的规则主要有以下三种。
图五 使用控制变量法进行自动化接口测试
1.控制变量法:功能测试的经典方法,控制其他参数不变,修改某一参数进行衍生用例进行测试。
2.正交法:将所有单个参数衍生出的全部用例进行正交组合,可以覆盖测试中的所有情况。
3.Parwise法:基于Pairwise统计学的用例计算方法,原理为双因子之间进行正交,实际为对正交法的一种科学的裁剪,适合没有明确正反向的高效接口自动化测试。
推广使用效果
通过配置用例集我们实现了对测试经验的积累,对测试场景的全覆盖。通过配置用例生成规则,我们保证了生成用例的覆盖度高而又不冗余,最终完成我们对接口测试的高效率、高覆盖度、高质量的要求。
图六 部分系统推广使用效果图
该工具目前已在掌银信用卡频道、微银行信用卡模块、星云、PDS等26个系统模块中使用,共对304个接口生成测试用例3638条。
资源分享
下方这份完整的软件测试视频学习教程已经上传CSDN官方认证的二维码,朋友们如果需要可以自行免费领取 【保证100%免费】