打开网易新闻 查看更多图片

文 /中国邮政储蓄银行软件研发中心 祝君平 李清 方李西 申彤

目前,邮储银行正在大力推进新一代信用卡核心系统的建设,坚持“以客户为中心”,推进信用卡的全面数智化转型。在系统建设过程中,引入DevOps流程以提升系统建设效率,然而,频繁的持续集成和部署给测试阶段带来更大的压力,测试人员需要在短时间内完成包括新增功能以及回归测试在内的大量测试工作,面临测试任务重、质量管控风险大等挑战。如何更好地开展核心系统的测试工作、有效地沉淀及共享测试经验,是测试团队亟需考虑的问题。

本文以邮储银行新一代信用卡核心系统为例,开展自动化的深度应用,引入接口自动化测试,可实时监测持续集成和部署中的不稳定变更,帮助测试及开发人员快速定位回归测试中的问题,提高了测试覆盖率与测试效率;并基于实际测试需求,打造信用卡核心测试支持工具,为项目建设全流程提供了有力支撑。

当前信用卡测试工作的痛点

1.集成部署周期短,版本更新快,手工回归测试成本高,测试难度大。当前系统开发引入DevOps,进行持续集成、部署和交付,版本更新周期短。在频繁快速发版的情况下,进行手工回归测试的成本大大增加,在有限人力的情况下提升回归测试覆盖率成为一大难点。此外,信用卡核心系统作为信用卡的中枢系统,在每次发版时确保所有联机交易均可正常运行,对整个系统的建设工作起到关键性作用。

2.测试数据的生成操作复杂,且存在时效性弱及效率低等问题。信用卡执行过程中需要各类的测试数据,如挂失、止付等状态的卡片、已消费的卡片、已分期的卡片等。针对这些数据,若采用手工方式生成,存在以下问题:一是测试人员通过关联系统页面输入的方式生成测试数据,需熟悉掌握系统业务逻辑,否则易误操作产生不可用数据;二是针对某些异常业务场景,异常数据生成条件苛刻,无法直接在页面模拟生成;三是针对一些特殊场景,测试数据无法复用,需要持续生成可用数据,例如,信用卡激活后无法再次激活。因此,如何实时快速生成大量可用的测试数据也是当前测试工作的一大痛点。

3.新一代信用卡新核心系统建设过程中涉及众多关联系统,系统调用复杂,增加测试难度和工作量。新一代信用卡核心系统的建设涉及众多关联系统,系统交互时涉及复杂的接口调用和数据传输,若当前核心接口无法保持稳定,所关联的其他系统也将无法正常使用,将影响整体的测试进度,如何保证核心接口的稳定和可用性,确保关联系统的测试进度也是当前测试的一大难点。

信用卡接口自动化测试框架设计与实现

针对以上问题,我们在测试过程中引入接口自动化测试。在邮储银行现有接口自动化框架的基础上,结合新一代信用卡核心系统的特点,提出模板与数据双驱动的接口自动化测试框架,实现测试数据的自动识别以及接口请求体的智能拼装,降低测试人员的脚本编写难度,提高脚本产出率。框架整体分为三层:资源管理层、数据管理层、接口管理层。资源管理层放置资源文件,包括环境信息、数据库信息等。数据管理层搭载了数据驱动的方法,使用Excel文件存储各接口的测试数据,同时研发自动生成用例工具,配合数据文件使用,支持一键生成全部接口的符合测试规范的用例文件。接口管理层即所有的封装接口,包括请求体管理、脚本管理及响应体管理三部分,请求体管理实现了请求的智能拼装;在脚本管理中,每个接口形成一个单独的jmx文件,增强了脚本的可读性和可维护性;响应体管理包括数据库查询及脚本断言处理。框架整体架构如图1所示。

打开网易新闻 查看更多图片
图1 框架整体架构图

1.模板驱动。使用模板驱动,实现了接口和脚本的高度分离。传统的JMeter脚本,请求体的构建以及随机参数的维护均放入脚本的编写中。此框架在原有的框架基础上,将所有的信用卡核心交易请求进行了分析和拆解,拆分成公共层和应用层。公共层进行统一维护,测试人员仅需关注接口的应用层内容,通过拼接公共层和应用层形成完整的请求体,所有联机接口基于以上拆解方式,形成模板库。在Jmx文件中,通过接口服务标识符,JMeter可自动定位所需要的请求模板,并形成可调用的完整请求体。模板中预制了请求中所需要的默认参数,测试人员梳理测试数据时,仅需关注当前测试场景所需参数即可。同时通过修改模板文件,实现对测试脚本的一改皆改,极大降低了脚本的维护量。

2.数据驱动。框架通过数据驱动的方式,实现了测试脚本、测试数据的高度分离。测试数据存储在外部Excel文件中,请求体封装在模板中,脚本执行时自动导入接口测试的参数数据,保证了测试数据的独立性。与传统的接口测试框架相比,存在以下优势:首先,不同于JMeter的按行读取方式,本文提出的框架按列进行数据读取,数据与参数的关系更清晰,便于测试数据的维护;其次,现有的数据文件支持随机参数的生成、各种格式日期数据的生成等,脚本仅需关注业务逻辑即可。图2以某一接口为例,第一列包含用例描述、是否运行标记(run_flag)、接口所需参数、预期响应码及预期响应信息等;再次,第二列字段描述是请求报文字段的中文描述,便于理解;最后,后续列以xyk_接口服务标识开头,0001递增结尾,表示不同的测试用例。可以看到,测试数据不仅涵盖了该接口正反向用例,还考虑了接口串联的情况,覆盖了多种场景下的接口测试需求。通过上述数据驱动的方式,当接口功能变更时,只需增加、修改或删除测试参数数据即可,而无需反复修改测试脚本(Jmx文件)。

