对比测试工具平台让财务测试飞起来
Posted 唯品会质量工程
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对比测试工具平台让财务测试飞起来相关的知识,希望对你有一定的参考价值。
|背景
唯品会财务核心系统主要是对订单、支付及库存等记录大数据的批处理。其中对供应商的账单,是经过一系列的处理步骤如:抽数、预处理、货款计算、优惠分摊计算、重算等一系列有序后台批处理才生成。为了适应复杂的公司业务,设计较为灵活,配置较多,尤其是货款计算逻辑覆盖各种业务模式的耦合性强,可测试性较差。
每当公司接入一个新的业务模式,相应的账单计算逻辑常需做相应修改。如何保证每次变更后,不会影响公司已有业务模式的账单计算的准确性与可靠性,对于测试来说是一个非常大的任务与挑战。常规的所有业务回归测试方法所需时间较多(新增功能只需2人天测试,回归测试所需时间有时要超7人天,开发常评估说覆盖所有业务)且难保证覆盖全面。
我们针对这些应用的特点 ,开发了一个对比测试工具平台,使用之后,效果(测试效率与测试质量提升)显著,回归测试缩短至1天内,且账单计算逻辑修改后基本无错。考虑到它的通用性,现分享出来,供大家参考借鉴。
|平台原理
对比测试平台是一个既能使用线上真实业务数据导入用于自动回归测试,又能自建业务场景数据功能测试的平台。该平台与应用代码及部署环境不相关,只与测试业务数据相关。目前仅支持mysql数据库及vms消息应用驱动。它的原理图如下:
对比测试工具平台原理图
如果业务规则不变,包含各种业务场景的生产数据,在我们待测app优化变更前后,它们的输出数据Result1与Result2应该完全相同,我们即可以直接输出预期结果数据至baseline库中,也可以根据实际情况分别将变更前后的app运行输出结果保存或更新至baseline库中,作为我们基线结果,用于每次回归测试的基线结果比对。
|应用场景
本对比测试工具平台,适用于具有以下特征的后台job任务。一类是消息任务,主要是消费其他系统流过来的消息,经过处理写入库表;一类是数据处理任务,直接从多个库表数据加工处理成其它库表的数据;一类是结合消息和数据处理的任务,消费消息并结合自身库表的数据处理,写入库表。例如:
重构回归:系统重构时,复制真实线上相应库表中的数据到被测试环境进行回归,相当于在不影响业务的情况下提前上线检测系统潜在的问题。最大优点是,覆盖了生产上各种业务场景的数据。对于这种端到端的后台应用场景尤其高效可靠,做到了一键回归。
功能测试:该平台还可以用于功能测试,测试同学只需根据job的业务场景,提前准备好所有的业务场景数据及预期结果数据,待测试job部署在测试环境后,同样,在平台上一键操作便会执行测试场景数据初始化、启动应用、停应用及测试结果收集与比对,从而,达到效率的提升。
|工作流程
我们在编写测试用例时,输入与对应的预期输出是功能测试用例的重要组成部分。存在着一类应用,如果输入(包括应用起动初始化条件)与预期结果都是直接存储在相应的库表中,那么只要功能点不发生变化,相同的初始化输入数据,那么经过应用job的处理后,一定会得出一致的输出结果(如财务的确定时间段内供应商的账单数据,不论应用job如何优化,只要计算规则不变,优化前后的账单计算结果应是相同)。
通过基础信息管理模块来采集待测job的部署、运行及依赖的库表数据信息。然后借助模板管理模块来接收功能场景对应的输入与预期输出结果数据,并将它们存储在平台库表中;接着在场景管理模块把应用job及场景对应的输入与输出数据关联起来,预期结果存储在场景基线结果库表中,当用户触发对应场景执行时,后台测试场景调度程序便会依次执行场景初始化数据,然后启动运行对应待测job,待调度执行程序获知本次job执行完成后,收集本次场景执行库表的结果数据并与对应基线结果进行比对(如下图所示)。
对比测试工具平台工作流程图
|整体架构
对比测试工具平台整体架构图
对比测试工具平台的整体实现架构如下:
基础数据模块负责管理用户应用部署的环境信息、应用启动脚本及应用所对应的数据库实例信息。
模板管理目前已具备数据模板与消息模板功能。
1、其中的消息模板已支持往VMS消息队列触发消息,然后应用程序来消费消息。
2、数据模板分为场景输入造数模板与场景预期结果模板。分别对应场景的 输入数据与预期输出结果数据。为了能更好支持测试同学同时利用一个环境下进行回归测试与其它功能测试,避免测试数据的相互影响,造数模板中增加了场景执行时数据备份与是否清除库表数据的功能,结果模板提供了排除字段及选择比对结果集的功能。
场景管理模块主要负责场景执行的输入及预期输出结果及启动应用的信息结合在一起,并保存在平台的场景库表中,确保每一个场景由调度程序执行时,能正确地初始化数据,启动应用及执行结果比对。
测试计划管理模块主要作用整合多个测试场景组成一个测试集,不仅可以减少手工一个一个地触发测试场景执行,而且可以非常方便实现端到端的回归测试。另外,也可以在执行时,选择想执行的部分测试场景,提高了回归测试灵活性。
调度执行管理模块负责所有测试计划或测试场景的执行调度,一旦用户触发测试场景或测试计划执行按纽后,待执行任务列表就会插入一条待执行任务记录,后台调度模块一直轮询该任务列表,获取该记录后,然后依次执行该记录对应场景的数据初始化或发送消息,然后启动待测应用,获取执行结束状态,收集测试结果并执行测试结果比对。其间,也提供了数据初始化与启动应用之间的等待时长,充分保证数据初始化完成。
报表管理主要是用来进行场景与测试计划执行与维护情况。
|实践效果
到目前为止,财务团队核心业务模块,VSP(供应商结算平台)、AR(应收)及VCP(供应商清账平台)已全部使用该工具进行功能测试与回归测试。尤其是VSP 账单计算的场景编写已基本上覆盖全面,账单计算测试的质量与效率已明显提升,VCP目前已能达到开发提测后,最多2个工作日内便可上线,正打算推进开发承担部分功能测试的方向推进。
|工具优势
该对比工具可以达到以下的优势:
1、线上版本功能一键回归
该工具可以将生产上的1至2个月的数据,导入到测试环境,然后启动运行我们的处理应用程序,生成对应的预期结果。下次版本优化重构后,只需一键触发即可验证本次优化重构后,线上版本功能是否正确。这种执行方式的好处是,线上数据覆盖所有业务场景,极大的节省测试效率。
2、未增加测试同学的学习成本
测试同学不需任何编码,同以往工作方式一样,根据需求文档,设计功能测试场景并编写相应场景的测试造数,让测试同学把主要精力聚焦于最重要的事情上面。
3、维护成本低
只有在相关功能场景涉及到的库表字段发生变更后,才需要进行维护。维护的成本只需把造数模板的文件下载后,修改变更字段的值,然后上传即可。结果模板不用修改,只需重新执行场景,且只需检查运行结果是否正确,如果正确,只需一键操作将本次运行的结果保存为基线结果即可。
4、测试前置
开发在编写代码时,测试同学同步编写场景模板数据,不用关注内部的实现逻辑,只需关注处理的逻辑结果,做到真正测试前置。
5、测试效率提升
使用对比测试平台工具编写用例的同时,相当于同步编写好了回归用例,二项工作合二为一;另外,开发修改缺陷后,只需一健操作,便可自动执行回归测试,只需在平台上查看结果。
6、开发参与执行功能测试
测试同学一直期望开发同学做好自测后才提交给测试,但对很多团队来说,这似乎是个梦想。很多时候不是开发不愿意做自测,主要是因为开发自测环境维护成本过高,开发同学不愿意维护;另外还有一个原因是面对复杂业务的场景,测试造数非常困难。结合财务团队的应用特点,借助于这个对比测试平台,开发进行功能测试成为了可能。
测试在开发提测前,已在平台上准备好了相关测试计划(包括本次提交的各个功能场景),开发在paas流水线上触发打包与部署上,然后在对比平台的场景上,直接点击场景执行,开发便可以触发功能测试执行,并从对比平台上直接查看测试结果,如果出现未通过的场景,可以在平台上直接查看结果数据与查看应用运行日志。开发自己定位错误,然后修改代码,走流水线部署。
|版本增强
下一步功能增强规划,支持更多的数据库类型,当前只支持 mysql数据库,接下来需要支持hive数据库及oracle数据库。另外,可以考虑支持对接口自动化测试,以及库表字段变更后的提醒,与一键更新我们的造数模板,进一步降低维护成本。最后可以考虑支持不同版本相同输入数据,各版本输出结果数据的对比等。
以上是关于对比测试工具平台让财务测试飞起来的主要内容,如果未能解决你的问题,请参考以下文章