一种测试数据的构建方法及装置与流程

文档序号:16067779发布日期:2018-11-24 12:50阅读:168来源:国知局

本发明涉及数据测试技术领域,特别是涉及一种测试数据的构建方法及装置。

背景技术

现有技术中,对于软件、系统的测试,都是基于测试用例完成的,其中,测试用例(testcase)是指对一项特定的软件产品进行测试任务的描述,体现测试方案、方法、技术和策略,内容包括测试目标、测试环境、输入数据、测试步骤、预期结果、测试脚本等,并形成文档。执行测试用例的目的在于,核实某个程序(比如软件的单元,或者由单元组成的集成系统)是否满足特定需求。

以分布式存储系统为例,分布式存储系统将数据分散存储在多台独立的设备上,采用可扩展的系统结构,利用多台数据服务器(dataserver)分担存储负荷,利用位置服务器(nameserver)定位存储信息。在分布式存储系统中,执行与数据恢复有关的测试用例时,需要用测试数据对系统的数据恢复功能进行测试,测试数据就是为了进行测试而构建的相关数据。

利用测试数据对分布式存储系统的数据恢复功能进行测试,如关闭数据服务器、移除数据服务器、移除磁盘、移除副本等删除数据的操作会触发系统数据恢复。例如,移除一数据服务器的删除操作会将该数据服务器中的所有测试数据都移除,而位置服务器在监控到该数据服务器中的所有测试数据都移除后,触发系统的数据恢复机制(假设该系统为三副本存储方式,移除一数据服务器后该数据服务器所存储的副本丢失,即三副本少了一个副本),根据均衡策略找到合适的数据服务器,从丢失的副本所对应的其它两个副本所在的数据服务器中将测试数据复制到新的数据服务器中。

由以上可见,对系统进行测试之前需要构建测试数据,现有技术中,可以采用自动化方式构建测试数据,也可以采用人工方式构建测试数据。其中,自动化构建测试数据,可以有效提高测试效率。与人工构建测试数据相比,自动化数据构建有如下特点:与自动化测试结合后,可以不间断的进行测试,通过长时间多轮测试,往往能发现难以发现的故障。近年来,自动化构建测试数据的技术得到快速的发展,大量的自动化测试数据构建方法及工具被研发出来,从而可以不间断自动地检测软件中的故障,并且在对一些大型商业软件和开源软件的测试中发现了大量在手动测试中没有发现的软件故障和安全隐患。

在分布式存储系统的自动化测试中,构建测试数据有两种方式:一种是随机生成的方式,通过调用系统写入、修改、删除接口,在系统中写入随机大小的测试数据,删除随机比例的测试数据;另一种是基于线上实际情况,按照线上的数据大小、删除比例,通过调用系统写入、修改、删除接口,在系统中写入对应大小的测试数据,以及删除比例的测试数据,使测试数据尽量反映线上情况。

这两种方式都是使用分布式存储系统提供的写入、修改、删除接口来实现测试数据的构建。在分布式存储系统中,每一个数据服务器包含多个磁盘(如36个),每一个磁盘中按照目录的方式存储多个数据块(block),一个数据块表示一个副本(replica)。在使用自动化测试数据构建方法及工具生成数据后,将生成的数据反馈给分布式存储系统,以使分布式存储系统按照自身的数据存储逻辑将数据写入到各个数据服务器的数据块中。以使用分布式存储系统提供的写入接口实现测试数据的构建为例,调用每个数据服务器的写入接口在数据块中写入数据时,需要将一个数据块写满后才能触发系统逻辑生成下一个数据块,然后在所生成的下一个数据块中写入数据,一个数据块的数据容量一般为8gb。实际上,测试时为了保证测试的准确性,通常需要在每个磁盘中生成多个数据块。这样,在构建测试数据时,每个磁盘中需要写入超过100gb的数据,对于较大的分布式存储系统,则需要写入更多的数据。

可见,现有技术在分布式存储系统中构建测试数据的方式,由于利用分布式存储系统自身的数据存储逻辑来构建测试数据,不可避免的导致构建的测试数据的数据量较大,使得构建测试数据的时间较长。



技术实现要素:

本发明实施例的目的在于提供一种测试数据的构建方法及装置,以减少构建测试数据的时间。具体技术方案如下:

第一方面,为达到上述目的,本发明实施例公开了一种测试数据的构建方法,所述方法包括:

获得目标测试数据的第一构建参数,其中,所述目标测试数据为:存储于第一待测试设备且用于对所述第一待测试设备所属待测试系统进行测试的测试数据,所述第一构建参数是基于所述待测试系统的数据结构确定的,所述第一构建参数包括:要在所述第一待测试设备中生成的数据文件的第一数量、各个数据文件中要写入的数据的第一数据量;

