商业银行数据库管理实践
上QQ阅读APP看书,第一时间看更新

3.5 小型机下移x86服务器系统测试方案

正如前面所述,无论是小型机下移资源选型后的论证,还是基础软件的升级,离不开的一道工序就是测试。如何优化现有测试方法带来的工期长、所用资源多的问题,一直是我们研究的课题。最终,我们在小型机下移项目中独创了一种新的测试方法,起源于“用新思路,解决老问题”的工作思路。

3.5.1 传统测试方法

传统测试方法,意指在测试项目中常常使用的黑盒测试、回归测试和性能测试等传统手段的测试方法。这种测试方法的测试场景选择往往有两种策略,一种是高频交易选择法,即选择几只经常访问的高频次交易码作为测试场景;另一种是全量测试选择方法,即需要将该系统涉及的所有交易码梳理出来再测试,如在测试过程中修改了部分代码,还需要再进行回归测试全量运行所有相关测试场景。

传统测试方法中有些难点需要克服。例如,被测系统涉及与第三方系统进行交互通信时,往往需要开发相对应的挡板程序来完成此类测试,而这类挡板程序只能采用固定交易往复模型,返回固定的消息内容,所以不能真正模拟出所有真实场景。

从现阶段传统测试所用工具来看,业内经常使用传统测试工具(如LoadRunner等工具)完成上线前测试。采用此类测试工具,进行传统测试的弊端主要有以下几点。

(1)测试前需要先梳理测试场景,并根据场景来定制测试用例,往往不能实现业务系统交易码的全量覆盖。

(2)需要测试人员根据测试用例定制化开发测试脚本,用于实现各场景的回归测试,这需要大量时间调试及开发脚本。

(3)测试的数据均采用测试人员模拟的数据,而非真实的交易数据,造成测试结果失真,很难真实地描绘生产负载情况。

利用传统的测试方法,很难达成小型机下移x86服务器的项目目标,所以要改变以往的测试方法,利用新方法来开展测试工作。

3.5.2 高仿真测试方法

分析了目前业内常用的测试方法后,我们取长补短研发了高仿真测试平台。该平台利用了一种基于交易报文精确化匹配和自动化返回方法与装置,结合生产网络镜像流量导出的真实业务报文进行测试,提升了测试质量的同时也缩短了测试工期,传统的测试方案将被高仿真测试方案代替。

图3-3 高仿真测试平台架构图

如图3-3所示,我们在生产网段区域搭建了隔离区环境,该环境内的数据流向只进不出,隔离环境内数据无须进行脱敏,这点保证了数据的安全性。高仿真测试是通过生产网络流量镜像方式获取真实业务报文数据,随后将真实生产数据单向传入隔离环境内,再通过一种基于交易报文精确化匹配和自动化返回方法与装置,将真实业务报文自动化发向两种测试环境,基于报文粒度对每一笔系统间传输的往复报文进行字段级对比,以此判断总结来自两个系统平台的业务系统差异化报文,从而达到对比测试目的。

这里运用x86环境与AIX小型机环境做比较,目的是寻找来自这两个环境应用程序执行结果的具体差异,以此来判断系统下移后对应用程序的影响。因为小型机下移x86服务器主要更换了软件和应用程序的系统运行环境,并将基础软件进行版本升级,应用程序本身代码逻辑并不会发生改变,运用对比测试方法可以直接找到问题点。这种测试方法与传统的系统测试不同,重点是找差异,随后针对差异再制订整改方案。

高仿真测试平台的主要流程主要分为数据准备、报文捕获、交易还原、交易重放和结果对比五个步骤。

1.数据准备

数据准备工作主要是根据被测系统的架构和基本情况,在隔离环境搭建与AIX生产1:1的系统环境,随后再根据小型机下移至x86服务器的资源转换方案在隔离环境内搭建与小型机对标的x86服务器环境。

2.报文捕获

在生产网段通过TAP分路器设备复制一段时间的真实生产报文流量,以文件形式保存在报文文件落地区。

3.交易还原

