一种基于数据工厂和CDC的测试数据聚合分析及还原的方法和系统
2021-03-25王语杰欧阳鹏辛存生沈桐乔子真
王语杰,欧阳鹏,辛存生,沈桐,乔子真
(1.国网汇通金财(北京)信息科技有限公司,北京 100053;2.国网电子商务有限公司,北京 100053)
0 引言
相比于传统的测试方法,数据工厂在帮助测试人员提升测试效率上已经有了很大的进步,因此数据工厂及其相关技术和业务在过去几年得以推广,并且已经开始应用于各种实际的测试场景中,如大批量数据多表关联的测试场景、高并发的压力测试场景等,已经成为测试开发人员最关注的测试工具之一[1]。
但是由于数据工厂这个解决方案本身还处在发展阶段,所以在设计上依然存在许多可以优化的方向。传统的数据工厂仅负责生成数据,在测试过程中需要测试人员手工查看哪些数据发生了哪些变化,是否符合预期;如果测试过程中发现问题则需要手动还原数据,而对于批服务测试和压力测试,测试人员有时希望能够快速地把测试数据重置为初始状态。因此,本发明旨在在数据工厂的基础上解决如下两个问题:一是对于测试中测试数据及其关联数据的状态变动的监控和显示;二是当测试结果并不符合预期或者测试场景需要时,将测试数据及其关联数据恢复成初始状态。
1 行业现状
目前已经投入给测试人员使用的数据工厂大体分为两大类型,一种是主要提供自动生成测试数据的方法,其能够根据实际场景的需要,向数据库大批量地写入测试数据,从而帮助测试人员提高数据的生成效率和质量[2]。另一种则将测试中需要用到的数据以数据模板的形式统一管理,在自动化测试系统中,实现测试数据的记录,保存,复用等功能,也可以整体性地提高测试的效率以及自动化系统的代码复用率[3]。
然而现存的方法都仅关注测试数据的生成和复用,在实际应用中对于测试人员来说存在大量的问题:
一是因为传统的数据工厂仅负责批量生成符合测试要求的数据[4],但是对于测试过程中后续的流程没有任何参与,测试人员往往需要手工对测试数据进行一一校验,而这个过程往往十分耗时耗力,占用大量测试资源。
二是传统的测试人员人工校验测试数据变动情况时,一般只能获取测试完成后的数据终态,对测试过程中的数据变化,无法有效的捕获和分析。
三是由于难以保证开发人员的代码是正确的,如果测试过程中发生错误需要重新进行测试,而测试数据已经产生了一定程度的变化,会影响到后续的测试进程,导致测试人员需要手工删除批量插入的数据及其流转过程中产生的新数据,占用大量的测试时间并且容易出现错删漏删的现象。
2 解决方案
本文提出的方案按功能划分由以下六个模块组成:
(1)抽数提取模块。抽数提取模块用于将数据库表变动的信息明细提供给聚合分析模块使用。其原理是利用CDC抽数获得数据变化的日志信息,依据日志中的数据变化明细生成操作表、操作类型、操作前后状态等信息,然后发送至消息队列中间件。
(2)数据工厂模块。数据工厂负责创建单条或批量生成数据的任务,并将数据生成任务与数据生成的结果关联起来,便于后续针对单个数据生成任务进行监控和聚合分析。
(3)监控配置模块。针对某个数据生成任务中生成的某些数据,即需要关注的测试数据,可以设定特定的监控和聚合分析配置规则,如监控流水表中支付状态字段的插入和更新情况,随后便可以以表名、监控字段和操作类型为标记进行聚合统计分析。此模块生成的配置规则,会传递到聚合分析模块后生效。
(4)聚合分析模块。如图1所示当聚合分析模块从消息队列中间件获取数据后,会根据监控配置模块配置的规则,筛选过滤特定表、特定操作类型及关注字段的变动信息,进行数据归类汇总并进行数量和比例的统计,从业务角度统计出测试过程中数据表中数据的变动。
图1 数据流转关系图
(5)数据恢复模块。数据恢复模块可以依据数据流转关系,即测试流程中数据的传递和变化涉及的,自动在数据批量生成开始前生成备份表,支持数据恢复和备份表自动删除等功能。
(6)交互展示模块。交互展示模块可以配置需要监控的数据表、操作类型、关注字段等配置,同时会将数据表变动的结果直观地展示出来。
整个系统执行的流程步骤如图2所示:
图2 系统流程图
步骤1:测试人员在测试平台中的数据工厂模块配置需要批量添加的数据,并添加数据流转相关的表,点击生成后自动对相关表进行备份,随后开始批量生成数据,生成数据结束后配置要监控的数据表、操作类型、关注字段等信息并点击开始监控。
步骤2:测试平台在收到开始监控的命令后会开始获取消息队列中间件中当前时间之后的数据变动信息,并根据配置的聚合分析规则开始实时聚合分析。
步骤3:当测试过程结束后,测试人员点击监控结束,平台接收到请求后终止接收消息队列中间件数据,并将期间收集到的信息,依据数据表、操作类型、关注字段等配置将数据归类汇总,生成测试过程中数据流转的整体结果,并展示在前端页面。
步骤4:测试人员依据前端展示的数据流转结果对测试结果进行判断,如果认为结果存在问题,则可以点击数据恢复,平台收到请求后会清空关联的所有数据库表,并将备份表中数据复制进原表中;如果认为测试结果不存在问题,则在一段时间后,自动删除该备份表。
要实现数据库表数据监控还可以通过触发器实现,而CDC抽数相对触发器的方式有以下优点:
(1)通过CDC抽数的方式更加容易实现[5-6],只需要配置CDC即可将数据发送至消息队列中间件,而触发器需要针对表和字段进行配置,需要表级、字段级去手动维护,需要使用JMS监听Oracle AQ才可以实现相同的效果。
(2)成本更低。如图3所示,CDC本身就可以将数据转化为容易处理的json格式,而触发器一般需要提供一个转换工厂类将Oracle类型转换为Java类型才可以进行处理。
图3 数据格式图
(3)占用资源更少。触发器的使用需要占用额外的数据库及系统资源,而CDC仅捕获数据变化的日志信息,可以一定程度上降低系统资源的消耗。
3 结语
本文提出的方案将数据工厂和CDC抽数相结合,先通过CDC抽数将数据库数据的变化提取出来,然后通过聚合分析将符合条件的数据进行汇总展示,可以方便地查看测试结果,定位错误点,方便代码优化和问题排查。同时对数据变动的实时收集和实时分析,使得测试人员能够在关注数据终态之外同时关注测试数据的变动过程,扩大测试的有效范围;同时在生成数据时自动对涉及的关联表进行备份,帮助测试人员对数据进行还原,更加方便可靠地将测试数据初始化。