在所述第一待测试设备中生成预设文件格式的第一数量个第一数据文件,其中,所述预设文件格式是由所述待测试系统的数据结构确定的;

针对每一第一数据文件,生成该第一数据文件对应的所述第一数据量的数据,并将生成的数据写入该第一数据文件,得到用于对所述待测试系统进行测试的第一测试数据。

可选的,所述待测试系统为:分布式存储系统;

所述第一待测试设备为:所述分布式存储系统中的数据服务器;

所述第一数据文件为:以数据块形式存储数据的文件。

可选的,所述各个数据文件中要写入的数据的第一数据量包括:各个数据文件所包含数据块中未删除的对象的数量、已删除的对象的数量、每个对象的数据量;

所述针对每一第一数据文件,生成该第一数据文件对应的所述第一数据量的数据的步骤,包括:

针对每一第一数据文件,根据该第一数据文件所包含数据块中未删除的对象的数量、已删除的对象的数量、每个对象的数据量,生成该第一数据文件对应的数据。

可选的,所述方法还包括:

对所述第一数据文件进行纠删码编码,生成第二数据文件,得到用于对所述待测试系统进行测试的第二测试数据。

可选的,所述对所述第一数据文件进行纠删码编码,生成第二数据文件的步骤,包括:

判断所述第一数据文件中的预设参数的值是否为预设值;

如果是,对所述第一数据文件进行纠删码编码,生成第二数据文件。

可选的,所述方法还包括:

接收并存储所述待测试系统中的第二待测试设备反馈的第三数据文件,得到用于对所述待测试系统进行测试的第三测试数据,其中,所述第三数据文件为:所述第二待测试设备中根据第二构建参数中的第二数量生成的数据文件、并且写入有第二数据量的数据,所述第二构建参数是:基于所述待测试系统的数据结构确定的,所述第二构建参数包括:要在所述第二待测试设备中生成的数据文件的第二数量、各个数据文件中要写入的数据的第二数据量,第三数据文件为预设文件格式的数据文件。

可选的,所述方法还包括:

接收并存储所述第二待测试设备反馈的第四数据文件,得到用于对所述待测试系统进行测试的第四测试数据,其中,所述第四数据文件为所述第二待测试设备对所述第三数据文件进行纠删码编码后生成的数据文件。

可选的,所述方法还包括:

在构建测试数据完成后,输出构建完成测试数据的提示消息。

第二方面,为达到上述目的,本发明实施例还公开了一种测试数据的构建装置,所述装置包括:

获得模块,用于获得目标测试数据的第一构建参数,其中,所述目标测试数据为:存储于第一待测试设备且用于对所述第一待测试设备所属待测试系统进行测试的测试数据,所述第一构建参数是基于所述待测试系统的数据结构确定的,所述第一构建参数包括:要在所述第一待测试设备中生成的数据文件的第一数量、各个数据文件中要写入的数据的第一数据量;

生成模块,用于在所述第一待测试设备中生成预设文件格式的第一数量个第一数据文件,其中,所述预设文件格式是由所述待测试系统的数据结构确定的;

写入模块,用于针对每一第一数据文件,生成该第一数据文件对应的所述第一数据量的数据,并将生成的数据写入该第一数据文件,得到用于对所述待测试系统进行测试的第一测试数据。

可选的,所述待测试系统为:分布式存储系统;

所述第一待测试设备为:所述分布式存储系统中的数据服务器;

所述第一数据文件为:以数据块形式存储数据的文件。

可选的,所述各个数据文件中要写入的数据的第一数据量包括:各个数据文件所包含数据块中未删除的对象的数量、已删除的对象的数量、每个对象的数据量;

所述生成模块,具体用于:

针对每一第一数据文件,根据该第一数据文件所包含数据块中未删除的对象的数量、已删除的对象的数量、每个对象的数据量,生成该第一数据文件对应的数据。

可选的,所述装置还包括:

编码模块,用于对所述第一数据文件进行纠删码编码,生成第二数据文件,得到用于对所述待测试系统进行测试的第二测试数据。

可选的,所述编码模块,包括:

判断子模块,用于判断所述第一数据文件中的预设参数的值是否为预设值;如果是,触发编码子模块;

所述编码子模块,用于对所述第一数据文件进行纠删码编码,生成第二数据文件,得到用于对所述待测试系统进行测试的第二测试数据。

可选的,所述装置还包括:

第一接收模块,用于接收并存储所述待测试系统中的第二待测试设备反馈的第三数据文件,得到用于对所述待测试系统进行测试的第三测试数据,其中,所述第三数据文件为:所述第二待测试设备中根据第二构建参数中的第二数量生成的数据文件、并且写入有第二数据量的数据,所述第二构建参数是:基于所述待测试系统的数据结构确定的,所述第二构建参数包括:要在所述第二待测试设备中生成的数据文件的第二数量、各个数据文件中要写入的数据的第二数据量,第三数据文件为预设文件格式的数据文件。