在交易还原阶段,通过集中备份系统将复制好的过去一段时间的真实报文文件单向传输至高仿真测试服务器中,高仿真测试服务器读取并格式化生产真实报文,解析报文字段,建立请求与应答报文的关系。

4.交易重放

在交易重放阶段,模拟生产真实交易请求,根据不同的报文格式分别向隔离环境内的小型机和x86服务器发起交易请求,重放所有生产录制的交易。

如图3-4所示,针对与第三方交互的系统,高仿真测试过程中会配置交易报文精确化匹配和自动化返回装置,简称为“智能强关联”挡板程序(后称“智能挡板”)。该程序与以往的挡板程序有较大不同,主要是传统测试中的挡板程序只能返回固定应答报文,对于需要几次通信往复的交易就无法进一步模拟测试。而智能挡板程序会自动适配被测系统发送的报文请求,并根据获取的生产报文交易路径,分析出需要反馈的响应报文。

图3-4 高仿真智能挡板工作示意图

图3-4中的报文1、2、3、4是代表生产环境系统产生的报文。那么在高仿真测试的时候通过网络镜像流量抓取,落地文件解析,将报文1、2、3、4导入到高仿真测试平台的数据库中,并且通过报文中的某些信息,建立报文1与报文2的关系以及报文2与报文3的关系。

高仿真测试执行的时候,模拟发送工具从数据中读取报文1发送至被测系统,同时把报文1和报文2的关联关系发送给智能挡板,报文关系其实就是依据哪些信息能够在数据库中搜索到报文2的。

被测系统接收到报文1后,通过业务逻辑处理产生报文2',注意不是报文2,因为在新的测试执行中,被测系统产生的报文有些信息是动态变化的,例如,流水号、时间戳等每次执行都会产生不同的值。

智能挡板接收到报文2'之后,会对它进行解析,提取动态生成的信息,例如流水号、时间戳。同时挡板工具接收模拟发送工具发送的报文1和报文2的关联信息,从数据库搜索到报文2,依据报文2和报文3的关联关系搜索到报文3,再对报文3进行实时处理,例如,将解析提取报文2'中动态信息替换报文3中相应的信息,产生报文3'返回给被测系统。被测系统接收报文3',进行业务逻辑处理,生成报文4',发送至模拟发送工具。

在高仿真测试中,智能挡板实现了报文的精确化匹配,以及报文的实时处理,返回给被测系统不再是固定格式、固定数据的报文,而是完全匹配每次测试执行产生的数据。

5.结果对比

最后,在高仿真测试的前端GUI展示界面中,会为每个测试场景展示出报文对比结果,利用报文对比工具扫描出来自不同环境的报文字段差异结果,根据具体的差异项可以协助开发人员判断出具体差异项来自于哪个业务实现逻辑,可以针对性地设计整改方案。

通过对高仿真测试在小型机下移x86服务器项目中的应用,总结其优势如下。

(1)解决了传统测试模拟测试数据带来的缺乏真实性等问题。高仿真所用真实生产数据,能清晰地回放生产真实交易情况。

(2)高仿真测试整个定制及测试过程中实现自动化,因此节约了测试人力自定义编写测试脚本的时间,并缩短了测试工期。

(3)高仿真测试突破了传统的测试方案对交易路径设置固定挡板的方案。采用智能挡板针对不同交易特性,将每一笔交易的往复规则记录在数据库中,并自动关联匹配真实的响应报文,替换关键动态信息字段后反馈被测系统,达到交易的100%全覆盖。

高仿真测试方法适用于带有系统间交互(如Socket、MQ异步通信等)的复杂业务系统通过性测试,尤其针对基础软件升级或相关变更类的测试,并不适合应用程序变更后的单元测试或回归测试。

针对HTTP类的交易,因无法解析请求与响应报文的对应关系,所以无法通过高仿真测试来回放带有HTTP类的生产交易。针对这个问题,可以通过机器人流程自动化工具(RPA)方式辅助测试,此工具采用录制加回放技术,即先由手工完成一遍需要测试的流程,同时捕获用户每一步键盘的操作或鼠标的像素坐标形成记录,所有记录转换为脚本文件。随后,回放时将脚本转换为屏幕的操作。

