本發明涉及領域,尤其涉及一種配置文件的解析方法及裝置。
背景技術:
在配置文件中通常需要配置大量的參數,比如回歸測試中回歸的版本號,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是以上所述裝置中負責存儲解析結果的部分,可以是軟件、硬件或兩者的結合。
本實施例的一種備選方案中,所述預定格式的字段可以包括:
與預定符號按照預定方式組合的字符序列。
本備選方案的一種實施方式中,所述替換模塊分別獲取每個所述預定格式的字段對應的設定值可以包括:
所述替換模塊對于每個預定格式的字段分別進行下述處理:將該預定格式的字段中的字符序列作為第二參數的參數名,根據所述第二參數的參數名獲取所述第二參數的參數值,作為所述預定格式的字段對應的設定值。
本實施例的一種備選方案中,所述存儲模塊將完成替換的第一參數的參數值保存為所述第一參數的解析結果可以包括:
所述存儲模塊分別判斷每個所述第一參數的參數值經過替換后是否仍包含預定格式的字段;對于仍包含預定格式的字段的第一參數的參數值,返回給所述替換模塊;對于不存在預定格式的字段的第一參數的參數值,保存為所述第一參數的解析結果。
本實施例的一種備選方案中,所述的裝置還可以包括:
檢測模塊,用于對使用所獲取的設定值替換所述第一參數的參數值中相應的預定格式的字段的次數進行計數,如果超過預定的最大替換次數則進行報錯。
所述檢測模塊是以上所述裝置中負責檢測錯誤的部分,可以是軟件、硬件或兩者的結合。
其它實施細節可參見實施例一。
本領域普通技術人員可以理解上述方法中的全部或部分步驟可通過程序來指令相關硬件完成,所述程序可以存儲于計算機可讀存儲介質中,如只讀存儲器、磁盤或光盤等。可選地,上述實施例的全部或部分步驟也可以使用一個或多個集成電路來實現。相應地,上述實施例中的各模塊/單元可以采用硬件的形式實現,也可以采用軟件功能模塊的形式實現。本申請不限制于任何特定形式的硬件和軟件的結合。
當然,本申請還可有其他多種實施例,在不背離本申請精神及其實質的情況下,熟悉本領域的技術人員當可根據本申請作出各種相應的改變和變形,但這些相應的改變和變形都應屬于本申請的權利要求的保護范圍。