可选的,所述装置还包括:

第二接收模块,用于接收并存储所述第二待测试设备反馈的第四数据文件,得到用于对所述待测试系统进行测试的第四测试数据,其中,所述第四数据文件为所述第二待测试设备对所述第三数据文件进行纠删码编码后生成的数据文件。

可选的,所述装置还包括:

输出模块,用于在构建测试数据完成后,输出构建完成测试数据的提示消息。

本发明实施例提供的一种测试数据构建方法及装置,首先,获得目标测试数据的第一构建参数,其中,目标测试数据为:存储于第一待测试设备且用于对该第一待测试设备所属待测试系统进行测试的测试数据,第一构建参数是基于所述待测试系统的数据结构确定的,第一构建参数包括:要在第一待测试设备中生成的数据文件的第一数量、各个数据文件中要写入的数据的第一数据量;然后,在第一待测试设备中生成预设文件格式的第一数量个第一数据文件,其中,预设文件格式是由待测试系统的数据结构确定的;最后,针对每一第一数据文件,生成该第一数据文件对应的第一数据量的数据,并将生成的数据写入该第一数据文件,得到用于对待测试系统进行测试的第一测试数据。

可见,本发明实施例提供的方案,通过构建参数来控制待测试设备中所要构建的测试数据的数据量,基于待测试系统的数据结构和文件格式在待测试设备中生成数据文件,针对每一数据文件,生成对应数据量的数据,并将生成的数据直接写入到该数据文件中,不需要触发待测试系统的逻辑生成大量的测试数据,从而可以减少测试数据的数据量,减少构建测试数据所需要的时间。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的对象存储系统的数据结构示意图;

图2为本发明实施例提供的对象存储系统中数据服务器的数据结构示意图;

图3为本发明实施例提供的对象存储系统中数据块的目录结构示意图;

图4为本发明实施例提供的数据块中dat文件存放数据的示意图;

图5为本发明实施例提供的一种测试数据构建方法的流程示意图;

图6为本发明实施例提供的一个具体实施例的框架图;

图7为本发明实施例提供的一种测试数据构建装置的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

为了有效减少构建的测试数据的数据量,缩短构建测试数据的时间,本发明实施例提供了一种测试数据的构建方法及装置。需要强调的是,本发明实施例所提供的方案可以用于构建分布式存储系统所需要的测试数据,还可以用于构建传统单机存储系统的测试数据,以及其他原理类似的系统中,在此不做限定。

本发明实施例是一种针对系统底层文件的文件格式,按照测试需要构建测试数据的方案。例如在分布式存储系统中,在系统底层文件格式的基础上,根据测试需要构造对应量的数据,通过分布式并行写入的方式,写入到整个分布式测试集群的每个服务器的底层文件中。构建测试数据过程以需求场景和功能为基础,不涉及到任何分布式系统的底层代码的改动,目的是提高测试效率。

为了便于对发明实施例所提供的一种测试数据的构建方法的理解,首先介绍本发明实施例提供的方案所基于的原理性内容。下面以分布式存储系统中的对象存储系统为例,对分布式存储系统的整个数据存储结构以及文件格式进行分析,具体如下:

如图1所示,对象存储系统的数据结构可以用树形表示,包括位置服务器(nameserver)和数据服务器(dataserver),其中多台dataserver用于存储数据、分担存储负荷,dataserver中所存储数据的存储信息由nameserver统一管理。

如图2所示,dataserver管理其所在机器的所有磁盘(disk),每台dataserver中通常包含36块disk,每个disk下面按照目录的方式存放着多个block,即数据块。

接下来对block的具体结构进行分析。首先,以一个block在磁盘中的存放路径/data/vols/vol1/phenix_data/00000000000000709106501为例,其中最后一串数字00000000000000709106501的格式为%d%020d%02d。其中,第一位数字为0或1,表示block的类型,0表示该block为三副本中的一个副本,1表示该block为ec副本中一个副本(ec副本为通过纠删码(erasure-code)方式编码的数据)。中间二十位数字表示blockid,即该block在该对象存储系统中的唯一标识。最后两位数字表示副本(replicate)id,即block的某一副本在该block的所有副本中的唯一标识,当该副本为三副本中的一个副本时最后两位数字的取值为0-2,即00、01、02,而在其他大于3个副本的情况下最后两位数字的取值则可能会大于2。例如,通过erasure-code编码后得到12副本(其中包括8个数据块、4个校验块),这种情况下,当某一副本为ec副本中的一个副本时最后两位数字的取值为0-11,即00、01、02……09、10、11,erasure-code编码后得到副本称为ec副本。

