一种配置文件的参数解析方法及装置与流程

文档序号:11250784阅读:257来源:国知局
一种配置文件的参数解析方法及装置与流程

本发明涉及领域,尤其涉及一种配置文件的解析方法及装置。



背景技术:

在配置文件中通常需要配置大量的参数,比如回归测试中回归的版本号,case语句执行的次数等都是需要配置的参数,由于测试的需求不断的变化,导致这些参数都需要手动的修改,而且会涉及多个地方的修改。

现有的技术方案主要是把所有会涉及到的参数全部保存一个配置文件中,并使用key(参数名)=val(参数值)的方式来描述参数。

比如,在配置文件中参数的格式如下:

key1=/test/1.0/sub_1

key2=/test/1.0/dis_0

key3=/test/1.0/sub_1/sub_dir

当前的测试版本是1.0,其中大版本号是1,小版本号是0;如果需要修改测试版本,从1.0升级到2.1,则需要手动修改配置文件中的上述内容为:

key1=/test/2.1/sub_2

key2=/test/2.1/dis_1

key3=/test/2.1/sub_2/sub_dir

现有技术方案主要存在如下问题:

一方面,有多个类似的参数值如果要修改的话,那么所有涉及到的地方都需要修改,工作量较大,耗时较多。而且在修改的过程中,如果某个地方忘记修改则会导致测试的结果不符合预期。

另一方面,参数的描述必须遵守严格的先后顺序,否则可能导致出错; 比如上例中,key3中的前半部分“/test/1.0/sub_1/”(修改后为“/test/2.1/sub_2/”)即key1,因此key1必须排在key3之前;如果key3排在key1前,由于当解析到key3时key1还没有解析成功,因此解析key3将发生失败。



技术实现要素:

本申请能够集中进行相似参数的修改,减少修改过程中出错的概率。

本申请采用如下技术方案。

一种配置文件的参数解析方法,包括:

分别根据所述配置文件中每个待解析的第一参数的参数名,获取所述第一参数的参数值;

当所述第一参数的参数值中包含一个或多个预定格式的字段时,分别获取每个所述预定格式的字段对应的设定值,使用所获取的设定值替换所述第一参数的参数值中相应的预定格式的字段;其中,不同参数值中的具有相同含义的信息使用同样的预定格式的字段表示;将完成替换的第一参数的参数值保存为所述第一参数的解析结果。

可选地,所述预定格式的字段包括:

与预定符号按照预定方式组合的字符序列。

可选地,所述分别获取每个所述预定格式的字段对应的设定值包括:

对于每个预定格式的字段分别进行下述处理:将该预定格式的字段中的字符序列作为第二参数的参数名,根据所述第二参数的参数名获取所述第二参数的参数值,作为所述预定格式的字段对应的设定值。

可选地,所述将完成替换的第一参数的参数值保存为所述第一参数的解析结果包括:

分别判断每个所述第一参数的参数值经过替换后是否仍包含预定格式的字段;

对于仍包含预定格式的字段的第一参数的参数值,返回所述分别获取每 个所述预定格式的字段对应的设定值,使用所获取的设定值替换所述第一参数的参数值中相应的预定格式的字段的步骤;

对于不存在预定格式的字段的第一参数的参数值,保存为所述第一参数的解析结果。

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

对使用所获取的设定值替换所述第一参数的参数值中相应的预定格式的字段的次数进行计数,如果超过预定的最大替换次数则进行报错。

一种配置文件的参数解析装置,包括:

获取模块,用于分别根据所述配置文件中每个待解析的第一参数的参数名,获取所述第一参数的参数值;

替换模块,用于当所述第一参数的参数值中包含一个或多个预定格式的字段时,分别获取每个所述预定格式的字段对应的设定值,使用所获取的设定值替换所述第一参数的参数值中相应的预定格式的字段;其中,不同参数值中的具有相同含义的信息使用同样的预定格式的字段表示;

存储模块,用于将完成替换的第一参数的参数值保存为所述第一参数的解析结果。

可选地,所述预定格式的字段包括:

与预定符号按照预定方式组合的字符序列。

可选地,所述替换模块分别获取每个所述预定格式的字段对应的设定值包括:

所述替换模块对于每个预定格式的字段分别进行下述处理:将该预定格式的字段中的字符序列作为第二参数的参数名,根据所述第二参数的参数名获取所述第二参数的参数值,作为所述预定格式的字段对应的设定值。

可选地,所述存储模块将完成替换的第一参数的参数值保存为所述第一参数的解析结果包括:

