一種測試數(shù)據(jù)生成方法及裝置制造方法
【專利摘要】本發(fā)明公開了一種測試數(shù)據(jù)生成方法及裝置一種測試數(shù)據(jù)生成方法包括:獲取測試對象的相關數(shù)據(jù)樣本,分別確定每組數(shù)據(jù)樣本的鍵字段;根據(jù)測試對象的數(shù)據(jù)轉(zhuǎn)換流程,確定鍵字段中的核心鍵字段;對相關數(shù)據(jù)樣本進行抽樣,提取抽樣結果中的鍵字段數(shù)值,如果是非核心鍵字段數(shù)值,則進一步轉(zhuǎn)換為核心鍵字段數(shù)值,將得到的所有核心鍵字段數(shù)值添加到備選數(shù)值集合中;在輸入數(shù)據(jù)樣本中,查詢與備選數(shù)值集合元素相匹配的數(shù)據(jù),利用查詢結果構成測試數(shù)據(jù)。上述方案充分考慮到了測試對象輸入、輸出及中間數(shù)據(jù)在整體上的相互關聯(lián),能夠有效避免測試數(shù)據(jù)無法關聯(lián)或者在測試過程中消失的問題。
【專利說明】一種測試數(shù)據(jù)生成方法及裝置
【技術領域】
[0001]本發(fā)明涉及測試【技術領域】,特別是涉及一種測試數(shù)據(jù)生成方法及裝置。
【背景技術】
[0002]軟件測試是軟件生命周期的重要組成部分,確保了計算機軟件的正確性和完整性。隨著軟件測試技術的發(fā)展,自動化測試技術已經(jīng)被越來越廣泛地使用。測試數(shù)據(jù)的準備,是軟件測試中的一個重要環(huán)節(jié),快速、全面地準備好測試數(shù)據(jù),可以顯著提高測試效率,縮短測試周期。
[0003]隨著互聯(lián)網(wǎng)的發(fā)展,軟件需要處理信息量也不斷增加,分布式軟件逐漸成為主流;在分布式軟件測試過程中,由于處理數(shù)據(jù)量較大,分布式集群統(tǒng)一運行,因此面臨測試運行周期漫長、運行資源爭搶等問題。其中,在準備測試數(shù)據(jù)的過程中,對測試樣本進行抽樣是解決上述問題的有效途徑。
[0004]現(xiàn)有技術中,在對系統(tǒng)進行測試數(shù)據(jù)抽樣時,主要采用對輸入數(shù)據(jù)進行單文本抽樣的方式,但是,如果系統(tǒng)存在多個輸入端、并且多個輸入數(shù)據(jù)之間存在關聯(lián)時,分別對每個輸入數(shù)據(jù)進行單文本抽樣,其各自的抽樣結果之間并不一定相互關聯(lián),那么這樣的測試數(shù)據(jù)就失去了實際意義。另外,如果系統(tǒng)存在多個輪次的輸入輸出,由于系統(tǒng)各個模塊的處理邏輯和限定,抽樣得到的數(shù)據(jù)很可能在某個處理過程中消失,導致后面的處理模塊無法得到充分測試。
【發(fā)明內(nèi)容】
[0005]為解決上述技術問題,本發(fā)明實施例提供一種測試數(shù)據(jù)生成方法及裝置,技術方案如下:
[0006]本發(fā)明實施例提供一種測試數(shù)據(jù)生成方法,該方法包括:
[0007]獲取測試對象的相關數(shù)據(jù)樣本,分別確定每組數(shù)據(jù)樣本的鍵字段;所述相關數(shù)據(jù)包括:輸入數(shù)據(jù)、輸出數(shù)據(jù)以及中間數(shù)據(jù);
[0008]根據(jù)測試對象的數(shù)據(jù)轉(zhuǎn)換流程,確定鍵字段中的核心鍵字段;所述核心鍵字段為:字段數(shù)值無法轉(zhuǎn)換為其他鍵字段數(shù)值的鍵字段;
[0009]對相關數(shù)據(jù)樣本進行抽樣,提取抽樣結果中的鍵字段數(shù)值,如果是非核心鍵字段數(shù)值,則進一步轉(zhuǎn)換為核心鍵字段數(shù)值,將得到的所有核心鍵字段數(shù)值添加到備選數(shù)值集合中;
[0010]在輸入數(shù)據(jù)樣本中,查詢與備選數(shù)值集合元素相匹配的數(shù)據(jù),利用查詢結果構成測試數(shù)據(jù)。
[0011]根據(jù)本發(fā)明的一種【具體實施方式】,所述確定每組數(shù)據(jù)樣本的鍵字段,包括:
[0012]識別數(shù)據(jù)樣本每個字段的數(shù)值特征;
[0013]如果一組數(shù)據(jù)樣本中僅出現(xiàn)一種鍵字段特征,則將該特征字段確定為該數(shù)據(jù)樣本的鍵字段;[0014]如果一組數(shù)據(jù)樣本中出現(xiàn)多種鍵字段特征,則濾除特征重復出現(xiàn)的字段,將剩余的字段確定為該數(shù)據(jù)樣本的鍵字段。
[0015]根據(jù)本發(fā)明的一種【具體實施方式】,所述識別數(shù)據(jù)樣本每個字段的數(shù)值特征,包括:
[0016]根據(jù)預設的規(guī)則,識別數(shù)據(jù)樣本每個字段的所涉及的數(shù)值類型;
[0017]針對固定列數(shù)的數(shù)據(jù)樣本,如果某列所涉及的某種數(shù)值類型比例大于預設的第一閾值,則將該類型確定為該列字段的數(shù)值特征;如果該列沒有大于第一閾值的數(shù)據(jù)類型,則將所有比例大于預設的第二閾值的數(shù)值類型確定為該列字段的數(shù)值特征;
[0018]針對非固定列數(shù)的數(shù)據(jù)樣本,如果某列所涉及的某種數(shù)值類型比例大于預設的第三閾值,則將該類型確定為該列字段的數(shù)值特征;如果該列沒有比例大于第三閾值的數(shù)據(jù)類型,則放棄對該列字段的數(shù)值特征識別。
[0019]根據(jù)本發(fā)明的一種【具體實施方式】,所述根據(jù)測試對象的數(shù)據(jù)轉(zhuǎn)換流程,確定鍵字段中的核心鍵字段,包括:
[0020]根據(jù)測試對象的數(shù)據(jù)流方向,確定各個鍵字段之間的數(shù)值轉(zhuǎn)換關系;
[0021]根據(jù)所確定的數(shù)值轉(zhuǎn)換關系,將不存在轉(zhuǎn)出關系的鍵字段,確定為核心鍵字段。
[0022]根據(jù)本發(fā)明的一種【具體實施方式】,所述對相關數(shù)據(jù)樣本進行抽樣,包括:
[0023]僅對包含鍵字段的數(shù)據(jù)樣本進行抽樣。
[0024]根據(jù)本發(fā)明的一種【具體實施方式】,所述對相關數(shù)據(jù)樣本進行抽樣,包括:
[0025]針對key-value格式的數(shù)據(jù)樣本,根據(jù)value的取值區(qū)間進行分類抽樣;
[0026]針對非key-value格式或value固定的數(shù)據(jù)樣本,使用全隨機的方式進行抽樣;
[0027]其中,所述key-value格式為鍵值對格式。
[0028]根據(jù)本發(fā)明的一種【具體實施方式】,所述在輸入數(shù)據(jù)樣本中,查詢與備選數(shù)值集合元素相匹配的數(shù)據(jù),包括:
[0029]將輸入數(shù)據(jù)樣本中非核心鍵字段數(shù)值轉(zhuǎn)換為核心鍵字段數(shù)值;
[0030]在原生核心鍵字段或轉(zhuǎn)換后的核心鍵字段中,查詢與備選數(shù)值集合元素相同的數(shù)值,進而將該數(shù)值所在的數(shù)據(jù)行作為查詢結果輸出。
[0031]本發(fā)明實施例還提供一種測試數(shù)據(jù)生成裝置,該裝置包括:
[0032]鍵字段確定模塊,用于獲取測試對象的相關數(shù)據(jù)樣本,分別確定每組數(shù)據(jù)樣本的鍵字段;所述相關數(shù)據(jù)包括:輸入數(shù)據(jù)、輸出數(shù)據(jù)以及中間數(shù)據(jù);
[0033]核心鍵字段確定模塊,用于根據(jù)測試對象的數(shù)據(jù)轉(zhuǎn)換流程,確定鍵字段中的核心鍵字段;所述核心鍵字段為:字段數(shù)值無法轉(zhuǎn)換為其他鍵字段數(shù)值的鍵字段;
[0034]數(shù)值收集模塊,用于對相關數(shù)據(jù)樣本進行抽樣,提取抽樣結果中的鍵字段數(shù)值,如果是非核心鍵字段數(shù)值,則進一步轉(zhuǎn)換為核心鍵字段數(shù)值,將得到的所有核心鍵字段數(shù)值添加到備選數(shù)值集合中;
[0035]測試數(shù)據(jù)生成模塊,用于在輸入數(shù)據(jù)樣本中,查詢與備選數(shù)值集合元素相匹配的數(shù)據(jù),利用查詢結果構成測試數(shù)據(jù)。
[0036]根據(jù)本發(fā)明的一種【具體實施方式】,所述鍵字段確定模塊,包括:
[0037]數(shù)值特征識別子模塊,用于識別數(shù)據(jù)樣本每個字段的數(shù)值特征;
[0038]鍵字段確定子模塊,用于:如果一組數(shù)據(jù)樣本中僅出現(xiàn)一種鍵字段特征,則將該特征字段確定為該數(shù)據(jù)樣本的鍵字段;如果一組數(shù)據(jù)樣本中出現(xiàn)多種鍵字段特征,則濾除特征重復出現(xiàn)的字段,將剩余的字段確定為該數(shù)據(jù)樣本的鍵字段。
[0039]根據(jù)本發(fā)明的一種【具體實施方式】,所述數(shù)值特征識別子模塊,具體用于:
[0040]根據(jù)預設的規(guī)則,識別數(shù)據(jù)樣本每個字段的所涉及的數(shù)值類型;
[0041]針對固定列數(shù)的數(shù)據(jù)樣本,如果某列所涉及的某種數(shù)值類型比例大于預設的第一閾值,則將該類型確定為該列字段的數(shù)值特征;如果該列沒有大于第一閾值的數(shù)據(jù)類型,則將所有比例大于預設的第二閾值的數(shù)值類型確定為該列字段的數(shù)值特征;
[0042]針對非固定列數(shù)的數(shù)據(jù)樣本,如果某列所涉及的某種數(shù)值類型比例大于預設的第三閾值,則將該類型確定為該列字段的數(shù)值特征;如果該列沒有比例大于第三閾值的數(shù)據(jù)類型,則放棄對該列字段的數(shù)值特征識別。
[0043]根據(jù)本發(fā)明的一種【具體實施方式】,所述核心鍵字段確定模塊,具體用于:
[0044]根據(jù)測試對象的數(shù)據(jù)流方向,確定各個鍵字段之間的數(shù)值轉(zhuǎn)換關系;
[0045]根據(jù)所確定的數(shù)值轉(zhuǎn)換關系,將不存在轉(zhuǎn)出關系的鍵字段,確定為核心鍵字段。
[0046]根據(jù)本發(fā)明的一種【具體實施方式】,所述數(shù)值收集模塊,具體用于:
[0047]僅對包含鍵字段的數(shù)據(jù)樣本進行抽樣。
[0048]根據(jù)本發(fā)明的一種【具體實施方式】,所述數(shù)值收集模塊,具體用于:
[0049]針對key-value格式的數(shù)據(jù)樣本,根據(jù)value的取值區(qū)間進行分類抽樣;
[0050]針對非key-value格式或value固定的數(shù)據(jù)樣本,使用全隨機的方式進行抽樣;
[0051]其中,所述key-value格式為鍵值對格式。
[0052]根據(jù)本發(fā)明的一種【具體實施方式】,所述測試數(shù)據(jù)生成模塊,具體用于:
[0053]將輸入數(shù)據(jù)樣本中非核心鍵字段數(shù)值轉(zhuǎn)換為核心鍵字段數(shù)值;
[0054]在原生核心鍵字段或轉(zhuǎn)換后的核心鍵字段中,查詢與備選數(shù)值集合元素相同的數(shù)值,進而將該數(shù)值所在的數(shù)據(jù)行作為查詢結果輸出。
[0055]應本發(fā)明實施例提供的技術方案,首先根據(jù)被測系統(tǒng)的整體輸入輸出架構,確定貫穿整個系統(tǒng)的核心鍵字段,根據(jù)該核心鍵字段分別在輸入數(shù)據(jù)、輸出數(shù)據(jù)以及中間數(shù)據(jù)樣本中進行抽樣,最后根據(jù)抽樣結果在輸入數(shù)據(jù)樣本中進一步選擇出測試數(shù)據(jù)。與現(xiàn)有的單文本抽樣方案相比,上述方案充分考慮到了測試對象的輸入、輸出及中間數(shù)據(jù)在整體上的相互關聯(lián),能夠有效避免測試數(shù)據(jù)無法關聯(lián)或者在測試過程中消失的問題。
【專利附圖】
【附圖說明】
[0056]為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術中的技術方案,下面將對實施例或現(xiàn)有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明中記載的一些實施例,對于本領域普通技術人員來講,還可以根據(jù)這些附圖獲得其他的附圖。
[0057]圖1為本發(fā)明實施例測試數(shù)據(jù)生成方法的一種流程圖;
[0058]圖2為本發(fā)明實施例被測系統(tǒng)數(shù)據(jù)轉(zhuǎn)換關系示意圖;
[0059]圖3為本發(fā)明實施例被測系統(tǒng)鍵字段轉(zhuǎn)換關系示意圖;
[0060]圖4為本發(fā)明實施例測試數(shù)據(jù)生成裝置的一種結構示意圖;
[0061]圖5為本發(fā)明實施例測試數(shù)據(jù)生成裝置鍵字段確定模塊的一種結構示意圖?!揪唧w實施方式】
[0062]對于一個被測系統(tǒng)而言,測試數(shù)據(jù)實際是用于輸入的數(shù)據(jù),在現(xiàn)有技術的實現(xiàn)方案中,通過對輸入數(shù)據(jù)的樣本進行抽樣來自動構成測試數(shù)據(jù)。但是這種方式并沒有考慮到多組數(shù)據(jù)之間的相關性,因此,在本發(fā)明的實施例中,首先對輸入數(shù)據(jù)、輸出數(shù)據(jù)和中間數(shù)據(jù)進行統(tǒng)一分析,然后根據(jù)分析結果對輸入數(shù)據(jù)樣本進行抽樣來構成測試數(shù)據(jù)。
[0063]首先對本發(fā)明實施例所提供的一種測試數(shù)據(jù)生成方法進行說明,該方法可以包括以下步驟:
[0064]獲取測試對象的相關數(shù)據(jù)樣本,分別確定每組數(shù)據(jù)樣本的鍵字段;所述相關數(shù)據(jù)包括:輸入數(shù)據(jù)、輸出數(shù)據(jù)以及中間數(shù)據(jù);
[0065]根據(jù)測試對象的數(shù)據(jù)轉(zhuǎn)換流程,確定鍵字段中的核心鍵字段;所述核心鍵字段為:字段數(shù)值無法轉(zhuǎn)換為其他鍵字段數(shù)值的鍵字段;
[0066]對相關數(shù)據(jù)樣本進行抽樣,提取抽樣結果中的鍵字段數(shù)值,如果是非核心鍵字段數(shù)值,則進一步轉(zhuǎn)換為核心鍵字段數(shù)值,將得到的所有核心鍵字段數(shù)值添加到備選數(shù)值集合中;
[0067]在輸入數(shù)據(jù)樣本中,查詢與備選數(shù)值集合元素相匹配的數(shù)據(jù),利用查詢結果構成測試數(shù)據(jù)。
[0068]上述測試數(shù)據(jù)生成方法,首先根據(jù)被測系統(tǒng)的整體輸入輸出架構,確定貫穿整個系統(tǒng)的核心鍵字段,根據(jù)該核心鍵字段分別在輸入數(shù)據(jù)、輸出數(shù)據(jù)以及中間數(shù)據(jù)樣本中進行抽樣,最后根據(jù)抽樣結果在輸入數(shù)據(jù)樣本中進一步選擇出測試數(shù)據(jù)。與現(xiàn)有的單文本抽樣方案相比,上述方案充分考慮到了輸入、輸出及中間數(shù)據(jù)的在整體上的相互關聯(lián),能夠有效避免測試數(shù)據(jù)無法關聯(lián)或者在測試過程中消失的問題。
[0069]為了使本領域技術人員更好地理解本發(fā)明中的技術方案,下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行詳細地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領域普通技術人員所獲得的所有其他實施例,都應當屬于本發(fā)明保護的范圍。
[0070]圖1所示,為本發(fā)明實施例所一種測試數(shù)據(jù)生成方法的流程圖,該方法可以包括以下步驟:
[0071]SlOl,獲取測試對象的相關數(shù)據(jù)樣本,分別確定每組數(shù)據(jù)樣本的鍵字段;
[0072]對于一個待測系統(tǒng)而言,其需要涉及到的相關數(shù)據(jù)包括輸入數(shù)據(jù)和輸出數(shù)據(jù),對于多輪次處理的系統(tǒng),還會進一步包括中間數(shù)據(jù)。在本發(fā)明的實施例中,需要對輸入數(shù)據(jù)、輸出數(shù)據(jù)和中間數(shù)據(jù)進行統(tǒng)一分析,然后根據(jù)分析結果對輸入數(shù)據(jù)樣本進行抽樣來構成測試數(shù)據(jù)。
[0073]按照一般的數(shù)據(jù)結構,都是以“行”為數(shù)據(jù)基本單元,一個數(shù)據(jù)單元也常稱為“一行數(shù)據(jù)”或“一條數(shù)據(jù)”;以“列”來區(qū)分每個數(shù)據(jù)單元的不同字段。其中,在一組數(shù)據(jù)中,可能會存在一個或多個列,利用該列對應的數(shù)值,可以對每行數(shù)據(jù)進行區(qū)分,其相應的字段稱為“鍵(key)字段”或“索引字段”,其他字段則用來描述key字段的各種屬性。
[0074]對于每一組相關數(shù)據(jù),最能夠表征該組數(shù)據(jù)含義的是key字段,不同數(shù)據(jù)的key字段可能相同也可能不同,從被測系統(tǒng)的全局來看,key字段的變化可以在很大程度上代表著數(shù)據(jù)在處理過程中的特征變化,因此本發(fā)明從數(shù)據(jù)key字段的角度對輸入/輸出/中間數(shù)據(jù)進行統(tǒng)一分析。
[0075]首先需要確定每組輸入/輸出/中間數(shù)據(jù)的key字段,在有些情況下,key字段是直接在數(shù)據(jù)定義中指定的,這種情況下可以直接識別出key字段,如果沒有可以直接識別的信息,則可以通過對數(shù)據(jù)各個字段的內(nèi)容分析來識別出key字段。在本發(fā)明的一種實施方式中,提供一種根據(jù)數(shù)據(jù)樣本字段內(nèi)容識別key字段的方式:
[0076]步驟SlOla:識別數(shù)據(jù)樣本每個字段的數(shù)值特征;
[0077]一般來說,對于一個字段而言,其具體字段值都應該是相同類型,可以識別字段的類型。如果識別結果表明:數(shù)據(jù)樣本某個字段的所有數(shù)值類型相同,那么可以直接確定這種類型就是該字段的數(shù)值特征。例如,如果識別出某個字段的所有數(shù)值都符合“時間”的格式,那么可以確定該字段數(shù)值特征為“time”。
[0078]有些情況下,一個字段中的數(shù)值可能涉及多種類型,具體原因可能是該字段本身屬于混合類型字段,例如有些字段中既允許出現(xiàn)“string (字符串)”,又允許出現(xiàn)“num (數(shù)值)”;也可能是該字段允許存在一些特殊值,例如“null (空值)”等等。對于這種情況,可以根據(jù)字段類型的統(tǒng)計結果確定該字段的數(shù)值特征:
[0079]I)如果數(shù)據(jù)樣本的列數(shù)固定,即每一行數(shù)據(jù)列數(shù)相同,則對于任一列,首先識別出每行的數(shù)值類型,例如識別結果包括typel、type2、type3......等等,然后判斷:
[0080]是否存在一種type x(x=l、2、3......),該type x類型的數(shù)值在所有數(shù)值中所占比
例大于Tl,如果是,則將type X確定為該列字段的數(shù)值特征。
`[0081]如果不存在滿足上述條件的type x,則進一步判斷是否存在一種或多種type y(y=l、2、3……),該type y類型的數(shù)值在所有數(shù)值中所占比例大于T2,如果是,則將所有滿足條件的type y類型確定為該列字段的數(shù)值特征。
[0082]其中,Tl、T2均為根據(jù)經(jīng)驗預設的閾值,從上述判斷邏輯可以得知:T1 > T2且Tl> 0.5o
[0083]舉例說明,假設對于某固定數(shù)據(jù)樣本的某列,識別出包括三種數(shù)值類型typel、type2、type3, Tl=0.9, T2=0.1,那么對于以下兩組數(shù)據(jù):
[0084]typel 比例 0.95
[0085]type2 比例 0.02
[0086]type3 比例 0.03
[0087]可以確定該字段的數(shù)值特征為typel。
[0088]typel 比例 0.5
[0089]type2 比例 0.05
[0090]type3 比例 0.45
[0091]可以確定該字段的數(shù)值特征為typel+type2。
[0092]2)如果數(shù)據(jù)樣本的列數(shù)不固定,則對于任一列,首先識別出每行的數(shù)值類型,例如識別結果包括typel、type2、type3......等等,然后判斷:
[0093]是否存在一種type x(x=l、2、3......),該type x類型的數(shù)值在所有數(shù)值中所占比
例大于T3,如果是,則將type x確定為該列字段的數(shù)值特征。
[0094]如果不存在滿足上述條件的type x,則放棄對該列字段進行數(shù)值特征識別。[0095]其中,T3為根據(jù)經(jīng)驗預設的閾值,從上述判斷邏輯可以得知:Τ3 > 0.5。
[0096]上述方法中,分別針對列數(shù)固定和列數(shù)不固定的數(shù)據(jù)樣本給出了字段數(shù)值識別方法,其中固定和非固定列數(shù)的區(qū)分主要是為了決定是否強定義列的類型,固定列數(shù)的數(shù)據(jù)樣本其每一列含義一般是確定的、非固定列數(shù)的數(shù)據(jù)樣本每一列的含義則是不確定的。
[0097]另外,根據(jù)具體的應用場景,有些數(shù)值類型的特征可能是重合的,這里需要進一步考慮兩方面的問題:首先,由于最終目的是識別key字段,因此在識別字段數(shù)值特征,應優(yōu)先匹配key字段特征,然后再匹配非key字段特征,在同一優(yōu)先級別下,根據(jù)大數(shù)法則進行識別。
[0098]例如,對于形如“123.131.31.131”的數(shù)值,根據(jù)預設的規(guī)則,可以識別為IP類型,也可以識別為SITE (站點)類型,還可以識別為string (字符串類型)。已知對于被測系統(tǒng),IP和SITE屬于key字段,因此優(yōu)先將字段數(shù)值識別為IP或SITE,然后根據(jù)IP和SITE類型的統(tǒng)計結果,以比例最高的類型作為進一步確定數(shù)值類型特征的依據(jù)。根據(jù)經(jīng)驗,在數(shù)據(jù)樣本足夠多的情況下,直接選取Tl=0.9、T3=0.9進行判決,就可以較好地滿足大數(shù)法則。當然,上述閾值的選取并不應理解為對本發(fā)明方案的限制。
[0099]步驟SlOlb:確定key字段;
[0100]對于功能確定的被測系統(tǒng),所涉及的key字段也是已知的,也就是說,對于識別出來的多種數(shù)值類型,可以直接區(qū)分出哪些屬于key字段的數(shù)值類型。
[0101]在步驟SlOla中,對于任一組數(shù)據(jù)樣本,可得到每個字段的數(shù)值特征識別結果,例如:
[0102]輸入數(shù)據(jù)1:字段 I (type2),字段 2 (typel),字段 3 (type2)`[0103]輸入數(shù)據(jù)2:字段 I (type2),字段 2 (type5),字段 3 (type3+type4)
[0104]中間數(shù)據(jù):字段I (typel),字段 2 (type2),字段 3 (type5);......[0105]如果在一組數(shù)據(jù)樣本中,僅出現(xiàn)一種鍵字段特征,則可以直接將該特征字段確定為該數(shù)據(jù)樣本的鍵字段;例如,已知typel和type2為key字段,則上述“輸入數(shù)據(jù)2”的key字段識別結果為type2 ;
[0106]如果在一組數(shù)據(jù)樣本中,出現(xiàn)多種鍵字段特征,則濾除特征重復出現(xiàn)的字段,將剩余的字段確定為該數(shù)據(jù)樣本的鍵字段。這是因為,key字段具有唯一標識的特性,如果某個符合key特征的字段在一組數(shù)據(jù)中多次出現(xiàn),那么這個字段只是起到描述其他key字段的作用,并不是真正的key字段。例如,已知type I和type2為key字段,貝U上述“輸入數(shù)據(jù)I”的key字段識別結果為typel (去除了重復的type2);“中間數(shù)據(jù)”的key字段識別結果為typel和type2兩種。
[0107]S102,根據(jù)測試對象的數(shù)據(jù)轉(zhuǎn)換流程,確定鍵字段中的核心鍵字段;
[0108]key字段可以用來表征一組數(shù)據(jù)的含義,在被測系統(tǒng)的數(shù)據(jù)處理過程中,數(shù)據(jù)的轉(zhuǎn)換必然也會伴隨著key字段的轉(zhuǎn)換,有些key字段之間,會存在著某種確定的轉(zhuǎn)換關系:利用這種轉(zhuǎn)換關系,能夠?qū)⒁环N字段的數(shù)值轉(zhuǎn)換為另一種字段的數(shù)值,例如,一種將“URL”轉(zhuǎn)換為“SITE”的規(guī)則如下:
[0109]SITE=substr(url, I, index(url, "/" )_1)
[0110]在本發(fā)明實施例中,對于確定的被測系統(tǒng),如果一種key字段A的數(shù)值無法轉(zhuǎn)換為其他key字段的數(shù)值,則定義key字段A為核心key字段。[0111]在有些情況下,核心key字段是直接在數(shù)據(jù)定義中指定的,這種情況下可以直接識別出核心key字段,如果沒有可供直接識別的信息,則可以根據(jù)被測系統(tǒng)的數(shù)據(jù)處理流程來分析出核心key字段。在本發(fā)明的一種實施方式中,根據(jù)數(shù)據(jù)處理流程識別核心key字段的方式:
[0112]S102a,根據(jù)測試對象的數(shù)據(jù)流方向,確定各個key字段之間的數(shù)值轉(zhuǎn)換關系;具體而言,通過分析程序的源代碼,可以提取出不同key字段之間的轉(zhuǎn)換規(guī)則。
[0113]S102b,根據(jù)所確定的數(shù)值轉(zhuǎn)換關系,將不存在轉(zhuǎn)出關系的鍵字段,確定為核心鍵字段。
[0114]具體而言,可以以所有的key字段為節(jié)點,key字段之間的轉(zhuǎn)換關系為邊作圖,得到一個關于“key字段”的有向圖,然后,提取出該圖中出度為O的節(jié)點,這些節(jié)點所對應的字段即為核心key字段。其中“出度為O”即對應于“不存在轉(zhuǎn)出關系”,在一個被測系統(tǒng)中,可能存在多個核心key字段,這些字段的數(shù)值不會再轉(zhuǎn)換為其他核心key字段的數(shù)值,而對于非核心key字段數(shù)值,必然可以通過某種方式最終轉(zhuǎn)換為核心key字段的數(shù)值。
[0115]S103,對相關數(shù)據(jù)樣本進行抽樣,提取抽樣結果中的鍵字段數(shù)值,如果是非核心鍵字段數(shù)值,則進一步轉(zhuǎn)換為核心鍵字段數(shù)值,將得到的所有核心鍵字段數(shù)值添加到備選數(shù)值集合中;
[0116]根據(jù)本發(fā)明實施例,在準備測試數(shù)據(jù)的過程中,不是僅對輸入數(shù)據(jù)樣本進行抽樣,而是對輸入數(shù)據(jù)、輸出數(shù)據(jù)、中間數(shù)據(jù)都進行抽樣,進而根據(jù)數(shù)據(jù)間的關聯(lián)關系,完成測試數(shù)據(jù)的準備。
[0117]首先,對于每個核心key字段,分別建立相應的核心key字段集合,這些集合中的元素后續(xù)將會用作生成測試數(shù)據(jù)的備選數(shù)值,因此也成為備選數(shù)值集合。
[0118]然后,對所有的輸入/輸出/中間數(shù)據(jù)分別進行抽樣,并且提取出抽樣結果中的key字段數(shù)值,此時可能出現(xiàn)兩種情況:
[0119]如果是核心key字段數(shù)值,則直接將數(shù)值添加到相應的核心key字段集合中;
[0120]如果是非核心key字段數(shù)值,則根據(jù)key字段之間的轉(zhuǎn)換關系,將是非核心key字段數(shù)值轉(zhuǎn)換為相應的核心key字段數(shù)值,然后將轉(zhuǎn)換后得到的數(shù)值添加到相應的核心key字段集合中。
[0121]在實際應用中,根據(jù)key字段的識別結果,有些數(shù)據(jù)本身可能是不存在key字段的,也就是說,這些數(shù)據(jù)和其他數(shù)據(jù)不存在關聯(lián)性,在準備測試數(shù)據(jù)時不需要特別考慮,因此,在本發(fā)明的一種實施方式中,對于不包含key字段的數(shù)據(jù)不必進行抽樣,也就是說,僅對那些包含鍵字段的數(shù)據(jù)樣本進行抽樣。
[0122]為了使測試更為充分,在本發(fā)明的一種優(yōu)選實施方式中,對于不同格式的數(shù)據(jù),可以采用不同的抽樣方式進行處理。
[0123]例如,對于普通的key-value (鍵值對)格式的數(shù)據(jù)樣本,可以采用分層抽樣的方式,也就是說,可以將value (取值)范圍劃分為若干區(qū)間,然后均勻在每個區(qū)間內(nèi)進行抽樣,從而保證測試的覆蓋面;而對于非key-value格式或value固定的數(shù)據(jù)樣本,每條數(shù)據(jù)的對于測試的意義是相似的,所以可以采用全隨機的方式進行抽樣。
[0124]S104,在輸入數(shù)據(jù)樣本中,查詢與備選數(shù)值集合元素相匹配的數(shù)據(jù),利用查詢結果構成測試數(shù)據(jù)。[0125]由于所需要的測試數(shù)據(jù)是輸入數(shù)據(jù),所以最終仍然需要從輸入數(shù)據(jù)樣本中來選擇,根據(jù)本發(fā)明實施例,在選擇測試數(shù)據(jù)時,根據(jù)之前得到的備選數(shù)值,從輸入數(shù)據(jù)樣本中來選擇用于測試的數(shù)據(jù)。
[0126]假設備選數(shù)值集合中含有元素A,則對于給定的輸入數(shù)據(jù)樣本,在數(shù)據(jù)樣本中,查詢相應的核心key字段取值為A的數(shù)據(jù),將這些數(shù)據(jù)挑選出來作為測試數(shù)據(jù)。
[0127]由于備選數(shù)值集合是基于核心key字段建立,集合中的元素都是核心key字段元素,因此,如果輸入數(shù)據(jù)樣本中存在非核心key字段,需要先將非核心鍵key字段數(shù)值轉(zhuǎn)換為核心key字段數(shù)值,然后進一步查詢是否有與集合元素相同的數(shù)值。
[0128]另外,可以理解的是,如果被測系統(tǒng)存在多個核心key字段,則相應存在多個備選數(shù)值集合,在選擇測試數(shù)據(jù)時,應該針對每個備選數(shù)值集合的元素在輸入數(shù)據(jù)中進行查詢;如果存在多組輸入數(shù)據(jù),則需要分別在每組輸入數(shù)據(jù)中進行查詢。
[0129]在上述方法中,首先確定貫穿整個系統(tǒng)的核心鍵字段,然后根據(jù)該核心鍵字段分別在輸入數(shù)據(jù)、輸出數(shù)據(jù)以及中間數(shù)據(jù)樣本中進行抽樣,最后根據(jù)抽樣結果在輸入數(shù)據(jù)樣本中進一步選擇出測試數(shù)據(jù)。也就是說,盡管是在不同的輸入數(shù)據(jù)樣本中分別選擇測試數(shù)據(jù),但是選擇出的測試數(shù)據(jù)之間是基于“key字段”之間建立關聯(lián)的,在系統(tǒng)的實際處理過程中,必然有數(shù)據(jù)之間能夠存在關聯(lián)關系,這些存在關聯(lián)的數(shù)據(jù)能夠?qū)Ρ粶y系統(tǒng)的處理邏輯進行全面有效的驗證。
[0130]下面結合一個完整的應用實例,對上述測試數(shù)據(jù)生成方法進行說明。
[0131]當前的被測系統(tǒng)功能是完成ip抓取成功率的計算,參見圖2所示,基本流程如下:
[0132]通過url (網(wǎng)絡鏈接)抓`取的日志記錄(url_list),統(tǒng)計站點級別的抓取狀態(tài)生成中間數(shù)據(jù)(site_list);
[0133]根據(jù)ip上的site列表(ip_site_list)以及中間數(shù)據(jù)(site_list),得出ip的抓取成功率(ip_list);
[0134]在上述系統(tǒng)中,存在的相關數(shù)據(jù)如下:
[0135]兩組輸入數(shù)據(jù):url_list和 ip_site_list ;
[0136]一組中間數(shù)據(jù):site_list ;
[0137]一組輸出數(shù)據(jù):ip_list ;
[0138]每組數(shù)據(jù)以文本文件的形式記錄,記錄數(shù)據(jù)格式示意如下:
[0139]url_list—網(wǎng)頁url抓取狀態(tài)列表:
[0140]NOTICE:11-2719:00:00:[CRAWL_L0G]CHK FAIL_N0RMAL 500
[0141]19 386 O 382 0 4 0 0 288 O www.forld.cn/?bd=Jp23_RgVX spider 47
[0142]ip_site_list一Ip 對應站點列表
[0143]-unanswered, tumblr.com 66.6.32.146 2 0 I 0 I 3 24 D/private D/random
[0144]D/day
[0145]site_list—站點級別抓取狀態(tài)列表:
[0146]www.forld.cn 15328157163
[0147]ip_list一Ip上的抓取成功比例:
[0148]66.6.32.1460.[0149]在上述數(shù)據(jù)格式示意中,每組數(shù)據(jù)僅給出一行數(shù)據(jù)的示意,根據(jù)現(xiàn)有的測試方法,由于輸入文件巨大,需要對輸入url_list, ip_site_list分別進行抽樣,而分別抽樣的結果,往往是最后沒有產(chǎn)出;因為抽樣的url和ip相互匹配的幾率很小,即使存在數(shù)據(jù)匹配也很難滿足測試數(shù)量級上的需求。而應用本發(fā)明的測試數(shù)據(jù)生成方法,可以有效解決該問題,結合前述的S101-S104,具體處理過程描述如下:
[0150]在S101,首先通過解析下列結構數(shù)據(jù)獲取文本列表以及文本關系:
[0151]J0B_0UTPUT[O]=${HDFS_M0D_PATH}/site_list
[0152]J0B_INPUT[0] = 〃${HDFS_DATA_PATH}/url_list/*/"
[0153]J0B_0UTPUT[1]=${HDFS_RECALL_PATH}/ip_list/
[0154]J0B_INPUT[1]="${HDFS_RECALL_IN_PATH}/ip_site_list/*/,${HDFS_M0D_PATH}/site_list"
[0155]獲取文件列表如下:url_list,ip_site_list, site_list, ip_list,并且能夠得到如圖3所示的數(shù)據(jù)轉(zhuǎn)換流程關系。
[0156]然后分別對每個文件的每個字段類型進行識別:針對本例的被測系統(tǒng),url、site、ip屬于key字段類型,這些特殊字段類型可以按照如下正則表達式進行識別:
[0157]url:/'['[: space: ] ] + V [' [: space: ] ] +$/)
[0158]site:/'['[: space: ]]+$/
[0159]ip:/([[:digit:]]+) \.([[:digit:]]+) \.([[:digit:]]+) \.([[:digit:]]+) $/
[0160]其他的字段類型time,num, string等的識別為屬于基礎識別,這里不再詳細描述。
[0161]識別結果如下:
[0162]url_list為固定列格式,各列類型如下:
[0163]NOTICE:time time[CRAWL_L0G]string string num num num numnum num num numnum num num url spider num
[0164]其中url為key字段;
[0165]site_list為固定列格式,各列類型如下:
[0166]site num num
[0167]其中site為key字段;
[0168]ip_list為固定列格式,各列類型如下:
[0169]ip float
[0170]其中ip為key字段;
[0171]ip_site_list為非固定格式,各列類型如下:
[0172]site ip num num num num num num num null
[0173]其中ip和site為key字段;
[0174]在S102,從識別出的三種key字段(url、ip和site)中進一步識別出核心key字段。通過分析程序代碼,可以找到url到site存在轉(zhuǎn)換關系如下:
[0175]URL — SITE site=substr (url, I, index (url, "/")-1)
[0176]進而可以做出如圖3所示key字段轉(zhuǎn)換關系圖,由于ip和site的節(jié)點的出度為0,因此可以確定ip和site為核心key字段,url為非核心key字段,其數(shù)值可以通過上述關系轉(zhuǎn)換為key字段site的數(shù)值。
[0177]在S103,分別對 url—list,ip—site—list,site—list,ip—list 四組數(shù)據(jù)進行抽樣。其中url—list和ip—site—list為非key-value格式,釆用全隨機抽樣方式;site—list和ip—list為key-value格式,釆用分層抽樣方式。抽樣結果示意如下(僅示出所關注的key字段數(shù)值,其他字段省略):
[0178]url—list: www.forld.cn/?bd=Jp23_RgVX (url 字段數(shù)值)
[0179]site—list: www.baidu.com (site 字段數(shù)值)
[0180]ip—list: 123.232.11.154 (ip 字段數(shù)值)
[0181]ip—site—list:-unanswered, tumblr.com (site 字段數(shù)值)
[0182]66.6.32.146 (ip 字段數(shù)值)
[0183]其中site和ip為核心key字段,分別建立site集合和ip集合。其中url—list和site—list對應site集合,ip—list對應ip集合,ip—site—list對應ip集合和site集
八
口 ο
[0184]“www.forld.cn/?bd=Jp23_RgVX”為非核心key字段(url)數(shù)值,根據(jù)規(guī)則轉(zhuǎn)換為核心 key 字段(site)數(shù)值為:www.forld.cn。
[0185]添加到site集合`的元素包括:
[0186]{www.forld.cn, www.baidu.com, -unanswered, tumblr.com}
[0187]添加到ip集合的元素包括:
[0188]{123.232.11.154,66.6.32.146}
[0189]在S104,分別從兩組輸入數(shù)據(jù)url_list和ip_site_list中選擇數(shù)據(jù)。
[0190]其中在url_list的選擇依據(jù)是:url字段值轉(zhuǎn)換為site數(shù)值后,取值等于某個site集合元素的數(shù)據(jù)。
[0191]在ip_site_list的選擇依據(jù)是:ip字段取值等于ip集合元素的數(shù)據(jù),或者site字段取值等于site集合元素的數(shù)據(jù)。
[0192]根據(jù)上述方法分別從url_list和ip_site_list中分別選擇的測試數(shù)據(jù),必然存在很多url和ip能夠相互匹配的數(shù)據(jù),這些相互匹配數(shù)據(jù)能夠在整個系統(tǒng)處理的全程進行流轉(zhuǎn),從而保證對系統(tǒng)的處理邏輯進行全面有效的驗證。
[0193]相應于上面的方法實施例,本發(fā)明還提供一種測試數(shù)據(jù)生成裝置,參見圖4所示,該裝置包括:鍵字段確定模塊110、核心鍵字段確定模塊120、數(shù)值收集模塊130和測試數(shù)據(jù)生成模塊140。
[0194]鍵字段確定模塊110,用于獲取測試對象的相關數(shù)據(jù)樣本,分別確定每組數(shù)據(jù)樣本的鍵字段;所述相關數(shù)據(jù)包括:輸入數(shù)據(jù)、輸出數(shù)據(jù)以及中間數(shù)據(jù);
[0195]對于一個待測系統(tǒng)而言,其需要涉及到的相關數(shù)據(jù)包括輸入數(shù)據(jù)和輸出數(shù)據(jù),對于多輪次處理的系統(tǒng),還會進一步包括中間數(shù)據(jù)。在本發(fā)明的實施例中,需要對輸入數(shù)據(jù)、輸出數(shù)據(jù)和中間數(shù)據(jù)進行統(tǒng)一分析,然后根據(jù)分析結果對輸入數(shù)據(jù)樣本進行抽樣來構成測試數(shù)據(jù)。
[0196]按照一般的數(shù)據(jù)結構,都是以“行”為數(shù)據(jù)基本單元,一個數(shù)據(jù)單元也常稱為“一行數(shù)據(jù)”或“一條數(shù)據(jù)”;以“列”來區(qū)分每個數(shù)據(jù)單元的不同字段。其中,在一組數(shù)據(jù)中,可能會存在一個或多個列,利用該列對應的數(shù)值,可以對每行數(shù)據(jù)進行區(qū)分,其相應的字段稱為“鍵(key)字段”或“索引字段”,其他字段則用來描述key字段的各種屬性。
[0197]對于每一組相關數(shù)據(jù),最能夠表征該組數(shù)據(jù)含義的是key字段,不同數(shù)據(jù)的key字段可能相同也可能不同,從被測系統(tǒng)的全局來看,key字段的變化可以在很大程度上代表著數(shù)據(jù)在處理過程中的特征變化,因此本發(fā)明從數(shù)據(jù)key字段的角度對輸入/輸出/中間數(shù)據(jù)進行統(tǒng)一分析。
[0198]首先需要確定每組輸入/輸出/中間數(shù)據(jù)的key字段,在有些情況下,key字段是直接在數(shù)據(jù)定義中指定的,這種情況下可以直接識別出key字段,如果沒有可以直接識別的信息,則可以通過對數(shù)據(jù)各個字段的內(nèi)容分析來識別出key字段。在本發(fā)明的一種實施方式中,提供一種根據(jù)數(shù)據(jù)樣本字段內(nèi)容識別key字段的方式,參見圖5所示,鍵字段確定模塊110可以進一步包括:數(shù)值特征識別子模塊121和鍵字段確定子模塊122。
[0199]數(shù)值特征識別子模塊121用于識別數(shù)據(jù)樣本每個字段的數(shù)值特征;
[0200]一般來說,對于一個字段而言,其具體字段值都應該是相同類型,可以識別字段的類型。如果識別結果表明:數(shù)據(jù)樣本某個字段的所有數(shù)值類型相同,那么可以直接確定這種類型就是該字段的數(shù)值特征。例如,如果識別出某個字段的所有數(shù)值都符合“時間”的格式,那么可以確定該字段數(shù)值特征為“time”。
[0201]有些情況下,一個字段中的數(shù)值可能涉及多種類型,具體原因可能是該字段本身屬于混合類型字段,例如有些字段中既允許出現(xiàn)“string (字符串)”,又允許出現(xiàn)“num (數(shù)值)”;也可能是該字段允許存在一些特殊值,例如“null (空值)”等等。對于這種情況,可以根據(jù)字段類型的統(tǒng)計結果確定該字段的數(shù)值特征:
[0202]I)如果數(shù)據(jù)樣本的列數(shù)固定,即每一行數(shù)據(jù)列數(shù)相同,則對于任一列,首先識別出每行的數(shù)值類型,例如識別結果包括typel、type2、type3......等等,然后判斷:
[0203]是否存在一種type x(x=l、2、3......),該type x類型的數(shù)值在所有數(shù)值中所占比
例大于Tl,如果是,則將type X確定為該列字段的數(shù)值特征。
[0204]如果不存在滿足上述條件的type x,則進一步判斷是否存在一種或多種type y(y=l、2、3……),該type y類型的數(shù)值在所有數(shù)值中所占比例大于T2,如果是,則將所有滿足條件的type y類型確定為該列字段的數(shù)值特征。
[0205]其中,Tl、T2均為根據(jù)經(jīng)驗預設的閾值,從上述判斷邏輯可以得知:T1 > T2且Tl> 0.5o
[0206]2)如果數(shù)據(jù)樣本的列數(shù)不固定,則對于任一列,首先識別出每行的數(shù)值類型,例如識別結果包括typel、type2、type3......等等,然后判斷:
[0207]是否存在一種type x(x=l、2、3......),該type x類型的數(shù)值在所有數(shù)值中所占比
例大于T3,如果是,則將type x確定為該列字段的數(shù)值特征。
[0208]如果不存在滿足上述條件的type x,則放棄對該列字段進行數(shù)值特征識別。
[0209]其中,T3為根據(jù)經(jīng)驗預設的閾值,從上述判斷邏輯可以得知:T3 > 0.5。
[0210]上述方案中,分別針對列數(shù)固定和列數(shù)不固定的數(shù)據(jù)樣本給出了字段數(shù)值識別方法,其中固定和非固定列數(shù) 的區(qū)分主要是為了決定是否強定義列的類型,固定列數(shù)的數(shù)據(jù)樣本其每一列含義一般是確定的、非固定列數(shù)的數(shù)據(jù)樣本每一列的含義則是不確定的。
[0211]另外,根據(jù)具體的應用場景,有些數(shù)值類型的特征可能是重合的,這里需要進一步考慮兩方面的問題:首先,由于最終目的是識別key字段,因此在識別字段數(shù)值特征,應優(yōu)先匹配key字段特征,然后再匹配非key字段特征,在同一優(yōu)先級別下,根據(jù)大數(shù)法則進行識別。
[0212]鍵字段確定子模塊122:用于確定數(shù)據(jù)樣本的鍵字段。
[0213]對于功能確定的被測系統(tǒng),所涉及的key字段也是已知的,也就是說,對于識別出來的多種數(shù)值類型,可以直接區(qū)分出哪些屬于key字段的數(shù)值類型。
[0214]如果在一組數(shù)據(jù)樣本中,僅出現(xiàn)一種鍵字段特征,則可以直接將該特征字段確定為該數(shù)據(jù)樣本的鍵字段;
[0215]如果在一組數(shù)據(jù)樣本中,出現(xiàn)多種鍵字段特征,則濾除特征重復出現(xiàn)的字段,將剩余的字段確定為該數(shù)據(jù)樣本的鍵字段。這是因為,key字段具有唯一標識的特性,如果某個符合key特征的字段在一組數(shù)據(jù)中多次出現(xiàn),那么這個字段只是起到描述其他key字段的作用,并不是真正的key字段。
[0216]核心鍵字段確定模塊120,用于根據(jù)測試對象的數(shù)據(jù)轉(zhuǎn)換流程,確定鍵字段中的核心鍵字段;
[0217]key字段可以用來表征一組數(shù)據(jù)的含義,在被測系統(tǒng)的數(shù)據(jù)處理過程中,數(shù)據(jù)的轉(zhuǎn)換必然也會伴隨著key字段的轉(zhuǎn)換,有些key字段之間,會存在著某種確定的轉(zhuǎn)換關系:利用這種轉(zhuǎn)換關系,能夠?qū)⒁环N字段的數(shù)值轉(zhuǎn)換為另一種字段的數(shù)值,例如,一種將“URL”轉(zhuǎn)換為“SITE”的規(guī)則如下:
[0218]SITE=substr (url, I, index (url, "/ " )_1)
[0219]在本發(fā)明實施例中,對于確定的被測系統(tǒng),如果一種key字段A的數(shù)值無法轉(zhuǎn)換為其他key字段的數(shù)值,則定義key字段A為核心key字段。
[0220]在有些情況下,核心key字段是直接在數(shù)據(jù)定義中指定的,這種情況下可以直接識別出核心key字段,如果沒有可供直接識別的信息,則可以根據(jù)被測系統(tǒng)的數(shù)據(jù)處理流程來分析出核心key字段。在本發(fā)明的一種實施方式中,核心鍵字段確定模塊120具體用于:
[0221]首先根據(jù)測試對象的數(shù)據(jù)流方向,確定各個key字段之間的數(shù)值轉(zhuǎn)換關系;具體而言,通過分析程序的源代碼,可以提取出不同key字段之間的轉(zhuǎn)換規(guī)則。
[0222]進而根據(jù)所確定的數(shù)值轉(zhuǎn)換關系,將不存在轉(zhuǎn)出關系的鍵字段,確定為核心鍵字段。具體而言,可以以所有的key字段為節(jié)點,key字段之間的轉(zhuǎn)換關系為邊作圖,得到一個關于“key字段”的有向圖,然后,提取出該圖中出度為O的節(jié)點,這些節(jié)點所對應的字段即為核心key字段。其中“出度為O”即對應于“不存在轉(zhuǎn)出關系”,在一個被測系統(tǒng)中,可能存在多個核心key字段,這些字段的數(shù)值不會再轉(zhuǎn)換為其他核心key字段的數(shù)值,而對于非核心key字段數(shù)值,必然可以通過某種方式最終轉(zhuǎn)換為核心key字段的數(shù)值。
[0223]數(shù)值收集模塊130,用于對相關數(shù)據(jù)樣本進行抽樣,提取抽樣結果中的鍵字段數(shù)值,如果是非核心鍵字段數(shù)值,則進一步轉(zhuǎn)換為核心鍵字段數(shù)值,將得到的所有核心鍵字段數(shù)值添加到備選數(shù)值集合中;
[0224]根據(jù)本發(fā)明實施例,在準備測試數(shù)據(jù)的過程中,不是僅對輸入數(shù)據(jù)樣本進行抽樣,而是對輸入數(shù)據(jù)、輸出數(shù)據(jù)、中間數(shù)據(jù)都進行抽樣,進而根據(jù)數(shù)據(jù)間的關聯(lián)關系,完成測試數(shù)據(jù)的準備。
[0225]首先,對于每個核心key字段,分別建立相應的核心key字段集合,這些集合中的元素后續(xù)將會用作生成測試數(shù)據(jù)的備選數(shù)值,因此也成為備選數(shù)值集合。
[0226]然后,對所有的輸入/輸出/中間數(shù)據(jù)分別進行抽樣,并且提取出抽樣結果中的key字段數(shù)值,此時可能出現(xiàn)兩種情況:
[0227]如果是核心key字段數(shù)值,則直接將數(shù)值添加到相應的核心key字段集合中;
[0228]如果是非核心key字段數(shù)值,則根據(jù)key字段之間的轉(zhuǎn)換關系,將是非核心key字段數(shù)值轉(zhuǎn)換為相應的核心key字段數(shù)值,然后將轉(zhuǎn)換后得到的數(shù)值添加到相應的核心key字段集合中。
[0229]在實際應用中,根據(jù)key字段的識別結果,有些數(shù)據(jù)本身可能是不存在key字段的,也就是說,這些數(shù)據(jù)和其他數(shù)據(jù)不存在關聯(lián)性,在準備測試數(shù)據(jù)時不需要特別考慮,因此,在本發(fā)明的一種實施方式中,對于不包含key字段的數(shù)據(jù)不必進行抽樣,也就是說,僅對那些包含鍵字段的數(shù)據(jù)樣本進行抽樣。
[0230]為了使測試更為充分,在本發(fā)明的一種優(yōu)選實施方式中,對于不同格式的數(shù)據(jù),可以采用不同的抽樣方式進行處理。
[0231]例如,對于普通的key-value (鍵值對)格式的數(shù)據(jù)樣本,可以采用分層抽樣的方式,也就是說,可以將value (取值)范圍劃分為若干區(qū)間,然后均勻在每個區(qū)間內(nèi)進行抽樣,從而保證測試的覆蓋面;而對于非key-value格式或value固定的數(shù)據(jù)樣本,每條數(shù)據(jù)的對于測試的意義是相似的,所以可以采用全隨機的方式進行抽樣。
[0232]測試數(shù)據(jù)生成模塊140,用于在輸入數(shù)據(jù)樣本中,查詢與備選數(shù)值集合元素相匹配的數(shù)據(jù),利用查詢結果構成測試數(shù)據(jù)。
[0233]由于所需要的測試數(shù)據(jù)是輸入數(shù)據(jù),所以最終仍然需要從輸入數(shù)據(jù)樣本中來選擇,根據(jù)本發(fā)明實施例,在選擇測試數(shù)據(jù)時,根據(jù)之前得到的備選數(shù)值,從輸入數(shù)據(jù)樣本中來選擇用于測試的數(shù)據(jù)。
[0234]假設備選數(shù)值集合中含有元素A,則對于給定的輸入數(shù)據(jù)樣本,在數(shù)據(jù)樣本中,查詢相應的核心key字段取值為A的數(shù)據(jù),將這些數(shù)據(jù)挑選出來作為測試數(shù)據(jù)。
[0235]由于備選數(shù)值集合是基于核心key字段建立,集合中的元素都是核心key字段元素,因此,如果輸入數(shù)據(jù)樣本中存在非核心key字段,需要先將非核心鍵key字段數(shù)值轉(zhuǎn)換為核心key字段數(shù)值,然后進一步查詢是否有與集合元素相同的數(shù)值。
[0236]另外,可以理解的是,如果被測系統(tǒng)存在多個核心key字段,則相應存在多個備選數(shù)值集合,在選擇測試數(shù)據(jù)時,應該針對每個備選數(shù)值集合的元素在輸入數(shù)據(jù)中進行查詢;如果存在多組輸入數(shù)據(jù),則需要分別在每組輸入數(shù)據(jù)中進行查詢。
[0237]在上述方案中,首先確定貫穿整個系統(tǒng)的核心鍵字段,然后根據(jù)該核心鍵字段分別在輸入數(shù)據(jù)、輸出數(shù)據(jù)以及中間數(shù)據(jù)樣本中進行抽樣,最后根據(jù)抽樣結果在輸入數(shù)據(jù)樣本中進一步選擇出測試數(shù)據(jù)。也就是說,盡管是在不同的輸入數(shù)據(jù)樣本中分別選擇測試數(shù)據(jù),但是選擇出的測試數(shù)據(jù)之間是基于“key字段”之間建立關聯(lián)的,在系統(tǒng)的實際處理過程中,必然有數(shù)據(jù)之間能夠存在關聯(lián)關系,這些存在關聯(lián)的數(shù)據(jù)能夠?qū)Ρ粶y系統(tǒng)的處理邏輯進行全面有效的驗證。
[0238]為了描述的方便,描述以上裝置時以功能分為各種模塊分別描述。當然,在實施本發(fā)明時可以把各模塊的功能在同一個或多個軟件和/或硬件中實現(xiàn)。
[0239]通過以上的實施方式的描述可知,本領域的技術人員可以清楚地了解到本發(fā)明可借助軟件加必需的通用硬件平臺的方式來實現(xiàn)?;谶@樣的理解,本發(fā)明的技術方案本質(zhì)上或者說對現(xiàn)有技術做出貢獻的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品可以存儲在存儲介質(zhì)中,如ROM/RAM、磁碟、光盤等,包括若干指令用以使得一臺計算機設備(可以是個人計算機,服務器,或者網(wǎng)絡設備等)執(zhí)行本發(fā)明各個實施例或者實施例的某些部分所述的方法。
[0240]本說明書中的各個實施例均采用遞進的方式描述,各個實施例之間相同相似的部分互相參見即可,每個實施例重點說明的都是與其他實施例的不同之處。尤其,對于裝置實施例而言,由于其基本相似于方法實施例,所以描述得比較簡單,相關之處參見方法實施例的部分說明即可。以上所描述的裝置實施例僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡單元上??梢愿鶕?jù)實際的需要選擇其中的部分或者全部模塊來實現(xiàn)本實施例方案的目的。本領域普通技術人員在不付出創(chuàng)造性勞動的情況下,即可以理解并實施。
[0241]以上所述僅是本發(fā)明的【具體實施方式】,應當指出,對于本【技術領域】的普通技術人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進和潤飾,這些改進和潤飾也應視為本發(fā)明的保護范圍。
【權利要求】
1.一種測試數(shù)據(jù)生成方法,其特征在于,該方法包括: 獲取測試對象的相關數(shù)據(jù)樣本,分別確定每組數(shù)據(jù)樣本的鍵字段;所述相關數(shù)據(jù)包括:輸入數(shù)據(jù)、輸出數(shù)據(jù)以及中間數(shù)據(jù); 根據(jù)測試對象的數(shù)據(jù)轉(zhuǎn)換流程,確定鍵字段中的核心鍵字段;所述核心鍵字段為:字段數(shù)值無法轉(zhuǎn)換為其他鍵字段數(shù)值的鍵字段; 對相關數(shù)據(jù)樣本進行抽樣,提取抽樣結果中的鍵字段數(shù)值,如果是非核心鍵字段數(shù)值,則進一步轉(zhuǎn)換為核心鍵字段數(shù)值,將得到的所有核心鍵字段數(shù)值添加到備選數(shù)值集合中;在輸入數(shù)據(jù)樣本中,查詢與備選數(shù)值集合元素相匹配的數(shù)據(jù),利用查詢結果構成測試數(shù)據(jù)。
2.根據(jù)權利要求1所述的方法,其特征在于,所述確定每組數(shù)據(jù)樣本的鍵字段,包括: 識別數(shù)據(jù)樣本每個字段的數(shù)值特征; 如果一組數(shù)據(jù)樣本中僅出現(xiàn)一種鍵字段特征,則將該特征字段確定為該數(shù)據(jù)樣本的鍵字段; 如果一組數(shù)據(jù)樣本中出現(xiàn)多種鍵字段特征,則濾除特征重復出現(xiàn)的字段,將剩余的字段確定為該數(shù)據(jù)樣本的鍵字段。
3.根據(jù)權利要求2所述的方法,其特征在于,所述識別數(shù)據(jù)樣本每個字段的數(shù)值特征,包括: 根據(jù)預設的規(guī)則,識別數(shù)據(jù)樣本每個字段的所涉及的數(shù)值類型; 針對固定列數(shù)的數(shù)據(jù)樣本,如果某列所涉及的某種數(shù)值類型比例大于預設的第一閾值,則將該類型確定為該列字段的數(shù)值特征;如果該列沒有大于第一閾值的數(shù)據(jù)類型,則將所有比例大于預設的第二閾值的數(shù)值`類型確定為該列字段的數(shù)值特征; 針對非固定列數(shù)的數(shù)據(jù)樣本,如果某列所涉及的某種數(shù)值類型比例大于預設的第三閾值,則將該類型確定為該列字段的數(shù)值特征;如果該列沒有比例大于第三閾值的數(shù)據(jù)類型,則放棄對該列字段的數(shù)值特征識別。
4.根據(jù)權利要求1所述的方法,其特征在于,所述根據(jù)測試對象的數(shù)據(jù)轉(zhuǎn)換流程,確定鍵字段中的核心鍵字段,包括: 根據(jù)測試對象的數(shù)據(jù)流方向,確定各個鍵字段之間的數(shù)值轉(zhuǎn)換關系; 根據(jù)所確定的數(shù)值轉(zhuǎn)換關系,將不存在轉(zhuǎn)出關系的鍵字段,確定為核心鍵字段。
5.根據(jù)權利要求1所述的方法,其特征在于,所述對相關數(shù)據(jù)樣本進行抽樣,包括: 僅對包含鍵字段的數(shù)據(jù)樣本進行抽樣。
6.根據(jù)權利要求1所述的方法,其特征在于,所述對相關數(shù)據(jù)樣本進行抽樣,包括: 針對key-value格式的數(shù)據(jù)樣本,根據(jù)value的取值區(qū)間進行分類抽樣; 針對非key-value格式或value固定的數(shù)據(jù)樣本,使用全隨機的方式進行抽樣; 其中,所述key-value格式為鍵值對格式。
7.根據(jù)權利要求1所述的方法,其特征在于,所述在輸入數(shù)據(jù)樣本中,查詢與備選數(shù)值集合元素相匹配的數(shù)據(jù),包括: 將輸入數(shù)據(jù)樣本中非核心鍵字段數(shù)值轉(zhuǎn)換為核心鍵字段數(shù)值; 在原生核心鍵字段或轉(zhuǎn)換后的核心鍵字段中,查詢與備選數(shù)值集合元素相同的數(shù)值,進而將該數(shù)值所在的數(shù)據(jù)行作為查詢結果輸出。
8.—種測試數(shù)據(jù)生成裝置,其特征在于,該裝置包括: 鍵字段確定模塊,用于獲取測試對象的相關數(shù)據(jù)樣本,分別確定每組數(shù)據(jù)樣本的鍵字段;所述相關數(shù)據(jù)包括:輸入數(shù)據(jù)、輸出數(shù)據(jù)以及中間數(shù)據(jù); 核心鍵字段確定模塊,用于根據(jù)測試對象的數(shù)據(jù)轉(zhuǎn)換流程,確定鍵字段中的核心鍵字段;所述核心鍵字段為:字段數(shù)值無法轉(zhuǎn)換為其他鍵字段數(shù)值的鍵字段; 數(shù)值收集模塊,用于對相關數(shù)據(jù)樣本進行抽樣,提取抽樣結果中的鍵字段數(shù)值,如果是非核心鍵字段數(shù)值,則進一步轉(zhuǎn)換為核心鍵字段數(shù)值,將得到的所有核心鍵字段數(shù)值添加到備選數(shù)值集合中; 測試數(shù)據(jù)生成模塊,用于在輸入數(shù)據(jù)樣本中,查詢與備選數(shù)值集合元素相匹配的數(shù)據(jù),利用查詢結果構成測試數(shù)據(jù)。
9.根據(jù)權利要求1所述8所述的裝置,其特征在于,所述鍵字段確定模塊,包括: 數(shù)值特征識別子模塊,用于識別數(shù)據(jù)樣本每個字段的數(shù)值特征; 鍵字段確定子模塊,用于:如果一組數(shù)據(jù)樣本中僅出現(xiàn)一種鍵字段特征,則將該特征字段確定為該數(shù)據(jù)樣本的鍵字段;如果一組數(shù)據(jù)樣本中出現(xiàn)多種鍵字段特征,則濾除特征重復出現(xiàn)的字段,將剩余的字段確定為該數(shù)據(jù)樣本的鍵字段。
10.根據(jù)權利要求9所述的裝置,其特征在于,所述數(shù)值特征識別子模塊,具體用于: 根據(jù)預設的規(guī)則,識別數(shù)據(jù)樣本每個字段的所涉及的數(shù)值類型; 針對固定列數(shù)的數(shù)據(jù)樣本,如果某列所涉及的某種數(shù)值類型比例大于預設的第一閾值,則將該類型確定為該列字段的數(shù)值特征;如果該列沒有大于第一閾值的數(shù)據(jù)類型,則將所有比例大于預設的第二閾值的數(shù)值`類型確定為該列字段的數(shù)值特征; 針對非固定列數(shù)的數(shù)據(jù)樣本,如果某列所涉及的某種數(shù)值類型比例大于預設的第三閾值,則將該類型確定為該列字段的數(shù)值特征;如果該列沒有比例大于第三閾值的數(shù)據(jù)類型,則放棄對該列字段的數(shù)值特征識別。
11.根據(jù)權利要求8所述的裝置,其特征在于,所述核心鍵字段確定模塊,具體用于: 根據(jù)測試對象的數(shù)據(jù)流方向,確定各個鍵字段之間的數(shù)值轉(zhuǎn)換關系; 根據(jù)所確定的數(shù)值轉(zhuǎn)換關系,將不存在轉(zhuǎn)出關系的鍵字段,確定為核心鍵字段。
12.根據(jù)權利要求8所述的裝置,其特征在于,所述數(shù)值收集模塊,具體用于: 僅對包含鍵字段的數(shù)據(jù)樣本進行抽樣。
13.根據(jù)權利要求8所述的裝置,其特征在于,所述數(shù)值收集模塊,具體用于: 針對key-value格式的數(shù)據(jù)樣本,根據(jù)value的取值區(qū)間進行分類抽樣; 針對非key-value格式或value固定的數(shù)據(jù)樣本,使用全隨機的方式進行抽樣; 其中,所述key-value格式為鍵值對格式。
14.根據(jù)權利要求8所述的裝置,其特征在于,所述測試數(shù)據(jù)生成模塊,具體用于: 將輸入數(shù)據(jù)樣本中非核心鍵字段數(shù)值轉(zhuǎn)換為核心鍵字段數(shù)值; 在原生核心鍵字段或轉(zhuǎn)換后的核心鍵字段中,查詢與備選數(shù)值集合元素相同的數(shù)值,進而將該數(shù)值所在的數(shù)據(jù)行作為查詢結果輸出。
【文檔編號】G06F11/36GK103870381SQ201210527850
【公開日】2014年6月18日 申請日期:2012年12月10日 優(yōu)先權日:2012年12月10日
【發(fā)明者】趙輝, 徐健, 李正文, 王昭, 劉哲文 申請人:百度在線網(wǎng)絡技術(北京)有限公司