然后,对block目录下的文件进行分析,block目录结构如图3所示。一个block目录下有3个文件/目录,其中,0跟1为目录,current为文件。current文件里存放0或1,表示当前数据所存放的目录,即current内容为0时,表示目录0为当前数据所存放的目录。存在0和1多个目录的目的在于:当对block中的数据进行erasure-code编码压缩时,可以将压缩后的数据存放在另一个目录中,并在压缩完成后修改current文件使其指向到另一个目录,从而不影响当前数据目录的操作。

0或1目录下均有3个文件:idx、dat以及manifest,其中,

1、manifest文件以文本格式记录有三个值,sequenceid、fulltime以及ecid,其中,sequenceid用于表示三副本同步时的同步进度,fulltime用于标识dat文件是否写满、以及dat文件写满的时刻,ecid用于表示是否已经对三副本做纠删码编码、以及生成的ec副本的唯一标识。

2、idx文件作为索引,以二进制格式记录存放于该block的对象(object)在dat文件中的位置;其格式如下:

3、dat文件以二进制格式存放object的数据,其格式为object的header加上object的数据data,如图4所示,一个dat文件中可以存放多个object对应的数据,其中每个object的header的格式如下:

本领域技术人员可以理解的是,对象object是分布式存储系统中数据存储的基本单位,每个object是数据和数据属性集的综合体,数据属性可以根据应用的需求进行设置,包括数据分布、服务质量等。object维护自己的属性,从而简化了存储系统的管理任务,增加了灵活性。object的大小可以不同,可以包含整个数据结构,如文件、数据库表项等。

为解决现有技术问题,本发明实施例提供了一种测试数据的构建方法及装置。下面首先对本发明实施例所提供的一种测试数据的构建方法进行详细说明。

需要说明的是,本实施例提供的方案的执行主体可以为第一待测试设备本身,也可以是预先设置的待测试系统中的其它设备,本实施例对此不做限定。

图5为本发明实施例提供的一种测试数据的构建方法的流程示意图,该方法包括:

s501,获得目标测试数据的第一构建参数,其中,目标测试数据为:存储于该第一待测试设备且用于对该第一待测试设备所属待测试系统进行测试的测试数据,第一构建参数是基于待测试系统的数据结构确定的,第一构建参数包括:要在第一待测试设备中生成的数据文件的第一数量、各个数据文件中要写入的数据的第一数据量。

s502,在该第一待测试设备中生成预设文件格式的第一数量个第一数据文件,其中,预设文件格式是由待测试系统的数据结构确定的。

s503,针对每一第一数据文件,生成该第一数据文件对应的第一数据量的数据,并将生成的数据写入该第一数据文件,得到用于对待测试系统进行测试的第一测试数据。

在实际应用中,将生成的数据写入数据文件的方式,可以直接通过待测试设备的操作系统进行写入,也可以通过待测试系统所提供的直接写入底层数据文件的方式进行写入,本实施例对此不做限定。

实际应用中,上述待测试系统可以为单机存储系统,那么构建单机存储系统的测试数据,也就是在该单机存储系统的存储设备上构建测试数据。在单机存储系统中,本实施例所提供的方案的执行主体可以为该存储设备本身,也可以为另一设备,该另一设备根据构建参数在该存储设备中构建测试数据,本实施例对此不做限定。

本领域技术人员可以理解的是,单机存储系统是单机存储引擎的一种封装,对外提供文件、键值、表格或者关系模型,其中单机存储引擎就是哈希表、b树(b-tree)、lsm树(log-structuredmergetree,日志结构合并树)等数据结构在机械磁盘、固态硬盘(solidstatedrives,ssd)等持久化介质上的实现。

比如有一个单机存储系统,其以分层的方式存储数据,每一层为一个独立的文件。假设该单机存储系统的数据存储结构为七层,则要在该单机存储系统的存储设备中生成7个数据文件,并且可以设置这7个数据文件中要写入的数据的第一数据量。假设每个数据文件中最多可写入的数据量为1gb,由于利用测试数据对系统进行测试时,数据文件中是否写满并不会对测试产生影响,而按照现有技术的方案进行测试数据构建时,必须写满每一层的数据文件,从而导致构建测试数据的时间较长,因此为了缩短构建测试数据的时间,可以设置每一个数据文件中要写入数据的第一数据量为较低值。

第一构建参数可以为测试人员预先设置的,并且该存储设备可以通过命令行或接口的方式获得第一构建参数。在获得目标测试数据的第一构建参数后,在该存储设备中生成7个预设格式的第一数据文件,可以理解的,该单机存储系统的每一层数据存储结构都有其特定的文件格式,因此需要在每一层生成符合该层文件格式的数据文件。

然后,根据第一构建参数中每一数据文件中要写入的数据的第一数据量,针对每一第一数据文件,生成该第一数据文件对应的第一数据量的数据,并将生成的数据写入该第一数据文件,得到用于对该单机存储系统进行测试的测试数据。