所述存储模块分别判断每个所述第一参数的参数值经过替换后是否仍 包含预定格式的字段;对于仍包含预定格式的字段的第一参数的参数值,返回给所述替换模块;对于不存在预定格式的字段的第一参数的参数值,保存为所述第一参数的解析结果。

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

检测模块,用于对使用所获取的设定值替换所述第一参数的参数值中相应的预定格式的字段的次数进行计数,如果超过预定的最大替换次数则进行报错。

本申请的至少一个备选方案中先将配置文件中的参数值定义为包含预定格式的字段的形式,并且将不同参数值中的相同内容都定义为同样的预定格式的字段,这样修改时只需要修改相应的预定格式的字段的值,就能够使包含该预定格式的字段的参数值都完成修改,因此可以减少修改出错的概率。

本申请的又一个备选方案中对于参数值会受其它参数的解析结果影响的参数(比如前文例子中,key3的参数值受key1的解析结果影响),将该参数的参数值中与所述其它参数解析结果相关的部分采用含有所述其它参数的参数名的预定格式的字段表示,从而可以使配置文件中参数的排列顺序不受限制,减少参数顺序问题导致的解析参数失败。

本申请的又一个备选方案通过统计解析次数,能够检查配置参数是否存在冲突,从而发现参数配置错误的情况。

当然,实施本申请的任一产品必不一定需要同时达到以上所述的所有优点。

附图说明

图1是实施例一的配置文件的参数解析方法的流程示意图;

图2是实施例二的配置文件的参数解析装置的示意图。

具体实施方式

下面将结合附图及实施例对本申请的技术方案进行更详细的说明。

需要说明的是,如果不冲突,本申请实施例以及实施例中的各个特征可以相互结合,均在本申请的保护范围之内。另外,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。

在一个典型的配置中,客户端或认证系统的计算设备可包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存(memory)。

内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flashram)。内存是计算机可读介质的示例。内存可能包括模块1,模块2,……,模块n(n为大于2的整数)。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom),快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。

实施例一、一种配置文件的参数解析方法,如图1所示,包括步骤s110~s120。

s110、分别根据所述配置文件中每个待解析的第一参数的参数名,获取所述第一参数的参数值;

s120、当所述第一参数的参数值中包含一个或多个预定格式的字段时,分别获取每个所述预定格式的字段对应的设定值,使用所获取的设定值替换所述第一参数的参数值中相应的预定格式的字段;其中,不同参数值中的具 有相同含义的信息使用同样的预定格式的字段表示;

s130、将完成替换的第一参数的参数值保存为所述第一参数的解析结果。

本实施例中,每个第一参数的参数值中可以包含一个或多个预定格式的字段。如果所述第一参数的参数值中不存在预定格式的字段,则可以直接将第一参数的参数值保存为所述第一参数的解析结果。

本实施例中,当存在多个第一参数时,在步骤s110中会获取到相应的多个参数值;比如第一参数包括a和b,分别获取到参数值val_a和val_b;如果val_a和val_b中都存在预定格式的字段,则分别进行步骤s120后,在步骤s130中,val_a完成替换后保存为a的解析结果,val_b完成替换后保存为b的解析结果。

本实施例中,可以将配置文件中相似内容的参数值都定义为包含预定格式的字段的形式,相似内容的参数值都可以通过相应的预定格式的字段的值获得;所述相似内容的参数值是指参数值中包含一个或多个相同含义的信息,相同含义的信息用相同的预定格式的字段表示;比如前文的例子里,key1、key2和key3对应的参数值中都存在版本信息(包括大版本号和小版本号),因此参数名key1~key3对应的参数值为相似类容的参数值,其中的大版本号属于相同含义的信息,用相同的预定格式的字段表示;小版本号也属于相同含义的信息,也用相同的预定格式的字段表示(但与表示大版本号的预定格式的字段不同)。

key1、key2和key3对应的参数值可以定义如下:

key1=/test/${max_ver}.${min_ver}/sub_${max_ver}

key2=/test/${max_ver}.${min_ver}/dis_${min_ver}

key3=/test/${max_ver}.${min_ver}/sub_${max_ver}/sub_dir

其中,${max_ver}和${min_ver}即所述预定格式的字段,分别代表大版本号和小版本号。预定格式的字段所对应的第二参数值可以设置和修改,比如本例中,${max_ver}对应于“1”,${min_ver}对应于“0”。

当需要解析key1表示的参数时,根据key1获取到的参数值为:

/test/${max_ver}.${min_ver}/sub_${max_ver};

其中包括两个预定格式的字段:${max_ver}和${min_ver}。

当测试版本为1.0时,根据${max_ver}获取的设定值为“1”,根据${min_ver}获取的设定值为“0”;用“1”替换key1对应的参数值中的${max_ver},用“0”替换key1对应的参数值中的${min_ver},得到key1的解析结果如下:

