李丹霞 刘舒婷 周涛 董欣
(中移信息技术有限公司,广东 深圳 518048)
区块链以其去中心化、传递信任的特性和能力,将作为最底层的通信协议撑起未来的网络通信,为下一代网络提供可信环境和价值互联,区块链平台与技术开发服务是上层应用的重要支撑。各大互联网、云服务、电信运营商纷纷布局BaaS服务,中国移动也布局建设了自己的区块链服务(China Mobile Blockchain as a Service,CMBaaS)平台,希望为用户提供可信、可靠、高效的区块链服务,并提供统一区块链管理平台门户,实现从平台用户、租户、智能合约管理、权限管理、多链管理、链账户管理、浏览器等链外、链内的可视化管理。为满足灵活管控、自动伸缩、高效协同,整个开发架构采用敏捷构建的开发模式,需求版本迭代周期大大缩短,在有限的时间和人力资源下,手工测试,很难做到对每个迭代周期功能进行全量回归验证,只能抽取影响范围内的核心场景进行回归验证,存在一定的漏测风险,且考虑到不同引擎引入的适配、不同用途链的重复部署,为确保功能一致性和正确性,功能全量回归频率增多,结合手工测试流程对接口测试场景进行梳理和分析,处理逻辑类似,耗时较多的工作集中在接口模拟数据构造、测试结果核查上。若能开发一种接口自动化测试框架,实现接口测试数据的快速构造和测试结果自动输出,将大大提高测试效率,满足敏捷构建要求。
基于此,本文设计开发了IATest(InterfaceAutoTest)接口自动化测试框架,实现接口模板数据解析、测试数据批量生成、测试结果自动核查和统计分析等功能,且各功能采用解耦设计,根据用户需要,可实现测试数据构造、用例执行等某一个测试阶段自动化,也支持测试全流程的自动化,使用灵活易用,复用性高,满足了各类接口测试自动化的需要。
该测试框架主要基于python3+request进行开发,主要分为三层结构,即基础配置层、业务数据层、可视化用户层。针对区块链服务平台测试特点,为兼容需要频繁更替测试数据和可复用相同测试数据的测试场景,把测试数据构造和测试用例设计过程进行了解耦设计,应用更加灵活高效,既支持新功能模块或需频繁更替测试数据场景用例,又支持老功能回归历史测试数据的直接引入,满足用户不同自动化场景使用需求。同时设计了自己的测试数据和测试用例模板,可以快速适配到其他业务系统接口测试中,该框架对代码进行了封装,用户无需关注底层代码实现,只需要关注测试用例和测试数据设计即可实现自动化,主要框架结如图1所示。
图1 IATest框架分层结构图
IATest自动化测试框主要功能模块包含:接口参数解析、测试数据模板生成、测试数据构造、测试用例解析和执行、测试结果比对、测试报告统计分析、测试日志管理模块,针对不用规范要求的接口测试,支持独立开发解析库,实现功能快速扩展,满足不同业务系统的多种类型的接口测试。
IATest框架的处理流程如图2所示。
图2 IAT框架处理流程图
根据框架处理流程图,处理流程中各功能模块说明如下:
(1)接口参数解析:测试人员提供需要自动化测试的每个接口的请求参数样例,IATest系统根据请求参数样例,解析出包含每个请求参数的excel测试数据构造模板和默认取值。
(2)测试数据构造:测试人员根据测试用例场景,填写接口参数解析出的excel表格,每个字段可以填写多个取值,用分号分隔,IATest可以批量根据组合关系批量生成与自动化用例对应的测试数据。
(3)测试用例执行:读取配置文件获取环境部署、测试账号、密码加密公钥等信息,并读取测试用例文件,根据是否自动化标识字段,逐行遍历测试用例并进行测试数据关联和自动化执行。
(4)测试结果记录:每条用例执行完成后,根据数据比对结果,回填测试结果为fail或success到测试用例对应“比对结果”列,并把实际执行结果也回填到“实际结果”列,同时会把“此次运行”列内容由“是”修改为“已运行”,并另存为带时间戳的测试结果记录文件,确保每轮执行结果的独立性。
(5)测试数据统计分析:当每个接口自动化测试用例运行完成后,从自动化率、自动化通过率、失败率等维度对自动化测试执行结果进行统计分析,并输出统计分析图表。
(6)测试结果比对:对每条自动化测试用例的实际执行结果和预期结果进行一一比对,获取最终自动化测试结果。
(7)执行日志管理:在测试用例执行过程中,每执行一个场景用例,日志关联模块打印该用例执行相关的URL、请求参数、执行结果等信息,方便问题定位。
为满足不同场景的应用需求,测试数据和测试用例进行了解耦设计,用户可以快速进行测试数据构造后进行自动化执行,也可以手工完成测试数据的准备后直接进行测试用例的执行,灵活便捷。
测试人员提供被测系统的接口参数模板后,IATest系统解析出该接口对应的测试数据快速构造模板,见表1,包含参数名、参数值(默认)、控制变量值(支持一对多)、用例名称4列内容,其中C列和D内容默认为空,用户可以根据要构造的测试场景自行填写,然后进行批量测试数据的生成。
表1 测试数据构造模板
因区块链服务平台接口设计特点,很多接口请求URL中包含链相关的参数信息,为满足支撑需要特设计了针对该类接口的测试用例模板,见表2,包含“此次运行*”“用例名称*”“发送地址*”“请求方式*”“请求参数格式”“比对结果”“实际结果”,其中A-D列为用户必填列,E列为选填列,默认为json格式,如果存在其他格式的请求,需要用户填写,F和G列为测试完成后结果回填列,A列为测试完成后值修改列。
表2 测试用例模板
规范化的用例模板设计,降低了对用户的使用门槛,用户只需要了解被测系统接口规范信息接口快速实施自动化。同时在设计自动化用例模板时,为保持和而不同,兼容不同测试用例,框架代码设计实现时采用用例表头列名进行遍历定位,用户使用的用例模板只需要包含测试用例模板的相关列内容,不受表头列位置影响,都可兼容读取执行,降低用户同时维护手工和自动化测试用例两套用例的困扰。
为提升用户操作便利性,实现了可视化运行界面,见图3,可以在该界面实现接口模板和测试用例模板下载、测试数据和测试用例、新增接口参数模板上传、测试数据构造、测试执行等操作。
图3 可视化界面
目前,运用IATest自动化测试系统框架,已实现了区块链服务平台多接口的自动化测试功能。实现了559个场景的自动化,该自动化测试框架提供了可视化执行界面和后台执行2种方式,可满足实时在线和无人值守模式运行,平均在1分钟内执行完成需要1人日手动执行用例数量,并能根据测试执行结果数据,生成统计图表,将测试结果和统计分析图表填写到测试用例文件中。相比人工测试和结果比对,大大提高了执行效率。
IATest框架针对手工测试过程中测试数据构造和测试结果比对等环节耗时多、易出错问题进行设计,有效节省了人力成本,减少了人工失误率,最终满足敏捷项目构建需要。通过测试数据和测试用例解耦设计,大大增加了应用的范围和灵活性,在区块链服务平台接口测试中得到了很好的应用。IATest通用性强,支持快速扩展,其它新增系统只需要提供接口参数模板或者符合要求的测试数据和用例,即可快速实现测试数据批量自动构造或者测试自动化执行。主框架提供的功能,用户可以根据测试场景需要,自主选择使用全流程或者某一个阶段流程的自动化。
总之,基于python3+request技术的IATest框架,提出了一种支持阶段或全流程的自动化测试框架,并在区块链服务平台后台接口测试中得到很好的应用,给后台接口自动化测试提供了一种新思路。