具体的,可以采用现有技术中的自动化测试数据构建工具来生成特定数据量的数据,自动化测试数据构建工具如应用程序generatedata,其可以提供随机数据表格生成服务,用于软件或者数据库测试等等,可生成的数据包括二十多种类型,包括人名、email、日期、地址、数字、自增整数、货币等,甚至包括随机正态分布数据。

可以理解的,如果按照现有技术的方法在该单机存储系统中构建测试数据,从第一层到第七层的顺序依次在7个数据文件中写入数据,那么可能需要写入10gb的数据。但是,使用本实施例所提供的方案,直接在存储设备中构造1-7层的数据文件,并分别在每个数据文件中写入预设数据量的数据,则不需要将每个数据文件都写满,从而缩短了构建测试数据的时间,进一步的,在利用测试数据进行测试时,由于测试数据的数据量较小,测试时所耗费的时间也较短,可以提高测试效率。

实际应用中,上述待测试系统还可以为分布式存储系统,则上述第一待测试设备可以为:分布式存储系统中的数据服务器。在分布式存储系统中,数据是以数据块的形式进行存储的,因此上述第一数据文件可以为:以数据块形式存储数据的文件。

在分布式存储系统中,本实施例所提供的方案的执行主体可以为第一待测试设备本身,也可以为位置服务器或者某一特定的数据服务器,位置服务器或者该特定的数据服务器根据每一数据服务器对应的构建参数在每一数据服务器中构建测试参数,本实施例对此不做限定。

由上述描述可知,数据文件中存储有不同的对象object对应的数据,实际应用中,用户可能对一些object进行过删除操作。因此为了尽可能的构建符合实际情况的测试数据,上述各个数据文件中要写入的数据的第一数据量可以包括:各个数据文件所包含数据块中未删除的对象的数量、已删除的对象的数量、每个对象的数据量;

相应的,上述针对每一第一数据文件,生成该第一数据文件对应的第一数据量的数据的步骤,可以包括:

针对每一第一数据文件,根据该第一数据文件所包含数据块中未删除的对象的数量、已删除的对象的数量、每个对象的数据量,生成该第一数据文件对应的数据。

由于每一数据服务器中可以包含多个磁盘,每一磁盘中可以生成多个数据块,因此,第一构建参数所包含的要在第一待测试设备中生成的数据文件的第一数量可以为:要在第一待测试设备的各个磁盘中生成的数据文件的数量。因此可以根据要在各个磁盘中生成的数据文件的数量,在第一待测试设备的每个磁盘中生成对应数量的第一数据文件。

然后,针对每一第一数据文件,根据该第一数据文件所包含数据块中未删除的对象的数量、已删除的对象的数量、每个对象的数据量,生成每个对象对应的数据量的数据,并且对于已删除的对象,还可以在该对象的header中进行“已删除”的标记以区分该对象是已删除的对象。

本领域技术人员可以理解的是,为了提高分布式存储系统的可靠性和安全性的,可以采用副本的方式进行数据存储,副本replica是分布式存储系统中的常见概念:将一定大小的数据按照一定的冗余策略存储,以保障系统在局部故障情况下的可用性。对于冗余副本的数目,最常见的三副本。分布式存储系统一般拥有自动恢复副本的功能,在局部数据服务器出错时,系统自动发起副本恢复机制,将该宕机的数据服务器上的数据副本恢复到其他健康的数据服务器上。鉴于此,本实施例所述的测试数据正是为了测试分布式存储系统的副本恢复功能而构建的。

在一种较佳的实施方式中,为了使构建的第一测试数据的数据量尽可能少,以及实现尽可能简单,需要充分利用分布式存储系统提供的副本机制。可以理解的,分布式存储系统中包括多台数据服务器,第二待测试设备为不同于第一待测试设备所对应的数据服务器的另一台数据服务器。当每一台数据服务器中都按照上述方法构建出测试数据后,根据分布式存储系统的副本机制,数据服务器中的各个数据块会自动恢复成多个副本,并按照一定的均衡策略分别存储于多个数据服务器中。

因此,本实施例所提供的方法还可以包括:

接收并存储待测试系统中的第二待测试设备反馈的第三数据文件,得到用于对待测试系统进行测试的第三测试数据,其中,第三数据文件为:第二待测试设备中根据第二构建参数中的第二数量生成的数据文件、并且写入有第二数据量的数据,第二构建参数是:基于测试系统的数据结构确定的,第二构建参数包括:要在第二待测试设备中生成的数据文件的第二数量、各个数据文件中要写入的数据的第二数据量,第三数据文件为预设文件格式的数据文件。

具体的,构建第二待测试设备中的测试数据的方法,与上述构建第一待测试设备中的第一测试数据的方法相同,在此不做赘述。

