APP下载

接口测试全流程梳理和关键技术

2020-04-23张云魏强何永江付征

电子技术与软件工程 2020年8期
关键词:测试工具测试人员测试用例

张云 魏强 何永江 付征

(1.中国民航信息网络股份有限公司 北京市 100000 2.北京市民航大数据工程技术研究中心 北京市 100000)

(3.沈阳民航东北凯亚有限公司 辽宁省沈阳市 110000)

1 引言

根据研发中心“松耦合,强管理”的技术原则,系统内各软件越来越多,各软件之间通过接口进行交互。自2020年开始,研发中心着力打造PSS 对外服务接口体系。因此,接口测试的需求近期明显井喷。如何校验字段繁多结构复杂的接口功能、如何设计规范化的测试用例、如何实现回归测试是接口测试中的三大难点。

2 接口测试现状

在2018年对Service API(简称SAT)接口的测试过程中,我们发现,手工测试存在报文拼接出错率高、字段覆盖不全等诸多风险。经研究,可以通过报文自动化拼接的方式来实现接口的自动化测试。

自动化测试能大大减少人工投入、显著提高工作效率。但是,由于自动化测试的学习成本比较高,所以接口测试的自动化目前还没有大规模推广和普及。本文通过读取接口文档、自动生成字段结构测试用例和字段校验用例等技术手段,使接口的自动化测试流程化、工具化,从而达到减少学习成本、提高工作效率的目的。

3 接口测试全流程梳理

3.1 接口测试原理

接口,Application Programming Interface(API),在软件领域泛指不同功能之间的交互通信部分。接口测试,一般与页面测试进行区分,是直接测试接口功能的一种测试类型。通过软件测试的理论和方法去测试接口,找出接口的功能缺陷,从而验证服务端是否满足了它所提供的服务。

3.2 接口测试流程介绍

接口测试流程根据软件项目所采用的开发模式而略有不同,通常的测试流程如下:

(1)接口文档分析;

(2)接口用例设计;

(3)用例评审;

(4)接口测试环境搭建;

(5)接口用例执行;

(6)缺陷提交;

(7)回归测试;

(8)测试报告和交付物提交。

3.3 接口测试用例设计方法

图1:Jenkins 自动部署设置

图2:自动执行时间设置

接口测试总体分为功能和非功能的测试。非功能方面一般需要测试接口的性能、安全方面,功能测试需求根据软件测试的理论方法进行用例的设计。常见的测试设计如下:

3.3.1 性能测试

(1)响应时间;

(2)吞吐量;

(3)并发数;

(4)服务器资源使用率(CPU、内存、IO、网络等)。

3.3.2 安全测试

(1)敏感信息是否加密;

(2)传输过程是否加密;

(3)日志系统;

(4)恶意请求测试;

(5)SQL 注入测试。

3.3.3 功能测试

(1)业务功能测试(正向场景、反向场景、错误场景);

(2)边界分析测试(业务规则边界、参数边界);

(3)参数组合测试;

(4)异常情况测试(系统异常、网络异常、重复请求、分布式测试、事务测试等)。

图3:自动执行脚本设置

图4:自动发送结果邮件

图5:查看结果

图6:重点标红失败的接口

3.4 接口用例执行

对于接口用例的执行,可以根据测试人员的能力选择适合的测试方式,不同的测试方式会有效率、质量上的差异。本文列举了业界应用最广泛的3 种方式:

3.4.1 工具测试

常见的工具有SoapUI、Postman、Jmeter,采用工具测试对测试人员的能力要求较低,但是测试过程会由于测试工具的局限性而受到影响,如果测试工具不支持则不能满足测试的特殊要求。

3.4.2 代码测试

对测试人员有较高的代码能力要求,测试通过编写程序代码来构造自己的测试框架,并且可以根据自身的需求随意的扩展代码,可以打造出完全符合需求的测试程序。

3.4.3 平台测试

适用于较大型的软件项目,项目组有测试开发人员专门编写统一的、适合本项目或者本公司需求的接口测试平台。如此打造的接口平台可以不断迭代功能,从而满足层出不穷的需求,且对执行测试的人员没有较高的代码能力要求。

图7:抓取接口页面的接口信息

3.5 中航信Service API项目接口测试实例

3.5.1 测试工具

由于项目组初期人员较少,测试人员没有较强代码能力,经项目组研究选择了SoapUI 作为测试工具。SoapUI 本身有着强大的接口测试功能和良好的用例管理功能,并且可以通过脚步插入的方式进行功能扩展,可以满足SAT 的绝大部分测试需求。

图8:生成SoapUI 格式的全字段请求

3.5.2 测试用例生成

使用Python 编写工具从网页版的API 文档中抓取信息、生成请求并整合成SoapUI 的Test Suite 文件,根据接口逐一生成Test Suite 文件作为测试用例。技术细节请见第4 章。