打开网易新闻 查看更多图片
图2 某接口测试数据及脚本结构示意图

此外,在信用卡测试过程中,针对不同的场景,每个接口所需的请求字段可能存在差异,框架中支持根据数据文件中的内容,动态调整不同测试场景所需要的请求字段。通过这些方式,提高了脚本的复用性,降低脚本维护量。

自动化的深度应用

1.脚本规范化,降低编写和维护成本。框架同时支持单接口以及接口串联的测试场景。对于多接口串联场景,将不同接口的参数数据放置在同一个Excel文件的不同Sheet页,满足业务场景的多接口串联。图3、图4展示了多个模块间多接口串联场景的数据文件以及脚本结构示意图,脚本串联场景为:客户开户开卡—附卡申请—信用卡激活—预授权—预授权撤销—账户查询—销户。所有请求均通过自定义的JMeter函数,自动生成请求体,脚本规范统一。通过模板和数据双驱动的方式,实现脚本、接口、数据的完全分离。以50条脚本为例,采用传统接口测试的方式,全部编写完成耗时约200分钟;使用现有框架,仅需构造模板和数据文件,耗时约45分钟,极大缩短了脚本编写时间。同样,当接口功能变更时,测试人员仅需对参数数据进行增加、修改或者删除即可,而无需反复修改接口文件,降低了脚本维护成本。

打开网易新闻 查看更多图片
图3 多接口串联场景的数据文件示意图
打开网易新闻 查看更多图片
图4 多接口串联场景的脚本结构示意图

2.回归测试常态化,快速定位问题。当前框架已应用于新一代信用卡核心系统,覆盖某环境115个联机接口,梳理接口正常场景、多接口串联场景(工程内及工程间)、接口参数异常场景、接口业务异常场景以及高频交易等场景,共计编写完成4000余支接口自动化测试脚本。所有脚本已在邮储银行自研的自动化测试平台中进行版本绿灯测试、全量回归测试的常态化执行,测试执行结果及报告实时展示,当测试脚本执行失败时,可通过报告快速发现问题接口以及失败的接口响应,有助于开发与测试人员快速定位问题。

3.造数过程可视化,提高测试效率。新一代信用卡核心系统的测试前期均基于接口脚本造数,无可视化的界面,且造数完整过程不可见,使得测试人员难以实时监控数据的状态和进度。在此次实践中,基于此接口自动化框架,我们研发了可视化的信用卡测试支持工具,实现了以下五大功能。

开户开卡激活功能:开户开卡、卡片激活、附卡申请以及批量开户开卡。

密码管理:客户级查询密码设置/重置、卡片交易密码申请/重置。

异常卡处理:卡片挂失/解挂、卡片睡眠/激活、卡片销户/撤销、卡片止付/解止付等。

消费场景:卡片消费/还款、卡片消费撤销、消费退货等。

预授权业务:行内预授权、行内预授权撤销等。

信用卡测试支持工具提供了可视化界面来配置和管理数据生成过程,适配多套测试环境,支持批量生成数据,可快速模拟各种生态场景生成多样化数据,满足业务、开发,以及测试人员的测试造数需求,大大降低了造数工作的复杂度。

目前此造数工具已广泛服务于系统开发人员、业务人员以及功能测试人员,平均每条测试数据的生成时间由15分钟降低至2分钟以内,显著提升了数据生成速度,提高了测试工作效率。

4.用例生成自动化,降低测试成本。考虑到人工编写测试用例需要花费大量的时间/人力资源成本,我们提出并研发了测试数据转用例工具,根据测试框架中的参数文件和测试数据,一键生成符合测试规范的用例文件。在测试分析阶段,根据联机接口规范、需求规格说明书等文档整理出115个接口的测试数据,使用此工具可自动生成4000多条测试用例,经业务、开发及测试人员内部评审,生成的用例类型全面,包含了流程类、规则类及权限类用例,达到对业务场景的全方位覆盖。按照传统手工方式编写测试用例,编写4000条接口测试用例平均需要花费15个人天,而使用自动生成工具,仅需要花费2分钟,且生成的测试用例的规范性、完整性高于手工编写用例。同时在系统建设过程中,由于业务需求变更及系统频繁迭代等原因,需要持续调整或更新测试用例,手工维护成本较高。在我们的测试自动化框架中,只需在每次维护测试脚本后,通过自动生成用例工具,即可同步生成最新的测试用例,有效降低了测试用例的编写和维护成本。

未来展望

本文提到的测试自动化方案,已成功应用于邮储银行新一代信用卡核心系统的测试工作,有效降低了测试成本、提高了测试效率,在提升项目质量方面发挥了重要作用。通过此次实践,该方案的可实施性得到了充分验证,后续也将在邮储银行的其他核心系统,如资金清算系统、数字人民币核心系统中推广落地。同时,此方案中采用的测试自动化方案,可为同行、同类系统的测试自动化工作提供较高的参考价值。

未来,随着科技的快速发展,测试自动化已成为软件开发和产品质量保证的关键环节,将朝着更加高效、智能、自动化的方向发展。后续邮储银行将加强人工智能与机器学习的深度应用,通过机器学习自动学习与改进,实现测试需求、测试数据、测试结果等的智能化分析,提高测试的准确性和效率;研发模块化的测试工具,提高工具的适应性和可维护性,可满足各种复杂和多变的测试需求,实现测试自动化的多元化及智能化发展,以更高的效率、更准确的测试结果为目标,不断推动软件质量的提升和创新发展。

(此文刊发于《金融电子化》2024年5月上半月刊)