可以理解的,以三副本机制为例,第二待测试设备中的数据文件自动恢复成另外两个副本,并且按照均衡策略将其中一个副本发送给第一待测试设备来存储,因此第一待测试设备中的测试数据还可以来自于第二待测试设备中所构建的测试数据。

可见,利用副本机制,只需要在待测试设备中的每个数据文件中写入一个副本的数据,然后由系统的副本恢复功能在检查副本状态非正常后,自动恢复成多个副本。这样,对于步骤s503在第一待测试设备中构建第一测试数据时,不需要考虑多个副本的情况,只需要在生成第一数据文件时所对应的数据块的副本id默认使用00。如此,可以降低构建测试数据的复杂性。

进一步的,本领域技术人员可以理解的是,为了减少数据存储所占用的空间,在副本机制的基础上,还可以对数据块进行纠删码编码,副本机制与纠删码编码都是通过增加冗余数据的方式来保证数据在发生部分丢失时,原始数据不发生丢失。但相较于副本,纠删码能以低得多的存储空间代价获得相似的可靠性。比如三副本方式存储开销为3,因为同样的数据被存储了三份,而在8+4(将原始数据分为8份,计算4份冗余)的纠删码策略下,存储开销为1.4。采用纠删码能够极大地减少存储系统的存储开销,减少硬件、运维和管理成本。

因此,在构建出第一待测试设备中的第一测试数据后,本实施例所提供的方法还可以包括:

对第一数据文件进行纠删码编码,生成第二数据文件,得到用于对待测试系统进行测试的第二测试数据。

可以理解的,对第一数据文件进行纠删码编码,生成的第二数据文件可以称为ec副本。以三副本和8+4的纠删码策略为例,ec副本是由三副本在达到特定条件后通过纠删码编码后得到。具体的,由于数据块具有一定的数据容量,当三副本对应的数据块写满后,数据服务器会触发纠删码编码机制,对该三副本中副本id为00的数据块进行纠删码编码,得到12个ec副本,然后将副本id为00的ec副本存储于该数据服务器本地,而副本id为01-11的其它11个ec副本则按照一定的均衡机制分别存储到其它11个数据服务器中。

在现有技术中,数据块block中的manifest文件中的fulltime值可以为1或-1,fulltime=-1表示该数据块block还未写满,当数据服务器检测到该数据块block写满时,将该数据块block的fulltime值从-1设置为1,表示该数据块block已经写满,此时触发纠删码编码机制生成ec副本。实际上,由于对数据块进行纠删码编码的计算量较大,降低系统的性能,因此应该尽量减少纠删码编码的次数。而且一数据块中存储有较多对象的数据,当用户删除该数据块中一些对象的数据后,该数据块可以继续存储其它对象的数据,如果当数据块写满后立即触发纠删码编码机制,而此时恰好用户对该数据块中的对象执行了删除操作,则此时不必要进行纠删码编码。因此,还可以设置一个预设时长full,从fulltime值设置为1的时刻开始计时,在该预设时长后判断该数据块是否依然是写满状态,如果是,再对该数据块进行纠删码编码处理。

在本实施例中,由于每一数据文件中并没有写满数据,数据服务器不会自动触发纠删码编码机制。在这种情况下,本实施例所提供的方案的执行主体可以将数据文件的manifest文件中的fulltime值设置为1,以强制触发纠删码编码机制,此时每一数据文件并不需要写满即可进行纠删码编码。

因此,上述对第一数据文件进行纠删码编码,生成第二数据文件的步骤,可以包括:

判断第一数据文件中的预设参数的值是否为预设值;

如果是,对第一数据文件进行纠删码编码,生成第二数据文件。

当然,本实施例只是以manifest文件中的fulltime值为例对预设参数进行说明,实际应用中,也可以设置其他参数为触发纠删码编码机制的参数,本实施例对此不做限定。

可以理解的,分布式存储系统中的任意数据服务器中的数据文件均可以按照上述方法进行纠删码编码,因此,本实施例提供的方法还可以包括:

接收并存储第二待测试设备反馈的第四数据文件,得到用于对待测试系统进行测试的第四测试数据,其中,第四数据文件为所述第二待测试设备对第三数据文件进行纠删码编码后生成的数据文件。

可以理解的,第二待测试设备中的第三数据文件按照纠删码编码得到的ec副本,可以按照均衡策略将其中一个ec副本发送给第一待测试设备来存储,因此第一待测试设备中的测试数据还可以来自于第二待测试设备中通过纠删码编码得到的ec副本。

