一种SQL测试集重构方法、装置、设备及存储介质与流程

文档序号:29614768发布日期:2022-04-13 11:05阅读:53来源:国知局
一种sql测试集重构方法、装置、设备及存储介质
技术领域
:1.本技术涉及数据处理
技术领域
:,尤其涉及一种sql测试集重构方法、装置、设备及存储介质。
背景技术
::2.目前,mysql在进行数据迁移时,主要包括全量迁移和增量迁移。测试迁移任务时,需要考虑mysql支持的各种数据库模式定义语言(datadefinitionlanguage,简称ddl),数据操纵语言(datamanipulationlanguage,简称dml),数据类型和字符集等。因此,需要全面考虑各种sql语句。3.现有技术中,主要测试方法有两种,第一种是从零开始构造各种sql语句,以覆盖各种sql场景;第二种是直接利用mysql自动化测试框架(mysqltestframework)下的sql测试集。4.但是,从零开始构造各种sql语句,需要编写大量sql语句,对编写sql语句的工作人员技术水平要求较高,需要工作人员精通各种sql语句,耗时耗力,且很可能发生覆盖不全面的情况。直接利用mysqltestframeworksql测试集,无法进行全量迁移测试,因为该测试集中基本都是createtablet1…droptablet1…createtablet1…droptablet1模式的sql语句,无法保留创建的表结构与数据;此外,该测试集用来进行增量迁移测试时,如果迁移过程中出错,相同的表名t1也不便于快速定位出错误来源。技术实现要素:5.本技术提供了一种sql测试集重构方法、装置、设备及存储介质,用以解决人工编写方式效率低下,而现有sql测试集多个测试对象无差别测试,导致关系数据丢失和无法定位错误语句的问题。6.第一方面,本技术实施例提供了一种sql测试集重构方法,包括:获取原始sql测试集;获取所述原始sql测试集中目标对象的唯一标识名称;采用所述唯一标识名称对所述原始sql测试集中的目标对象重命名,并将所述原始sql测试集中的删除语句无效化,获得重构sql测试集。7.可选地,所述获取所述原始sql测试集中目标对象的唯一标识名称,包括:获取所述原始sql测试集中的目标原始sql文件;获取所述目标原始sql文件的文件名、所述目标对象的类型和已重命名的同一类型对象的当前累计数的数值;根据所述文件名、所述类型以及所述当前累计数的数值,生成所述唯一标识名称。8.可选地,所述采用所述唯一标识名称对所述原始sql测试集中的目标对象重命名,包括:获取所述目标原始sql文件中的所述目标对象相关操作语句;将所述相关操作语句中所述目标对象的原始对象名称,更改为所述唯一标识名称。9.可选地,所述获取所述目标原始sql文件的文件名、所述目标对象的类型和已重命名的同一类型对象的当前累计数的数值,包括:获取所述目标原始sql文件的文件名;当所述目标原始sql文件中目标对象相关操作语句为所述目标对象的创建语句时,获取所述目标对象的所述类型,以及所述已重命名的同一类型对象的上一次累计数的数值;将所述上一次累计数的数值加一,获得所述已重命名的同一类型对象的当前累计数的数值。10.可选地,所述获取所述原始sql测试集中目标对象的唯一标识名称之后,所述方法还包括:将所述目标对象的原始对象名称和所述唯一标识名称之间的对应关系,保存至存储表中;所述将所述相关操作语句中所述目标对象的原始对象名称,更改为所述唯一标识名称,包括:获取所述目标对象的原始对象名称;从所述存储表中获取所述原始对象名称对应的所述唯一标识名称;将所述相关操作语句中所述目标对象的原始对象名称,替换为所述唯一标识名称。11.可选地,所述获取原始sql测试集,包括:获取sql服务器中保存的原生sql测试集;提取所述原生sql测试集中数据转换服务支持的部分sql文件,获得所述原始sql测试集。12.可选地,所述将所述原始sql测试集中的删除语句无效化,包括:将所述原始测试集中的删除语句更改为注释语句,以将所述删除语句无效化。13.第二方面,本技术实施例提供了一种sql测试集重构装置,包括:第一获取模块,用于获取原始sql测试集;第二获取模块,用于获取所述原始sql测试集中目标对象的唯一标识名称;处理模块,采用所述唯一标识名称对所述原始sql测试集中的目标对象重命名,并将所述原始sql测试集中的删除语句无效化,获得重构sql测试集。14.第三方面,本技术实施例提供了一种电子设备,包括:处理器、通信接口、存储器和通信总线,其中,处理器、通信接口和存储器通过通信总线完成相互间的通信;所述存储器,用于存储计算机程序;所述处理器,用于执行所述存储器中所存储的程序,实现所述的sql测试集重构方法。15.第四方面,本技术实施例提供了一种计算机可读存储介质,存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现所述的sql测试集重构方法。16.本技术实施例提供的上述技术方案与现有技术相比具有如下优点:本技术实施例提供的该方法,通过对现有的sql测试集进行重构,避免了从零开始创建sql测试集,需要高水平技术人员,节省大量的sql开发时间,且有更高的sql测试覆盖度。同时对不同的对象进行了重命名,使得不同的对象具有唯一标识名称,并将删除语句无效化,使对象的关系结构和对象处理结果数据能够保留,实现数据全量迁移,如果在迁移过程中出现错误,能够快速定位出错误来源。该方法提升了测试集的使用效果,获得更准确全面的测试结果,便于针对测试结果进行后续的操作和处理。附图说明17.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。18.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。19.图1为本技术实施例提供的sql测试集重构方法流程图;20.图2为本技术实施例提供的唯一标识名称获取流程示意图;21.图3为本技术实施例提供的目标对象类型和累计数数值获取流程示意图;22.图4为本技术实施例提供的sql测试集中表的重构流程示意图;23.图5为本技术实施例提供的sql测试集重构装置结构示意图;24.图6为本技术实施例提供的电子设备的结构示意图。具体实施方式25.为使本技术实施例的目的、技术方案和优点更加清楚,下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本技术的一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本技术保护的范围。26.本技术实施例提供了一种sql测试集重构方法。sql数据库从源端迁移到目的端后,需要对迁移的数据进行测试,通过测试验证源端和传输到目的端的数据库相同,以保证数据库的正确和完整。本技术提供的方法,用于重构测试sql数据库的sql测试集。该测试集位于源端或者目的端的服务器,也可以位于其他服务器,只需要该服务器能够从源端和目的端两方获取相关的数据。27.如图1所示,sql测试集重构的过程主要包括以下步骤:28.步骤101,获取原始sql测试集。29.一个实施例中,获取原始sql测试集的过程包括:获取sql服务器中保存的原生sql测试集;提取原生sql测试集中数据转换服务(datatransformationservice,简称dts)支持的部分sql文件,获得原始sql测试集。30.需要说明的是,这里仅以从sql服务器中获取原生测试集为例进行说明,应用中也可以从其他位置获取原生测试集,本技术的保护范围并不以原生测试集的具体获取方式为限制。31.一个实施例中,读取mysqltestframework下的原生sql测试集,即源码根目录下的mysql-test/t/*.test文件集;提取该原生sql测试集中dts支持的部分sql文件。将所有dts支持的文件集合,获得原始sql测试集。dts支持的部分sql文件包括包含各种数据类型、字符集、ddl语句、dml语句和各种对象相关操作语句的sql文件,这些文件可通过文件的文件名进行识别。32.通过获取现有的原生测试集,避免了工作人员从零开始构造各种sql语句,在已有基础上对需要修改的语句进行修改,对工作人员的技术水平要求降低,节省大量sql开发时间,使sql测试集构建的过程省时省力,同时避免遗漏各种类型的sql语句,提高了sql测试覆盖度。33.步骤102,获取原始sql测试集中目标对象的唯一标识名称。34.一个实施例中,如图2所示,获取原始sql测试集中目标对象的唯一标识名称的过程包括:35.步骤201,获取原始sql测试集中的目标原始sql文件;36.步骤202,获取目标原始sql文件的文件名、目标对象的类型和已重命名的同一类型对象的当前累计数的数值;37.步骤203,根据文件名、类型以及当前累计数的数值,生成唯一标识名称。38.其中,唯一标识名称包含目标对象所在文件的文件名、目标对象的类型和累计数的数值,将目标对象的名称替换为唯一标识名称后,从唯一标识名称中即可获取该目标对象所在文件的文件名、类型等相关信息。同时,重命名后对象名称的唯一性,能够使不同的对象区分开,避免了不同对象的无差别处理。当测试结果中目标对象出现错误时,还可以通过唯一标识名称,确定目标对象在目标端执行时的sql语句,快速匹配其对应的源端sql语句,并定位该源端sql语句在目标原始sql文件中的位置,找出错误的来源。39.本技术的实施例中出现的文件名均以不带扩展名的文件名为示例进行描述,但本技术提出的sql测试集重构方法需要的文件名也可以使用带有扩展名的文件名。本技术的保护范围并不以文件名的组成为限制。40.需要说明的是,唯一标识名称中已重命名的同一类型对象的当前累计数的数值,与文件名和目标对象的类型组合实现了唯一标识名称的唯一性,其他能够实现唯一性作用的标识也可以用于生成唯一标识名称,例如,通过算法得出的随机数、目标原始sql文件的哈希值等。本技术的保护范围并不以唯一性标识名称的生成方式为限制。41.一个实施例中,原始sql测试集中的对象包括表、索引、视图、函数、触发器、过程和事件。目标对象可以是原始sql测试集中的任意一种对象。42.一个实施例中,如图3所示,目标原始sql文件的文件名、目标对象的类型和已重命名的同一类型对象的当前累计数的数值的获取过程包括:43.步骤301,获取目标原始sql文件的文件名;44.步骤302,当目标原始sql文件中目标对象相关操作语句为目标对象的创建语句时,获取目标对象的类型,以及已重命名的同一类型对象的上一次累计数的数值;45.步骤303,将上一次累计数的数值加一,获得已重命名的同一类型对象的当前累计数的数值。46.一个实施例中,创建语句可以为create语句,也可以是其他实现创建新的个体对象功能的语句。47.同一个目标对象只可能存在一个创建语句。在创建语句获取目标对象的类型和累计数数值,可以避免同一个目标对象有对应多个名称的问题,同时便于从创建语句开始,替换所有目标对象相关操作语句中的原始对象名称,避免遗漏相关操作语句的现象。48.一个实施例中,获取对已重命名的统一类型对象的当前累计数时,设置用于统计该类型目标对象的计数器,该计数器仅用于统计与目标对象相同类型的对象的数量,不同类型的对象,可以设置不同的计数器,例如,表类型的对象采用计数器1,视图类型的对象采用计数器2等。该计数器在sql测试集重构过程中,当相关操作语句为创建语句时,自动完成加一操作,准确地提供已重命名的同一类型对象的累计数数值,用以区分同类型对象,从而能够达到避免同类型的不同对象命名相同的问题。同时可以获取目前所有同类型对象的数量,当有某些统计需要时,可以直接获取使用。49.步骤103,采用唯一标识名称对原始sql测试集中的目标对象重命名,并将原始sql测试集中的删除语句无效化,获得重构sql测试集。50.一个实施例中,采用唯一标识名称对原始sql测试集中的目标对象重命名的过程包括:获取目标原始sql文件中的目标对象相关操作语句;将相关操作语句中目标对象的原始对象名称,更改为唯一标识名称。51.一个实施例中,目标对象的相关操作语句包括目标对象的创建语句、删除语句和其他对目标对象进行操作的语句,其中,创建语句用于创建新的个体对象,删除语句用于删除该语句中的个体对象。52.一个实施例中,获取原始sql测试集中目标对象的唯一标识名称之后,将目标对象的原始对象名称和唯一标识名称之间的对应关系,保存至存储表中。将相关操作语句中目标对象的原始对象名称,更改为唯一标识名称,包括:53.获取目标对象的原始对象名称;从存储表中获取原始对象名称对应的唯一标识名称;将相关操作语句中目标对象的原始对象名称,替换为唯一标识名称。54.本实施例中,存储表中可以保存多个对应关系,即可以同时保存多个对象的原始对象名称和该对象对应的唯一标识名称之间的对应关系。55.将目标对象的原始对象名称和唯一标识名称之间的对应关系,保存至存储表中后,不需要每次遇到目标对象时,都重新生成目标对象的唯一标识名称,只需要从存储表中读取即可,简化了重命名的过程,也避免了出现同一个对象有不同名称的问题。56.一个实施例中,存储表为哈希映射表(hashmap),将目标对象的原始对象名称和唯一标识名称之间的对应关系,保存至hashmap中时,将原始对象名称作为键值(key)。hashmap可以在相关操作语句中存在原始对象名称即key时,通过key和对应关系,快速读取hashmap中与原始对象名称对应的唯一标识名称。57.需要说明的是,这里仅以hashmap为例进行说明,应用中也可以使用其他类型的存储表存储对应关系,本技术的保护范围并不以存储表的具体类型为限制。58.一个实施例中,当相关操作语句为目标对象的删除语句时,将删除语句中的原始对象名称替换为唯一标识名称之后,将存储表中该目标对象的原始对象名称和唯一标识名称的对应关系移除。该删除语句可以为drop语句,也可以是其他可以删除个体对象的语句。当相关操作语句为目标对象的删除语句时,移除储存表中目标对象对应的对应关系,可以节省存储表的存储空间。59.一个实施例中,将原始sql测试集中的删除语句无效化,包括:将原始测试集中的删除语句更改为注释语句,以将删除语句无效化。通过将原始测试集中的删除语句更改为注释语句,使删除语句的删除作用无效,同时能够表征目标对象的处理过程在何时结束的。删除语句无效后,能够保留目标对象所有的处理结果数据和结构数据,实现全量迁移测试。同时便于测试结果中需要查找相关数据时,能快速得出查找结果。60.一个实施例中,将原始sql测试集中每一个原始sql文件作为目标原始sql文件,对目标对象为表的相关操作语句进行重构。其中,原始sql测试集中某个原始sql文件的文件名为sqlfilename。61.目标对象为表(table),其类型用tb表示;目标原始sql文件的文件名用tnprefix表示;存储表用tnmap表示,该存储表使用hashmap实现存储功能;计数器用tncount表示。62.本实施例中,读取mysqltestframework下的原生sql测试集,提取该原生sql测试集中dts支持的部分sql文件,即包含各种数据类型、字符集、ddl语句、dml语句和各种对象相关操作语句的sql文件,将所有dts支持的文件集合,获得原始sql测试集。63.本实施例中,表的创建语句为createtable语句,表的删除语句为droptable语句。64.本实施例中,如图4所示,当文件名为sqlfilename的文件作为目标原始sql文件时,目标对象为表的sql测试集重构过程包括:65.步骤401,获取原始sql测试集中文件名为sqlfilename的文件,作为目标原始sql文件;66.步骤402,初始化tnprefix=sqlfilename,tnmap=newhashmap(),初始化tncount=0;67.步骤403,读取目标原始sql文件的首行语句作为目标语句;68.步骤404,判断目标语句是否为空,若是,执行步骤405,若否,执行步骤406;69.步骤405,结束目标对象为表的sql测试集重构过程;70.步骤406,判断目标语句是否为createtable语句,若是,执行步骤4071,若否,执行步骤408;71.步骤4071,tncount加1,获取唯一标识名称为${tnprefix}_tb${tncount},将目标表的原始名称和唯一标识名称的对应关系存储在tnmap中,并将目标表的原始名称作为key;72.步骤4072,提取tnmap中的唯一标识名称,将createtable语句中目标表的原始名称替换为唯一标识名称,执行步骤412;73.步骤408,判断目标语句是否为droptable语句,若是,执行步骤4091,若否,执行步骤410;74.步骤4091,提取tnmap中的唯一标识名称,将droptable语句中目标表的原始名称替换为唯一标识名称;75.步骤4092,将目标语句加上注释,更改为注释语句,移除tnmap中key为目标表原始名称的对应关系存储记录,执行步骤412;76.步骤410,判断目标语句是否为表相关操作语句,若是,执行步骤411,若否,执行步骤412;77.步骤411,提取tnmap中的唯一标识名称,将目标语句中目标表的原始名称替换为唯一标识名称,执行步骤412;78.步骤412,读取目标语句的下一行语句,将下一行语句作为新的目标语句,执行步骤404。79.本实施例中,原始sql测试集中每一个原始sql文件作为目标原始sql文件时,目标对象为表的sql测试集重构的过程,与文件名为sqlfilename的原始sql文件的重构过程相同。80.需要说明的是,本实施例中,仅以目标对象为表为例说明sql测试集重构的过程,本技术中其他类型的对象作为目标对象的重构过程与表作为目标对象的重构过程相同。本实施例中的表替换为其他类型的对象时,能够达到相同的效果。本实施例的sql测试集重构过程涉及的每种类型的对象,均按照步骤401至412的过程执行即可。81.本技术提供的sql测试集重构方法,通过对现有的sql测试集进行重构,避免了从零开始创建sql测试集,在已有基础上对需要修改的语句进行修改,对工作人员的技术水平要求降低,节省大量sql开发时间,使sql测试集构建的过程省时省力,同时避免遗漏各种类型的sql语句,提高了sql测试覆盖度。通过对不同的对象重命名为唯一标识名称,使每一个对象区分开,避免了不同对象的无差别处理。将删除语句无效化后,当测试结果中目标对象出现错误时,还可以通过唯一标识名称,通过目标对象在目标端执行时的sql语句,快速匹配其对应的源端sql语句,并定位该源端sql语句在目标原始sql文件中的位置,找出错误的来源。82.本技术提供的sql测试集重构方法在创建语句时获取唯一标识名称,而同一个目标对象只可能存在一个创建语句,避免了出现相关操作语句中重复命名或者遗漏命名的问题。将原始对象名称和唯一标识名称之间的对应关系保存在存储表中,不需要每次遇到目标对象时,都重新生成目标对象的唯一标识名称,简化了重命名的过程;而当相关操作语句为目标对象的删除语句时,移除储存表中目标对象对应的对应关系,可以节省存储表的存储空间。当使用hashmap作为存储表时,可以更加快速地获取唯一标识名称,使sql测试集重构更加快捷。该方法提升了测试集的使用效果,获得更准确全面的测试结果,便于针对测试结果进行后续的操作和处理。83.基于同一构思,本技术实施例中提供了一种sql测试集重构装置,该装置的具体实施可参见方法实施例部分的描述,重复之处不再赘述,如图5所示,该装置主要包括:84.第一获取模块501,用于获取原始sql测试集;85.第二获取模块502,用于获取原始sql测试集中目标对象的唯一标识名称;86.处理模块503,采用唯一标识名称对原始sql测试集中的目标对象重命名,并将原始sql测试集中的删除语句无效化,获得重构sql测试集。87.基于同一构思,本技术实施例中还提供了一种电子设备,如图6所示,该电子设备主要包括:处理器601、通信接口602、存储器603和通信总线604,其中,处理器601、通信接口602和存储器603通过通信总线604完成相互间的通信。其中,存储器603中存储有可被至处理器601执行的程序,处理器601执行存储器603中存储的程序,实现如下步骤:获取原始sql测试集;获取原始sql测试集中目标对象的唯一标识名称;采用唯一标识名称对原始sql测试集中的目标对象重命名,并将原始sql测试集中的删除语句无效化,获得重构sql测试集。88.上述电子设备中提到的通信总线604可以是外设部件互连标准(peripheralcomponentinterconnect,简称pci)总线或扩展工业标准结构(extendedindustrystandardarchitecture,简称eisa)总线等。该通信总线604可以分为地址总线、数据总线、控制总线等。为便于表示,图6中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。89.通信接口602用于上述电子设备与其他设备之间的通信。90.存储器603可以包括随机存取存储器(randomaccessmemory,简称ram),也可以包括非易失性存储器(non-volatilememory),例如至少一个磁盘存储器。可选地,存储器还可以是至少一个位于远离前述处理器601的存储装置。91.上述的处理器601可以是通用处理器,包括中央处理器(centralprocessingunit,简称cpu)、网络处理器(networkprocessor,简称np)等,还可以是数字信号处理器(digitalsignalprocessing,简称dsp)、专用集成电路(applicationspecificintegratedcircuit,简称asic)、现场可编程门阵列(field-programmablegatearray,简称fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。92.在本技术的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有计算机程序,当该计算机程序在计算机上运行时,使得计算机执行上述实施例中所描述的sql测试集重构方法。93.在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。该计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行该计算机指令时,全部或部分地产生按照本技术实施例所述的流程或功能。该计算机可以时通用计算机、专用计算机、计算机网络或者其他可编程装置。该计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,计算机指令从一个网站站点、计算机、服务器或者数据中心通过有线(例如同轴电缆、光纤、数字用户线(dsl))或无线(例如红外、微波等)方式向另外一个网站站点、计算机、服务器或数据中心进行传输。该计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。该可用介质可以是磁性介质(例如软盘、硬盘、磁带等)、光介质(例如dvd)或者半导体介质(例如固态硬盘)等。94.需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。95.以上所述仅是本发明的具体实施方式,使本领域技术人员能够理解或实现本发明。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所申请的原理和新颖特点相一致的最宽的范围。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1