图9:生成SoapUI Test Suit

3.5.3 测试执行

使用soapUI 工具导入生成的Test Suite,再在工具中进行点击、执行。

3.5.4 回归测试

将测试过的Test Suite 放在Git 仓库中,使用Jenkins 集成测试环境、测试脚本,并在Jenkins 中设置每天早上自动执行Test Suite中的用例,自动生成报告发送给相关人员。如图1 至图6 所示。

4 关键技术研究

4.1 使用测试工具

(1)SoapUI(开源接口测试工具);

(2)Python(测试程序开发工具),按照如下模块:

1.bs4

2.Paramiko

3.ElementTree

4.2 程序概要设计

程序分为如下四部分:

(1)按照接口的url 地址,抓取页面,返回接口信息;

(2)根据抓取接口,生成SoapUI 格式的全字段请求;

(3)步骤(1)和(2)的内容,生成包含接口全部必填校验和字段内容校验的Test Suit,供导入SoapUI 后自动执行:

1.根据接口信息,生成必填字段校验,和字段内容校验的正、反用例测试点和对应的断言;

2.必填字段测试请求和断言:如是普通字段,则从全字段请求中移除此字段,如是数组中的一个元素,则清空此数组;

3.字段内容校验测试请求和断言:生成此字段的参数化soapUI请求,自动为参数化字段分配此字段校验规则对应的测试数据,根据数据,生成此soapUI 请求的断言;

4.全部请求按照soapUI 的Test Suit 格式生成为一个xml 文件,供SoapUI 导入使用。

4.3 程序详细设计

4.3.1 抓取接口页面的接口信息

实现思路:

(1)Python 中著名的第三方库BeautifulSoup 可以用于解析网页;

(2)Confluence 页面的授权,可以通过http 访问登录页面后保存cookie,使用cookie 验证以减少认证时间;

(3)通过标题名称,控制访问的页面区间,通过输入参数["req","res"],确定返回页面的请求信息还是返回信息;

(4)把搜索到的信息,按照字典格式返回,共后续程序使用。

抓取接口页面的接口信息如图7 所示。

4.3.2 生成SoapUI 格式的全字段请求

实现思路:

(1)获取到接口信息后,使用ElementTree,逐级构造XML请求。

(2)若JSON 请求格式不能直接通过XML 转换,需要按照如下步骤转换:

1.读取接口字典;

2.遍历XML 请求,结合接口字段,判断当前节点类型:是普通接口,直接转换,同时需要注意值类型的转换;该节点下包含其他节点,则此节点创建为数组结构,如A 字段,转换为A:[],此节点下的结节,不填写名称,而向此数组中添加值即可。

生成SoapUI 格式的全字段请求如图8 所示。

4.3.3 生成SoapUI Test Suit

实现思路:

(1)使用此接口的全报文字段,作为后续请求生成的基础;

(2)解析全报文信息,可以把报文按照TestSuit,TestCase,Json 请求,XML 请求,参数设置、断言这几部分;

(3)通过Confluence 上的接口文档,可以获取每个请求字段的属性,是否必填,类型,父节点等信息;

(4)对于属性的校验,可以通过程序自动生成有效,无效等价类或者文件的方法,生成对应的用例和断言;

(5)对于M 字段的校验,可以通过程序,自动从全字段报文中,去除此字段,然后添加对应的用例和断言;

(6)这个脚本,其实是要给文本处理脚本,使用Python 抓取接口请求信息后,使用请求信息中内容,生成符合SoapUI 接口要求的XML 文档。

生成SoapUI Test Suit 如图9 所示。

5 总结

通过对接口测试全流程、用例设计以及接口自动化技术等的梳理,SAT 测试人员对相关的流程、范围和方法等都有了全面深入的了解,能设计出更完善的测试用例,提高了测试质量。此外,关键技术的研究,使得测试流程自动化正逐步取代手工操作,大大提高了测试效率。同时,随着研究的深入和技术的不断加强,测试人员已经有能力优化测试流程,从而形成了双向拉动的良性循环。经过一年的不断实践和改进,测试用例的平均设计时间已从3 天缩至1天,测试执行效率提高了30%,接口的回归测试周期也大大缩短。

接下来,将在工作中做更加全面的改进和提升,使接口测试流程更加顺畅、用例设计更加完善、自动化程度更加提高,以进一步提高接口测试的质量和效率。

猜你喜欢

测试工具测试人员测试用例
基于SmartUnit的安全通信系统单元测试用例自动生成
Http并发连接测试工具
基于混合遗传算法的回归测试用例集最小化研究
高校分析测试中心测试队伍建设方案初探
手车式真空断路器回路电阻测试电流线接头研究
福禄克推出先进的连接式测试工具系统
基于依赖结构的测试用例优先级技术
犯罪心理测试人员素质要求分析
软件回归测试用例选取方法研究