key1=/test/1.0/sub_1。

类似地,可以解析得到:

key2=/test/1.0/dis_0;

key3=/test/1.0/sub_1/sub_dir。

当测试版本由1.0改为2.1时,本实施例中只需要修改${max_ver}对应的设定值,及${min_ver}对应的设定值,修改后,根据${max_ver}获取的设定值为“2”,根据${min_ver}获取的设定值为“1”,替换后得到解析结果:

key1=/test/2.1/sub_2;

key2=/test/2.1/dis_1;

key3=/test/2.1/sub_2/sub_dir。

可以看到,解析结果中,和版本信息有关的地方都完成了修改。

可见,在采用本实施例的方法进行解析的情况下,当相似内容的参数值需要修改的时候,只需要修改相应的预定格式的字段的值就能够使相似内容的参数值都完成修改,这样只需要修改少数几个值就可以将参数值中所有变化的部分都自动完成修改,极大地减少修改出错的概率。

本实施例中,如果根据预定格式的字段无法获得设定值,则说明对于预定格式的字段不存在或无法获取对应的设定值,可以进行报错。

本实施例中,可以将所述预定格式的字段看成是全局参数;每个所述预定格式的字段及对应的设定值可以保存在全局参数中心中,在解析时供查找;所述全局参数中心可以是在内存中划分出的一块独立区域。

本实施例的一种备选方案中,所述预定格式的字段可以但不限于包括:与预定符号按照预定方式组合的字符序列。

本备选方案中,所述分别获取每个所述预定格式的字段对应的设定值可以包括:

对于每个预定格式的字段分别进行下述处理:将该预定格式的字段中的字符序列作为第二参数的参数名,根据所述第二参数的参数名获取所述第二参数的参数值,作为所述预定格式的字段对应的设定值。

比如上文的例子中,预定格式的字段“${max_ver}”中,预定符号为“${}”,字符序列为“max_ver”,预定方式为字符序列位于“{}”中。再比如预定格式的字段为“#max_ver#”,预定符号为两个“#”,字符序列为“max_ver”,预定方式为字符序列位于两个“#”之间。

本备选方案中,所述预定符号、预定方式都可以自行设置,不局限于上述具体示例。当然,所述预定格式的字段也可以为其它形式,只要可以与配置文件中普通的参数值相区别即可;比如配置文件中的参数值最多为6位,那么可以将10位的字符序列作为预定格式的字段;再比如参数值中不可能出现某一类字符,那么将含有该类字符的序列作为预定格式的字段。

本备选方案中,所述字符序列作为参数名时所对应的参数值是可以设置并可以修改的。比如对于上例,相当于在测试版本为1.0时,设置:

max_ver=1;

min_ver=0。

当测试版本为2.0时,修改为:

max_ver=2;

min_ver=1。

本备选方案中,所述字符序列可以看成是全局参数的参数名,所述字符序列中的字符可以包括数字、字符和下划线;可以但不限于将字符序列及其对应的参数值保存在全局参数中心,可以但不限于保存为map格式。

其它备选方案中,也可以直接将所述预定格式的字段本身作为参数名,去获取参数值;或者将所述预定格式的字段按照预定规则转换为参数名,去 获取参数值;还可以根据获取或保存的预定格式的字段和设定值的一一对应关系,获取预定格式的字段对应的设定值。

本实施例的一种备选方案中,所述将完成替换的第一参数的参数值保存为所述第一参数的解析结果可以包括:

分别判断每个所述第一参数的参数值经过替换后是否仍包含预定格式的字段;

对于仍包含预定格式的字段的第一参数的参数值,返回步骤s120;

对于不存在预定格式的字段的第一参数的参数值,保存为所述第一参数的解析结果。

本备选方案中,第一参数的参数值经过替换后仍存在预定格式的字段的一种可能是:第一参数的参数值中所包含的预定格式的字段里的字符序列为其它参数的参数名,且该其它参数的参数值里也包括预定格式的字段。比如上例中,将key3对应的参数值定义如下:

key3=${key1}/sub_dir。

如果key1的定义排列在key3之后,那么先解析到key3,将字符序列“key1”作为第二参数名得到的参数值如下:

/test/${max_ver}.${min_ver}/sub_${max_ver};

替换后key3的参数值为:

key3=/test/${max_ver}.${min_ver}/sub_${max_ver}/sub_dir。

之后将会解析出key1的参数值并保存解析结果。

由于key3的参数值经过替换后仍存在预定格式的字段,因此还需要再进行一轮获取设定值和替换的操作,而此时key1的参数值已经解析完成,因此再进行一轮获取设定值和替换的操作可以得到key3最终的解析结果。