可见,本实施例所提供的方案,先在各个数据服务器中构建第一测试数据,然后利用分布式存储系统特有的副本机制和纠删码编码机制,对两种不同的副本类型采用不同的策略来构建测试数据,分别在各个数据服务器中构建出第三测试数据和第二测试数据,因此所构建出的测试数据更加满足分布式存储系统的需求和功能。因此,本实施从分布式存储系统本身特点和功能出发,提供了一种根据系统本身底层数据结构进行测试数据构建的方案,并在此基础上通过构建参数控制,可以实现随机数据及依照线上数据生成的功能。本方案对分布式存储系统而言,通过精确构建少量数据,可以有效缩短测试时间,提高系统版本迭代效率,快速对线上bug修复进行验证,减少系统故障时间,改进了通过分布式存储系统的接口构建测试数据时间过长的缺点。

实际应用中,本实施例所提供的方法还可以包括:在构建测试数据完成后,输出构建完成测试数据的提示消息。这样,测试人员可以了解测试数据的构建情况,在测试数据构建完成后即可利用测试数据进行测试。

由以上可见,本实施例提供的一种测试数据构建方法,首先,获得目标测试数据的第一构建参数,其中,目标测试数据为:存储于第一待测试设备且用于对该第一待测试设备所属待测试系统进行测试的测试数据,第一构建参数是基于所述待测试系统的数据结构确定的,第一构建参数包括:要在第一待测试设备中生成的数据文件的第一数量、各个数据文件中要写入的数据的第一数据量;然后,在第一待测试设备中生成预设文件格式的第一数量个第一数据文件,其中,预设文件格式是由待测试系统的数据结构确定的;最后,针对每一第一数据文件,生成该第一数据文件对应的第一数据量的数据,并将生成的数据写入该第一数据文件,得到用于对待测试系统进行测试的第一测试数据。

可见,本实施例提供的方案,通过构建参数来控制待测试设备中所要构建的测试数据的数据量,基于待测试系统的数据结构和文件格式在待测试设备中生成数据文件,针对每一数据文件,生成对应数据量的数据,并将生成的数据直接写入到该数据文件中,不需要触发待测试系统的逻辑生成大量的测试数据,从而可以减少测试数据的数据量,减少构建测试数据所需要的时间。

下面以一个具体实施例对本发明实施例所提供的一种测试数据的构建方法进行说明。

以分布式存储系统为例,如图6所示的框架图中,包括主控制器和数据构建程序,主控制器为测试人员的控制点,其可以对外提供接口、分发程序、监控执行;数据构建程序用于根据构建参数在待测试设备中生成数据文件并写入数据。具体的,主控制器的作用为:1、通过命令行或以接口的方式供用户或程序调用,以获得每一待测试设备中的目标测试数据的构建参数;2、分发数据构建程序到分布式存储系统中的所有数据服务器,并将用户或程序的输入的构建参数告知数据构建程序;3、监控数据构建程序的执行,在数据构建程序构建完成测试数据后反馈给用户或程序。

具体的,数据构建程序构建测试数据的方法可以参照图5所示实施例的描述。但是需要强调的是,一方面,数据构建程序仅需要在所在的数据服务器中的每个数据块中仅写入一个副本的数据,即原本应该在三个数据服务器的数据目录中写入,但在本方案中仅需要在一个数据服务器中写入数据,由系统的副本恢复功能在检查副本状态非正常后,自动恢复成多个副本。这样可以使数据构建程序:1、不需要考虑多个副本id的情况,生成数据块的目录时,副本id默认使用00;2、不需要进行跨机器写入,仅需要写入其所在机器即可。通过以上两点,可以减少数据构建程序的复杂性。另一方面,通过构建参数的方式控制每个磁盘生成block的数量、单个block中未删除object数量、已删除object数量,以及每个object的数据大小,可以增加数据构建程序的灵活性,通过输入的构建参数为较低值,可以减少整个测试集群中的数据总量,进而减少在测试副本恢复功能时数据恢复所用的时间。

实际应用中,主控制器和数据构建程序可以使用python语言进行编写。在一种实现方式中,主控制器可以设置在位置服务器中或者一个数据服务器中,数据构建程序设置在各个数据服务器中。这种主控制功能和数据构建功能分为两个独立程序的方式,由于分发、监控功能变动时不需要涉及数据构建程序,因此这种使整个数据构建系统解耦的方式,可以减少各自所涉及范围,方便后续对各个功能进行扩展、修改。当然,在另一种实现方式中,也可以由一个程序a同时具有主控制器和数据构建程序的功能,在每个数据服务器中都设置该程序a,每个数据服务器各自在自身构建测试数据,也可以在某一服务器中设置该程序a,由该某一服务器在各个数据服务器中分别构建测试数据,这都是合理的。

