本文以接口自动化测试作为银行测试工作突破口,在分析主流工具与银行业实际需求之间差异的基础上,通过自研打造接口自动化测试平台,分享了平台建设及落地的实践经验。
自动化测试类型分析
自动化测试是提高测试效率的有效方法,目前业界的自动化测试基本分为两类,一类是基于UI的自动化测试,另一类是基于接口的自动化测试。一般情况下,软件的界面UI变化比较频繁,实施基于UI的自动化测试维护测试用例的成本较高。而软件的接口相对变化较少,维护测试用例的成本较低。其次,接口自动化测试的执行效率较高,暴露缺陷的解决成本相对较低,在繁重的测试压力下,可以通过接口测试快速验证软件的基本功能,提高软件的测试效率。
1.构建接口自动化测试平台
通过对市场上Postman、SoapUI及Jmeter等接口测试工具的研究发现,这些工具可以完成基本的接口测试。但对于接口信息的维护、测试案例的设计与管理、测试数据的准备、发送报文的拼装、返回报文的解析以及测试缺陷的自动提交等方面却无能为力。另外,对于多接口的串联交互、复杂检查点的设置与判断、测试报告的生成等则还需要相应脚本语言的支持,测试人员只能编写脚本进行控制,这又会挤占测试时间。此外,上述测试工具不支持银行信息系统中广泛使用的Socket(定长/不定长、有/无分隔符、长/短连接等)、TONG及MQ等协议。为解决以上问题,我们结合华夏银行应用系统的特点,针对各个系统不同的通讯协议和各种特殊的报文拼装与解析方式,打造了一款基于微服务架构、支持接口测试全流程的平台。通过该平台不仅可以实现单系统以及系统群的接口测试,还可实现交易并发的性能测试,支持功能测试与性能测试的前移。
2.接口自动化测试平台架构
①平台技术架构
如下图1所示,整体应用端采用Nginx作为反向代理服务器,实现web端应用对高并发连接场景的适应能力,消除web端的单点故障;
通过虚拟路由技术解决Nginx服务器单点故障;
使用API网关路由,实现根据请求锁定目标微服务并将请求进行转发的功能,同时实现权限校验、限流控制、高可用、负载均衡及容错能力,防止整体崩溃的情况;
使用Eureka集群做为微服务注册中心,所有微服务都注册到Eureka供消费端使用,可根据需要扩展微服务的节点,并且各个Eureka节点间通过复制方式完成数据的同步,其中一个Eureka节点出现问题时,注册中心仍可正常提供服务;
使用sleuthzipkin + rabbitMQ微服务链路追踪,监控并收集所有服务请求;
使用Mysql存储业务关系数据,使用Redis、Elasticsearch存储用户信息、查询频繁及数据量大的数据,加速请求访问;
通过actuator对各个微服务节点进行监控,随时掌控各个微服务的运行状况。
②平台应用架构
如下图2所示:
基础资源管理: 基于用户角色实现菜单访问及功能操作的权限控制。
作业实施层: 提供测试作业过程的案例分析、生成、执行等服务。
作业控制层: 提供测试需求管理、任务同步、结果审核等服务。
作业结果层: 提供各种统计报表、测试报告、缺陷信息处理服务。
公共资产库: 提供消息通知、日志管理等服务,存储经审核并归档的测试资产,为测试人员提供查询及引用服务,提高测试效率。
接口自动化测试平台功能介绍
①接口测试全流程线上化
本平台实现了接口测试全流程的线上化、标准化与自动化,包含接口信息维护、测试案例设计与管理、测试数据准备、检查点设置、发送报文拼装、报文发送、返回报文解析、检查点判断等功能,每个功能模块都可以以微服务方式向外提供服务接口。
②执行机容器与执行机
考虑到银行被测业务系统与通讯协议的多样性,本接口自动化测试平台在设计之初就考虑到了与被测系统匹配的灵活性。在架构设计上提出“执行机容器”与“执行机”的概念,做到了执行与准备的完全分离,根据协议类型与报文格式创建的执行机服务,可脱离被测系统实现共享,降低后续维护负担。同时测试数据与测试案例完全分离,实现以数据为驱动的测试,如下图3所示。目前已支持的协议有Socket(定长/不定长、有/无分隔符、长/短连接等)、TONG、http(json),并实现了全行主流的重要信息系统的接口自动化测试。
③数据准备方案、报文拼装与解析
本平台提供了灵活多样的数据准备方案:
1、数据池功能: 辅助用户快速创建测试数据库表,存储用户所需的测试数据已备接口传入参数使用。
2、函数功能: 工具自带随机数字、随机日期、随机身份证号等函数方便用户生成消耗性测试数据。
3、常量数据: 支持从excel中批量导入常量数据。
4、交易链: 支持多接口串联的业务场景测试,将前置接口的响应字段传递给后续接口的请求自带。
5、SQL动态获取: 支持从被测系统数据库中使用sql语句取测试数据,或作为检查方式使用sql查询被测系统数据库中的数据是否正确处理。
这些方法降低了测试数据准备的难度。同时,可根据接口文档实现可视化的发送报文自动拼装与返回报文自动解析,提供了灵活简易的测试案例检查点设置及检查点的自动判断功能,如下图4所示。
④测试案例执行报告
为切实减轻测试人员整理测试成果物的负担,平台将会自动生成内容详实的执行报告,包括案例执行人、执行结果、执行用时、发送与返回报文详情及相应的统计信息等等。方便测试人员随意裁剪,形成可交付的最终测试成果物,如下图5所示。
⑤交易(接口)链
平台实现了完全摆脱程序脚本的交易(接口)链功能,根据平台维护的交易接口信息,通过可视化的拖拽等操作,不仅可以实现同一被测系统内不同交易接口间参数的自由传递,还可实现不同被测系统间交易接口的参数传递。通过该功能可以方便地完成实时的跨系统测试数据准备及关联接口的相关测试。如下图6所示。
应用实践
1.解决系统测试时间不同步的问题
由于金融业务的安全性与特殊性,决定了银行软件系统的复杂性。每笔交易除了往返于传统的前台、中台与后台之外,还要经历由各个独立子系统甚至是第三方系统提供的各种有效性检查、加密、解密、验证、复合确认等等。因此,在银行软件系统的测试过程中经常会出现系统之间互相等待的情况。例如,信贷接口已经开发完成,需要等待网银的最新界面才能完成调用测试,也就是说,各个系统进入测试阶段的时间点有先有后,节奏和步调始终不能统一。现在,我们利用接口自动化测试平台,在被测系统完成单元测试后,不必等待其它的上下游系统开发完毕,即可完成对其自身的接口测试,实现了测试的前移,为测试人员争取了更多的测试时间,为进一步丰富测试案例和测试数据提供了时间保障。
2.系统并发性测试前移
在接口自动化测试平台中开发了接口并发性测试功能,每条测试案例可以根据需要灵活配置它的并发数。这样,在开发的最初阶段,开发人员即可对系统的接口进行并发性的自测试,使被测系统的性能缺陷提前暴露,减轻后期的性能测试团队压力并降低缺陷的修复成本。
3.实现系统群、交易群、数据群的接口测试
在金融软件的测试过程中,数据的准备往往是非常耗时的,并且有些数据一经使用,即失去再次使用的价值,如贷款账户等数据。一个应用系统为了测试某些新增的功能点,常常需要在其上游系统中通过触发一连串的交易来获取自身系统所需的测试数据,例如,信贷系统放贷之前,需要核心系统开立个人客户,然后开立个人卡。针对这些上游系统,把常用的交易链部署在接口自动化测试平台中,同时利用“贴标签”的方式标记这些交易链,形成实时的“数据群”,测试人员可以方便地调用这些交易链来快速准确地准备测试数据,摆脱对上游系统繁琐的手工操作过程。
另外,我们利用接口自动化测试平台对被测系统的上下游系统进行测试案例群的覆盖,形成了标签化的系统群、交易群,可以实现对系统群、交易群的同时验证。
4.接口自动化测试平台配合其它工具使用
在对各应用系统的测试过程中,并非所有的测试案例都可以通过调用接口来实现。接口自动化测试平台的接口测试功能配合应用系统的定时自动跑批任务调度器,再配合平台的文件检查等功能使用,可以更全面地覆盖银行应用系统的测试场景。举例来说,有A、B、C(如图7)三个银行的被测应用系统,测试目标是通过调用A系统的接口,改变了A系统的数据库字段(如金额),B系统的定时自动跑批任务调度器在日终后定时触发跑批任务,从A系统的数据库中批量抽取字段,经过加工后,将数据传送至C系统,C系统的自动跑批任务调度器定时触发跑批任务,生成数据文件,接口自动化测试平台的文件检查服务将在系统指定的时间点检查文件是否生成,并检查文件中的内容是否正确,并自动生成相应测试报告。
5.测试结果与数据库的自动比对验证
接口自动化测试平台不仅需要具备对被测系统返回报文进行预期字段预设值检查的功能,有些接口的调用,被测系统并无具体的接口报文返回,而是在系统处理报文的过程中改变了数据库表的某些字段值,或者生成相应的处理结果文件,如核心系统跑批交易接口等。为了更好地验证被测系统,我们开发了接口自动化测试平台的数据库适配功能,实现了通过配置相应数据库,对数据库表的具体字段进行自动检查,验证其是否符合测试预期。
6.测试成果物的辅助生成
通过本平台的自动化功能,实现数据的抽取与统计,自动生成相应测试报告,减轻测试人员手工操作的成本,提高测试报告数据准确度的同时加快了报告生成的速度。
7.测试缺陷的自动提交
测试案例自动化执行发现缺陷后,本平台可以根据执行结果自动提交或填充相应缺陷信息与回归步骤,并且自动更新缺陷状态,减少测试人员的手工操作,使测试人员专注于缺陷本身,进一步提高测试效率。
最后: 大家可以去我博客首页看下侧边栏! 进去有许多资料共享!资料都是面试时面试官必问的知识点,也包括了很多测试行业常见知识,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。
好文推荐
转行面试,跳槽面试,软件测试人员都必须知道的这几种面试技巧!