3.5.3 性能测试评估原则

在小型机下移项目中,是否需要进行性能测试,要进行评估后才能决定。

基础软件的运行环境从小型机下移到x86平台,是否需要进行性能测试,唯一的决定因素是应用做了什么样的修改,是否改了接口与逻辑,而不是Db2数据库运行环境和版本的变化。

从理论上来说,Db2运行平台的变化和版本的变化,Db2引擎内部代码也会发生变化,但是Db2产品在正式发布前,已经经过了IBM公司专业的功能测试和性能测试,我们已无须再进行性能测试;从实践上来说,总结过去多套系统下移来看,交易吞吐量和响应时间等性能指标都普遍获得了性能提升。退一步讲,万一命中了Db2性能方面的缺陷,也可以通过基于CDC的回退机制进行有效保证。

基于上面的分析,再结合小型机下移项目的生产系统现状,给出下面的原则。

1.不需要做性能测试的场景

(1)对于仅是WAS、MQ等中间件在x86服务器版本升级,则无需性能测试。

(2)对于仅是应用重新部署,应用代码没有做过修改,则无需性能测试。

(3)对于仅是个别应用从小型机下移到x86服务器,应用代码没有做过修改,则无需性能测试。

(4)对于仅是应用从小型机下移到x86服务器,应用代码做过修改,但经过调研,确认没有改变接口和逻辑,则无需性能测试。

(5)对于数据库从小型机下移到x86服务器,不涉及数据库版本升级,且应用代码没有做过修改,则无需性能测试。

(6)对于数据库从小型机下移到x86服务器,不涉及数据库版本升级,且应用代码做过修改,但经过调研,确认没有改变接口和逻辑,则无需性能测试。

2.需要做性能测试的场景

(1)对于仅是应用从小型机下移到x86服务器,应用代码做过修改,但经过调研,确认改变了接口和逻辑,则需性能测试,例如,通过LoadRunner进行压力测试。

(2)对于数据库从小型机下移到x86服务器,涉及数据库版本升级,且无论应用代码是否做过修改,则需性能测试,例如,通过LoadRunner进行压力测试。

3.5.4 测试方法选择策略

前面简要介绍了两种测试方案。在实际项目中,按照下面的原则选择传统测试方案或者高仿真测试方案。

(1)无论选择哪种测试方案,都将通过软件版本升级差异性对比进行代码梳理,针对命中差异的代码逻辑要单独准备测试场景着重测试。

(2)如果在小型机下移项目中修改了应用程序,但没有改变程序接口和逻辑,则使用高仿真测试;如果修改了程序接口,我们认为程序变动需要做相应的单元及回归测试,则只能使用传统测试方法。

(3)对于需要重新编译应用程序的情况,如果没有资料说明对功能、程序逻辑有影响,则仍可以采用高仿真测试。

(4)凡涉及基础软件版本、补丁升级或是为验证基础软件变更的不确定性的测试工作,原则上,除了在1年内有明确系统重构排期计划的系统外,所有的参测系统应全部经过高仿真测试。

(5)从新的测试方法上讲,存在系统间通信的系统(特指被测系统有直接通信,如Socket短连接、MQ异步短连接等通信方式)需要通过高仿真测试-智能挡板测试环节;只存在HTTP长/短连接通信的系统,需要通过机器人流程自动化工具(RPA)测试环节。

3.5.5 商业汇票系统测试方案选择结果

依照上面对各种测试方案的选择策略,针对商业汇票的测试方案最终如下。

(1)因商业汇票系统与上海票据交易所(后称“票交所”)对接,通过接收和发送报文进行相关业务处理。原有传统测试环境只支持固定挡板,不能模拟整个交易链路。因此,为了100%还原与票交所之间的交易通信往复,采用了高仿真测试方案。

(2)因为JDK升级至1.8,对大量源代码进行重新编译,过程中调整了部分代码,因此需要对变更代码部分进行单元测试、传统功能测试和性能测试。

综上所述,针对商业汇票系统下移,运用了三种测试方法相结合的方式。