可见,在本备选方案中,对于参数值会受其它参数的解析结果影响的参数(比如前文例子中,key3的参数值受key1的解析结果影响),将参数值中与其它参数解析结果相关的部分采用含有所述其它参数的参数名的预定格式的字段表示,从而可以使配置文件中参数的排列顺序不受限制,减少参 数顺序问题导致的解析参数失败。

本实施例的一种备选方案中,还可以包括:

对使用所获取的设定值替换所述第一参数的参数值中相应的预定格式的字段的次数进行计数,如果超过预定的最大替换次数则进行报错

本备选方案可以对参数循环嵌套的情况进行报错;所述最大替换次数可以根据经验值或仿真结果确定。如果参数循环嵌套,比如a的参数值里包含b,而b的参数值里也包含a,将会出现无限次的替换。

本备选方案中,可以设置为:每进行一次替换则计数值增加1,比如在上文对key1的参数值进行替换的过程中,共进行了三次替换。也可以设置为:对配置文件中所有含有预定格式的字段的参数值完成一轮替换后,计数值增加1。

其它备选方案中,也可以事先采用其它方式检查错误,而不在解析过程中通过计数值来判断是否出错;还可以在解析过程中采用计数以外的其它方式检查是否错误。

本实施例的一种备选方案中,所述步骤s110前还可以包括:

在内存中建立一个为空的全局参数中心;

开始解析时,将所有的没有经过解析的参数名及其对应的参数值都保存到所述全局参数中心;

本备选方案中,根据参数名获取参数值时也是在所述全局参数中心里进行查找;所述解析结果也将保存到所述全局参数中心里。其它备选方案中可以不集中保存参数名和参数值,只是将相对应的参数名和参数值关联保存。

实施例二、一种配置文件的参数解析装置,如图2所示,包括:

获取模块21,用于分别根据所述配置文件中每个待解析的第一参数的参数名,获取所述第一参数的参数值;

替换模块22,用于当所述第一参数的参数值中包含一个或多个预定格式的字段时,分别获取每个所述预定格式的字段对应的设定值,使用所获取 的所述设定值替换所述第一参数的参数值中相应的预定格式的字段;其中,不同参数值中的具有相同含义的信息使用同样的预定格式的字段表示;

存储模块23,用于将完成替换的第一参数的参数值保存为所述第一参数的解析结果。

所述获取模块21是以上所述装置中负责获得初始参数值的部分,可以是软件、硬件或两者的结合。

所述替换模块22是以上所述装置中负责将参数值中的预定格式的字段替换为相应内容的部分,可以是软件、硬件或两者的结合。

所述存储模块23是以上所述装置中负责存储解析结果的部分,可以是软件、硬件或两者的结合。

本实施例的一种备选方案中,所述预定格式的字段可以包括:

与预定符号按照预定方式组合的字符序列。

本备选方案的一种实施方式中,所述替换模块分别获取每个所述预定格式的字段对应的设定值可以包括:

所述替换模块对于每个预定格式的字段分别进行下述处理:将该预定格式的字段中的字符序列作为第二参数的参数名,根据所述第二参数的参数名获取所述第二参数的参数值,作为所述预定格式的字段对应的设定值。

本实施例的一种备选方案中,所述存储模块将完成替换的第一参数的参数值保存为所述第一参数的解析结果可以包括:

所述存储模块分别判断每个所述第一参数的参数值经过替换后是否仍包含预定格式的字段;对于仍包含预定格式的字段的第一参数的参数值,返回给所述替换模块;对于不存在预定格式的字段的第一参数的参数值,保存为所述第一参数的解析结果。

本实施例的一种备选方案中,所述的装置还可以包括:

检测模块,用于对使用所获取的设定值替换所述第一参数的参数值中相应的预定格式的字段的次数进行计数,如果超过预定的最大替换次数则进行报错。

所述检测模块是以上所述装置中负责检测错误的部分,可以是软件、硬件或两者的结合。

其它实施细节可参见实施例一。

本领域普通技术人员可以理解上述方法中的全部或部分步骤可通过程序来指令相关硬件完成,所述程序可以存储于计算机可读存储介质中,如只读存储器、磁盘或光盘等。可选地,上述实施例的全部或部分步骤也可以使用一个或多个集成电路来实现。相应地,上述实施例中的各模块/单元可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。本申请不限制于任何特定形式的硬件和软件的结合。

当然,本申请还可有其他多种实施例,在不背离本申请精神及其实质的情况下,熟悉本领域的技术人员当可根据本申请作出各种相应的改变和变形,但这些相应的改变和变形都应属于本申请的权利要求的保护范围。

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