本具体实施例所提供的框架具有以下优点:测试代码易于扩展、方便修改、在极大程度上减少了后续维护的成本,且有较好的易用性,无需专业的测试人员也可顺利使用此框架,因此具有良好的可推广性;目前市面上没有现成的可应用于分布式存储系统的测试数据构建方法,本实施例提出的方案易于理解、方便实现、效果显著;本方案对系统本身代码层面不进行任何修改,在底层数据层面对系统进行测试数据的构建,易于应用到其它各种原理类似的系统之上;目前可见的数据构建方法普遍存在时间耗时过长,生成的数据不够准确的缺点,本实施例通过直接写入系统底层数据的方法,有效弥补了这种不足。

与上述的测试数据的构建方法相对应,本发明实施例还提供了一种测试数据的构建装置。

与图5所示的方法实施例相对应,图7为本发明实施例提供的一种测试数据的构建装置的结构示意图,该装置可以包括:

获得模块701,用于获得目标测试数据的第一构建参数,其中,所述目标测试数据为:存储于第一待测试设备且用于对所述第一待测试设备所属待测试系统进行测试的测试数据,所述第一构建参数是基于所述待测试系统的数据结构确定的,所述第一构建参数包括:要在所述第一待测试设备中生成的数据文件的第一数量、各个数据文件中要写入的数据的第一数据量;

生成模块702,用于在所述第一待测试设备中生成预设文件格式的第一数量个第一数据文件,其中,所述预设文件格式是由所述待测试系统的数据结构确定的;

写入模块703,用于针对每一第一数据文件,生成该第一数据文件对应的所述第一数据量的数据,并将生成的数据写入该第一数据文件,得到用于对所述待测试系统进行测试的第一测试数据。

具体的,所述待测试系统可以为:分布式存储系统;

所述第一待测试设备可以为:所述分布式存储系统中的数据服务器;

所述第一数据文件可以为:以数据块形式存储数据的文件。

具体的,所述各个数据文件中要写入的数据的第一数据量可以包括:各个数据文件所包含数据块中未删除的对象的数量、已删除的对象的数量、每个对象的数据量;

所述生成模块702,具体可以用于:

针对每一第一数据文件,根据该第一数据文件所包含数据块中未删除的对象的数量、已删除的对象的数量、每个对象的数据量,生成该第一数据文件对应的数据。

具体的,所述装置还可以包括:

编码模块(图中未示出),用于对所述第一数据文件进行纠删码编码,生成第二数据文件,得到用于对所述待测试系统进行测试的第二测试数据。

具体的,所述编码模块,可以包括:

判断子模块(图中未示出),用于判断所述第一数据文件中的预设参数的值是否为预设值;如果是,触发编码子模块;

所述编码子模块(图中未示出),用于对所述第一数据文件进行纠删码编码,生成第二数据文件,得到用于对所述待测试系统进行测试的第二测试数据。

具体的,所述装置还可以包括:

第一接收模块(图中未示出),用于接收并存储所述待测试系统中的第二待测试设备反馈的第三数据文件,得到用于对所述待测试系统进行测试的第三测试数据,其中,所述第三数据文件为:所述第二待测试设备中根据第二构建参数中的第二数量生成的数据文件、并且写入有第二数据量的数据,所述第二构建参数是:基于所述待测试系统的数据结构确定的,所述第二构建参数包括:要在所述第二待测试设备中生成的数据文件的第二数量、各个数据文件中要写入的数据的第二数据量,第三数据文件为预设文件格式的数据文件。

具体的,所述装置还可以包括:

第二接收模块(图中未示出),用于接收并存储所述第二待测试设备反馈的第四数据文件,得到用于对所述待测试系统进行测试的第四测试数据,其中,所述第四数据文件为所述第二待测试设备对所述第三数据文件进行纠删码编码后生成的数据文件。

具体的,所述装置还可以包括:

输出模块(图中未示出),用于在构建测试数据完成后,输出构建完成测试数据的提示消息。

由以上可见,本实施例提供的一种测试数据构建装置,首先,获得目标测试数据的第一构建参数,其中,目标测试数据为:存储于第一待测试设备且用于对该第一待测试设备所属待测试系统进行测试的测试数据,第一构建参数是基于所述待测试系统的数据结构确定的,第一构建参数包括:要在第一待测试设备中生成的数据文件的第一数量、各个数据文件中要写入的数据的第一数据量;然后,在第一待测试设备中生成预设文件格式的第一数量个第一数据文件,其中,预设文件格式是由待测试系统的数据结构确定的;最后,针对每一第一数据文件,生成该第一数据文件对应的第一数据量的数据,并将生成的数据写入该第一数据文件,得到用于对待测试系统进行测试的第一测试数据。

因此,本实施例提供的方案,通过构建参数来控制待测试设备中所要构建的测试数据的数据量,基于待测试系统的数据结构和文件格式在待测试设备中生成数据文件,针对每一数据文件,生成对应数据量的数据,并将生成的数据直接写入到该数据文件中,不需要触发待测试系统的逻辑生成大量的测试数据,从而可以减少测试数据的数据量,减少构建测试数据所需要的时间。

需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1