国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種etl測試的方法和裝置的制作方法

      文檔序號:6429871閱讀:152來源:國知局

      專利名稱::一種etl測試的方法和裝置的制作方法
      技術(shù)領(lǐng)域
      :本申請涉及數(shù)據(jù)倉庫分析的
      技術(shù)領(lǐng)域
      ,尤其涉及一種ETL測試的方法和裝置。
      背景技術(shù)
      :數(shù)據(jù)倉庫是一個獨立的數(shù)據(jù)環(huán)境,需要通過抽取過程將數(shù)據(jù)從聯(lián)機事務(wù)處理環(huán)境、外部數(shù)據(jù)源和脫機的數(shù)據(jù)存儲介質(zhì)導(dǎo)入到數(shù)據(jù)倉庫中。它的目的是建立結(jié)構(gòu)化的數(shù)據(jù)存儲空間,將不同數(shù)據(jù)源的數(shù)據(jù)分離出來,形成統(tǒng)一、有效的數(shù)據(jù)集,并最終加工、整合成所需要的數(shù)據(jù)。ETL是數(shù)據(jù)抽取(Extract)、清洗(Cleaning)、轉(zhuǎn)換(Transform)、裝載(Load)的過程。是構(gòu)建數(shù)據(jù)倉庫的重要一環(huán),用戶從數(shù)據(jù)源抽取出所需的數(shù)據(jù),經(jīng)過數(shù)據(jù)清洗,最終按照預(yù)先定義好的數(shù)據(jù)倉庫模型,將數(shù)據(jù)加載到數(shù)據(jù)倉庫中去。在ETL的測試過程中,測試對象通常由多個任務(wù)調(diào)度形成,或者,由單個任務(wù)調(diào)度形成,但通常單個任務(wù)中包含有一個或多個百行級代碼。采用現(xiàn)有技術(shù),ETL的測試過程通??梢园ㄒ韵虏襟E步驟I、源數(shù)據(jù)與目標數(shù)據(jù)的數(shù)據(jù)匹配(mapping)分析分析依賴的源表,目標表以及相互的依賴關(guān)系;步驟2、設(shè)計測試用例將存儲過程看成一個整體,關(guān)注輸入輸出,根據(jù)業(yè)務(wù)功能設(shè)計測試用例;步驟3、數(shù)據(jù)準備準備每個依賴的源表的數(shù)據(jù);步驟4、進行結(jié)果驗證通過源表與目標表兩表的比對進行結(jié)果驗證。在ETL的測試過程中,測試對象是由多個任務(wù)調(diào)度組成的,或者單個任務(wù)是一個或多個百行級或千行級代碼組成,其數(shù)據(jù)量十分龐大,并且多個源表之間相互關(guān)聯(lián)。采用現(xiàn)有技術(shù),將測試對象作為一個整體進行測試,將使得測試過程非常復(fù)雜,任務(wù)量龐大,其中一個小細節(jié)出現(xiàn)問題,整個測試結(jié)果就會出錯,就需要重新進行測試,因而使得整個ETL的測試效率非常低。因此,目前需要本領(lǐng)域技術(shù)人員迫切解決的一個技術(shù)問題就是提供一種ETL測試機制,用以降低ETL測試對象的復(fù)雜度,提高測試效率。
      發(fā)明內(nèi)容本申請所要解決的技術(shù)問題是提供一種ETL測試的方法,基于本申請,能夠降低ETL測試對象的復(fù)雜度,提高測試效率。相應(yīng)的,本申請還提供了ETL測試的裝置,用以保證上述方法在實際中的實現(xiàn)及應(yīng)用。為了解決上述問題,本申請公開了一種ETL測試方法,包括按照預(yù)置規(guī)則將ETL測試對象拆分為測試子對象;針對所述測試子對象逐個進行測試。優(yōu)選的,所述按照預(yù)置規(guī)則將ETL測試對象拆分為測試子對象的步驟包括獲取ETL測試對象中可拆分的測試子對象的個數(shù);依據(jù)所述可拆分的測試子對象個數(shù),將ETL測試對象拆分為相應(yīng)個數(shù)的測試子對象。優(yōu)選的,所述獲取ETL測試對象中可拆分的測試子對象的個數(shù)的步驟進一步包括針對ETL測試對象中所包含的各個業(yè)務(wù)進行分割,獲得可拆分的測試子對象個數(shù);或者,針對ETL測試對象中所包含的各個功能進行分割,獲得可拆分的測試子對象個數(shù)。優(yōu)選的,所述獲取ETL測試對象中可拆分的測試子對象的個數(shù)的步驟包括獲取所述ETL測試對象中存儲過程的臨時表和目標表信息;·計算所述臨時表和一個目標表的數(shù)量之和,作為可拆分的測試子對象個數(shù)。優(yōu)選的,所述依據(jù)可拆分的測試子對象個數(shù),將ETL測試對象拆分為測試子對象的步驟包括在ETL測試對象對應(yīng)的代碼中,提取插入相同臨時表的代碼段;合并所述插入相同臨時表的多個代碼段,組成測試子對象。優(yōu)選的,所述ETL測試對象對應(yīng)的代碼為,ETL測試對象的代碼中匹配Insert至Select的代碼段,所述測試子對象為Insert至Select代碼段組成的SQL腳本。優(yōu)選的,所述針對測試子對象逐個進行測試的步驟包括針對所述測試子對象準備測試用例和測試數(shù)據(jù);執(zhí)行采用所述測試數(shù)據(jù)的測試用例,獲得測試結(jié)果。優(yōu)選的,所述針對測試子對象準備測試用例和測試數(shù)據(jù)的步驟包括根據(jù)測試目的編寫測試用例;獲取當(dāng)前測試子對象所依賴的源表信息。優(yōu)選的,所述的方法,還包括封裝所述測試子對象,并批量執(zhí)行所述測試子對象對應(yīng)的測試用例,獲得所述ETL測試對象的測試結(jié)果。本申請還提供了一種ETL測試的裝置,包括拆分模塊,用于按照預(yù)置規(guī)則將ETL測試對象拆分為測試子對象;測試模塊,用于針對所述測試子對象逐個進行測試。與現(xiàn)有技術(shù)相比,本申請具有以下優(yōu)點相對于現(xiàn)有技術(shù)而言,本申請把將ETL測試對象按照預(yù)置規(guī)則拆分為測試子對象,然后針對所述測試子對象逐個進行測試,使得復(fù)雜的測試對象簡化,降低測試復(fù)雜度,提高了測試效率。針對一個個的測試子對象進行逐個測試使得單次測試的范圍縮小,精準定位測試范圍,具有相互獨立性。各個測試子對象具有獨立性,可以單獨進行測試,在測試子對象依賴點可以進行打樁。由于單個測試子對象測試范圍小而且明確、簡單,一旦出現(xiàn)問題后,能快速定位到問題所在。同時在測試數(shù)據(jù)準備的時候,可以避免造最源頭的表數(shù)據(jù),而根據(jù)業(yè)務(wù),進行簡單的臨時表數(shù)據(jù)的構(gòu)造,減少數(shù)據(jù)構(gòu)造的成本。圖I是本申請的一種ETL測試方法實施例I的流程圖;圖2是本申請的一種ETL測試方法實施例2的流程圖;圖3是本申請的一種ETL測試裝置實施例I的結(jié)構(gòu)框圖;圖4是本申請的一種ETL測試裝置實施例2的結(jié)構(gòu)框圖。具體實施例方式為使本申請的上述目的、特征和優(yōu)點能夠更加明顯易懂,下面結(jié)合附圖和具體實施方式對本申請作進一步詳細的說明。為使本領(lǐng)域技術(shù)人員更好地理解本申請,以下以一般的項目情況來說明ETL測試的基本流程。ETL測試一般包括以下幾個環(huán)節(jié)需求分析、測試分析、標準數(shù)據(jù)構(gòu)建、測試方法、測試用例設(shè)計、測試結(jié)果驗證和發(fā)布。(I)、需求分析在這個環(huán)節(jié)需要熟悉業(yè)務(wù)流程和業(yè)務(wù)規(guī)則。⑵、測試分析這個環(huán)節(jié)需要確定各個測試點。ETL測試主要包括ETL常規(guī)檢查和業(yè)務(wù)邏輯檢查。常規(guī)檢查包括1、ETL腳本是否有運行錯誤,腳本運行時間(看執(zhí)行計劃);2、ETL腳本的錯誤處理機制是否完整(代碼review);3、ETL腳本是否支持回滾。業(yè)務(wù)邏輯檢查包括I、數(shù)據(jù)量的檢查。核對記錄數(shù)是否和預(yù)期一致;2、唯一'丨生檢查,主要查看主鍵是否重復(fù)(cookie_id,member_id是否重復(fù));3、業(yè)務(wù)字段轉(zhuǎn)換正確性檢查,查看指標計算是否正確,可以通過抽樣檢查,將源表和目標表各取一定數(shù)量記錄,判斷字段映射是否正確(映射字段),還有指標計算是否正確(指標計算字段);4、隨機性驗證(隨機取幾條數(shù)據(jù),看是否有亂碼,異常數(shù)據(jù)等)。測試分析中還需要分析ETL測試的測試重點和測試范圍,針對項目中的關(guān)鍵業(yè)務(wù),將復(fù)雜邏輯部分作為測試重點,并針對測試對象按每個指標設(shè)計用例。同時還需分析源表,理清源表之間的關(guān)聯(lián)關(guān)系,分析目標表,根據(jù)需求分析出源表與目標表以及之間的mapping關(guān)系,解析出業(yè)務(wù)的數(shù)據(jù)流圖。⑶、測試方法測試方法是基于查詢的測試,預(yù)期結(jié)果基于sql來展現(xiàn),做到數(shù)據(jù)變化,結(jié)果不變。另外便于回歸,測試策略采用增量測試即逐步提交測試。這個過程中需要大量用到臨時表。(4)、標準數(shù)據(jù)集構(gòu)建標準數(shù)據(jù)集構(gòu)建分兩個方面,一個方面是直接抽取線上的數(shù)據(jù),另一個方面是用腳本造異常數(shù)據(jù)。利用數(shù)據(jù)庫連接(dblink)抽取線上的數(shù)據(jù)。抽取線上數(shù)據(jù)時,需要注意,測試數(shù)據(jù)的全面性。即測試數(shù)據(jù)全面覆蓋。比如性別(sex)字段,在抽取線上數(shù)據(jù)時,需要抽取到男(male)、女(female)情況,而不能僅僅是male或female,這樣測試數(shù)據(jù)就會缺失。對于有關(guān)聯(lián)的表進行數(shù)據(jù)抽取時,可以先抽取主表,然后根據(jù)主表的數(shù)據(jù)有條件的抽取子表。造異常數(shù)據(jù),異常數(shù)據(jù)可以從下面幾個方面進行考慮字段類型、字段長度、空值、業(yè)務(wù)異常值、唯一約束值。(5)、測試用例設(shè)計測試用例可以單獨設(shè)計,也可以采用調(diào)度的思想進行設(shè)計,采用調(diào)度方法進行設(shè)計時,能一次驗證多個用例,另外也方便回歸。如例,總調(diào)腳本為CREATEORREPLACEPACKAGEBODYPKGKPITCISPROCEDURESCHEDULER^*parameter:*authoerXIANGMIN.MENGXM*time2009-6-26氺P—DATEINDATEDEFAULTTRUNC(SYSDATE))ISV—DATEDATE:=TRUNC(PDATE);BEGINDELETEFROMtest—mapWHEREyyyymmdd=v—date;COMMIT;--調(diào)度之前先清空測試表REF—KPI—TC—001(v—date);--用例IREF—KPI—TC—002(v—date);--用例2END;ENDPKGKPITC;測試用例I為CREATEORREPLACEPROCEDUREREF—KPI—TC—001(P—DATEINDATEDEFAULTTRUNC(SYSDATE))ISVidNUMBER;V—DATEDATE:=TRUNC(PDATE);BEGINSELECTa.idintov—idFROMsrca;INSERTINTOtest—map(YYYYMMDD,id,x)VALUES(v_date,v_id,x);COMMIT;END;(6)、測試結(jié)果驗證測試結(jié)果驗證包括兩步第一步先驗證記錄數(shù)是否一致,如果記錄數(shù)不一致,則一定存在問題,檢查問題,找出原因。第二步在記錄數(shù)一致的情況下,檢查值是否正確。具體可以采用兩種方法實現(xiàn)方法I:用minusSELECT*FR0Mtarget_aMINUSSELECT*FR0Mtest—map;值得注意的是,此處一定要調(diào)換2個表的位置進行比較。Minus函數(shù)在進行比較時,以第一張表為準,找出第一張表中與第二張表不一致的地方。即找出sumdtO表中與map表不一致的結(jié)果。方法2:寫腳本進行驗證。以上是已有技術(shù)中ETL測試采用的一般過程,這個過程中存在以下的問題I、存在分支遺漏風(fēng)險,以上的測試過程是將一個或者多個存儲過程看成一個黑盒,無法關(guān)注內(nèi)部的實現(xiàn)邏輯,可能會存在分支遺漏。比如存儲過程中有條件判斷ifelse,不了解內(nèi)部實現(xiàn)無法完全覆蓋所有分支。2、數(shù)據(jù)準備復(fù)雜,ETL存儲過程一般會涉及一到η個源表,進行標準數(shù)據(jù)集構(gòu)建時,需要一次性準備好η個表的數(shù)據(jù),這η個表的數(shù)據(jù)可能在存儲過程的最后幾個步驟才用至IJ,過程比較長,如果源表之間有主外鍵關(guān)系,會進一步增加數(shù)據(jù)準備的復(fù)雜度,且易出錯。3、排查問題困難,將測試對象看成一個整體,一旦出現(xiàn)Bug,很難在第一時間定位有問題的代碼,需要斷點調(diào)試,一行一行代碼的排查,如果代碼行多,排查起來會比較費時間。4、無法針對測試重點進行測試,ETL測試中有一些關(guān)鍵項目和復(fù)雜邏輯部分是需要作為測試重點的,比如取toplOO的記錄數(shù),排序是個測試重點,存儲過程在最后一步進行IOwnum的toplOO排序,采用現(xiàn)有的測試方法,則需要從源頭造數(shù)據(jù)。5、Bug驗證范圍被放大,采用現(xiàn)有技術(shù)進行測試,開發(fā)修復(fù)Bug后測試人員無法知道具體修改了哪些代碼,且因為采用的是整體測試,無法僅僅針對修改的部分進行驗證,而是需要重新回歸,放大了測試范圍。針對上述問題,本專利申請人創(chuàng)造性的提出本申請的核心構(gòu)思為,將ETL測試對象按照預(yù)置規(guī)則拆分為測試子對象,然后針對所述測試子對象逐個進行測試,從而降低ETL測試對象的復(fù)雜度,提高測試效率。參照圖1,示出了本申請ETL測試的方法實施例I的流程圖,具體可以包括以下步驟步驟101、按照預(yù)置規(guī)則將ETL測試對象拆分為測試子對象。將ETL測試對象按照預(yù)置規(guī)則拆分為測試子對象,使得復(fù)雜的測試對象簡化,降低測試復(fù)雜度。ETL測試對象如下例CREATEORREPLACEPROCEDURERef(p—dateindate)Begin...insertintotable—tempOQselecta.*fromtableOla;insertintotabletempI()selecta.*fromtable—tempOa;insertintotabletargetOIselecta.*fromtable—tempi;在本申請的一種優(yōu)選的實施例中,所述步驟101可以包括子步驟S11、獲取ETL測試對象中可拆分的測試子對象的個數(shù)。該步驟是通過對測試對象進行分析,設(shè)計可拆分的測試子對象的個數(shù)。在本申請的一種優(yōu)選的實施例中,所述子步驟Sll可以包括子步驟S11-1、針對ETL測試對象中所包含的各個業(yè)務(wù)進行分割,獲得可拆分的測試子對象個數(shù);或者,子步驟S11-2、針對ETL測試對象中所包含的各個功能進行分割,獲得可拆分的測試子對象個數(shù)。ETL測試對象是完成對數(shù)據(jù)抽取、轉(zhuǎn)換加工和裝載的過程,其中包含著能實現(xiàn)其業(yè)務(wù)或功能的多個模塊,設(shè)計測試子對象個數(shù)很關(guān)鍵,測試子對象的個數(shù)不是越多越好,在具體的實現(xiàn)中可以針對測試對象進行的功能分割,分割出來的每個模塊稱為一個測試子對象;或者針對測試對象進行的業(yè)務(wù)分割,分割出來的每個模塊稱為一個測試子對象。每個測試子對象對應(yīng)實現(xiàn)一定的功能或業(yè)務(wù)。例如,任務(wù)A由3個子任務(wù)組成,每個子任務(wù)對應(yīng)完成一個功能,此時可以將任務(wù)A的測試拆分成3個測試子對象。子步驟S12、依據(jù)所述可拆分的測試子對象個數(shù),將ETL測試對象拆分為相應(yīng)個數(shù)的測試子對象。在本申請的一種優(yōu)選的實施例中,所述子步驟S12可以包括子步驟S12-1、在ETL測試對象對應(yīng)的代碼中,提取插入相同臨時表的代碼段;子步驟S12-2、合并所述插入相同臨時表的多個代碼段,組成測試子對象。在具體的實現(xiàn)中,所述ETL測試對象對應(yīng)的代碼可以為,ETL測試對象的代碼中匹配Insert至Select的代碼段,所述測試子對象可以為Insert至Select代碼段組成的SQL腳本。如步驟101中的例子,按照業(yè)務(wù)或功能對其進行分割,可以分為三個測試子對象,將匹配Insert至Select的代碼段作為ETL測試對象對應(yīng)的代碼,在對應(yīng)的代碼中,有兩個不同的臨時表tempO、tempi以及一個目標表targetOl,將各個臨時表對應(yīng)的代碼段提取出來,再將各個代碼段進行合并,稱之為一個測試子對象,具體為將代碼中多個inserttempO表的代碼段進行合并,稱為測試子對象1,將代碼中多個inserttempi表的代碼段進行合并,稱為測試子對象2,剩余的代碼段中插入目標表,將這些代碼段進行合并,稱為測試子對象3。各個測試子對象表現(xiàn)為insert至select代碼段組成的SQL腳本,如下所示。測試子對象I:insertintotable_tempO()selecta.*fromtableOla;測試子對象2:insertintotable_templ()selecta.*fromtable_temp0a;測試子對象3:insertintotable_target01selecta.*fromtable_templ;在實際應(yīng)用中,若ETL測試對象比較復(fù)雜,進行一次拆分后,各個測試子對象仍然比較龐大,則可以對測試子對象進行再一次或者更多次的拆分,本申請在此并不作限制。例如,將ETL測試對象拆分為測試子對象I、測試子對象2和測試子對象3,可以再將測試子對象I拆分為測試子對象I.I、測試子對象I.2和測試子對象I.3。進行拆分的時候需要注意的是,當(dāng)存在某幾個測試子對象之間是深度依賴關(guān)系時,在這種情況下需要把這幾個測試子對象當(dāng)成整體來進行測試。步驟102、針對所述測試子對象逐個進行測試。在本申請的一種優(yōu)選的實施例中,步驟102可以包括子步驟S31、針對所述測試子對象準備測試用例和測試數(shù)據(jù)。測試用例和測試數(shù)據(jù)是用來完成對測試子對象的測試。在本申請的一種優(yōu)選的實施例中,子步驟S31可以包括子步驟S31-1、根據(jù)測試目的編寫測試用例。測試目的主要包括常規(guī)檢查和業(yè)務(wù)邏輯檢查。例如,唯一性檢查,業(yè)務(wù)字段轉(zhuǎn)換正確性檢查,數(shù)據(jù)量的檢查等等。在具體的實現(xiàn)中可以通過UE工具或者記事本編寫測試用例,測試用例以sql的形式展現(xiàn)。例如設(shè)計測試子對象I的測試用例測試用例I:唯一性檢查Selectcount(0)fromtable_temp0agroupbya.idhavingcount(0)>I;測試用例2:指標檢查Insertintoresultselectid,sum(a.gmv)asgmvfromtabIeOIagroupbya.id子步驟S31-2、獲取當(dāng)前測試子對象所依賴的源表信息。具體的實現(xiàn)中,可以直接通過sql語句進行數(shù)據(jù)準備。如insertintotestable(a,b)values(a,b);或者,可以編寫存儲過程或java程序來實現(xiàn),如寫循環(huán)實現(xiàn)某幾個字段的迪卡爾集、賦值等,生成SQL語句,來實現(xiàn)數(shù)據(jù)準備,此處準備的數(shù)據(jù)僅僅是用于單個測試子對象的測試數(shù)據(jù),構(gòu)造比較簡單。例如分析出測試子對象I依賴的源表是tableOl,所以數(shù)據(jù)準備針對tableOl數(shù)據(jù)準備腳本InsertintotableOl(id,gmv)values(I,200);InsertintotableOl(id,gmv)values(2,300);子步驟S32、執(zhí)行采用所述測試數(shù)據(jù)的測試用例,獲得測試結(jié)果。將所述測試數(shù)據(jù)代入到測試用例中,執(zhí)行測試用例,檢查測試用例的運行結(jié)果,這樣便完成了對應(yīng)的測試子對象的測試。具體的實現(xiàn)中,檢查測試用例的運行結(jié)果可以用如下兩種方法I、直接比對。通過數(shù)據(jù)庫的minus函數(shù)檢查源表a與目標表b每個字段的值是否相等。如Selectcoll,col2fromaminusselectcoll,col2fromb。2、編寫存儲過程或者java程序來實現(xiàn)。如for循環(huán)源表a與目標表b的記錄數(shù),逐個字段進行比對。如上例,在sql環(huán)境中執(zhí)行測試用例I:SQL>Selectcount(0)fromtable_temp0agroupbya.idhavingcount(0)>I;檢查運行結(jié)果Ifcount(0)<=0則測試用例通過。接下來,在sql環(huán)境中執(zhí)行測試用例2SQL>Insertintoresultselectid,sum(a.gmv)asgmvfromtableOlagroupbya.id檢查運行結(jié)果selecta.id,a.gmvfromresultaminusselectb.id,b.gmvfromtable_temp0b這樣便得到了測試子對象的測試結(jié)果,對所有測試子對象進行檢測便可獲得ETL測試對象的測試結(jié)果。各個測試對象相互獨立,一旦出現(xiàn)問題,先查找到問題在哪個測試子對象上,然后對單個出問題的測試子對象重新測試即可;若要對重點的功能模塊進行測試,可以提取相應(yīng)的測試子對象,然后針對測試子對象進行測試。參照圖2,示出了本申請ETL測試的方法實施例2的流程圖,具體可以包括以下步驟步驟201、按照預(yù)置規(guī)則將ETL測試對象拆分為測試子對象;在本申請的一種優(yōu)選的實施例中,步驟201可以包括子步驟S41、獲取ETL測試對象中可拆分的測試子對象的個數(shù);子步驟S42、依據(jù)所述可拆分的測試子對象個數(shù),將ETL測試對象拆分為相應(yīng)個數(shù)的測試子對象。在本申請的一種優(yōu)選的實施例中,子步驟S41可以包括子步驟S41-1、獲取所述ETL測試對象中存儲過程的臨時表和目標表信息;如上例的ETL測試對象CREATEORREPLACEPROCEDURERef(p—dateindate)Begin...insertintotabletemp0()selecta.*fromtableOla;insertintotabletempI()selecta.*fromtable—tempOa;insertintotabletargetOIselecta.*fromtable—tempi;其中,包括兩個臨時表tempO和tempi,—個目標表targetOI。子步驟S41-2、計算所述臨時表和一個目標表的數(shù)量之和,作為可拆分的測試子對象個數(shù)。如上例,測試對象中temp表的個數(shù)為2,則臨時表數(shù)量加上I個目標表的數(shù)量為3,故可拆分的測試子對象個數(shù)的個數(shù)為3。步驟202、針對所述測試子對象逐個進行測試。步驟203、封裝所述測試子對象,并批量執(zhí)行所述測試子對象對應(yīng)的測試用例,獲得所述ETL測試對象的測試結(jié)果。測試子對象測試后可以再進行整體測試也叫做集成測試,將根據(jù)上述拆分方法生成的測試子對象封裝到一個sql文件中,在數(shù)據(jù)庫環(huán)境中批量執(zhí)行sql組成的測試用例,完成整體測試。綜上所述,本申請?zhí)峁┝艘环NETL測試的方法,通過將ETL測試對象按照預(yù)置規(guī)則拆分為測試子對象,然后針對所述測試子對象逐個進行測試,使得復(fù)雜的測試對象簡化,降低測試復(fù)雜度,提高了測試效率。針對一個個的測試子對象進行逐個測試,這不但可縮小得單次測試的范圍,而且還可以精準定位測試范圍,測試子對象在被測試的過程中具有相互獨立性。并且各個測試子對象具有獨立性,可以單獨進行測試,在測試子對象依賴點可以進行打樁。單個測試子對象測試范圍小而且明確、簡單,一旦出現(xiàn)問題后,能快速定位到問題所在。同時在測試數(shù)據(jù)準備的時候,可以避免造最源頭的表數(shù)據(jù),而根據(jù)業(yè)務(wù),進行簡單的臨時表數(shù)據(jù)的構(gòu)造,減少數(shù)據(jù)構(gòu)造的成本。ETL測試領(lǐng)域是個比較新的領(lǐng)域,針對這個領(lǐng)域的測試方法較少。本申請發(fā)明人針對ETL測試領(lǐng)域的對象進行測試方法的研究,首次把被測對象進行拆分,運用整體與拆分子對象的思想來進行測試。本申請非常適用于ETL領(lǐng)域?qū)ο蟮奶攸c,即涉及的源表多,源表之間相互關(guān)聯(lián);數(shù)據(jù)量大,千萬級甚至T級;代碼行級是百級、千行級等。本申請對測試思想以及測試方式和測試概念提出了一種新的解決方案。需要說明的是,對于方法實施例,為了簡單描述,故將其都表述為一系列的動作組合,但是本領(lǐng)域技術(shù)人員應(yīng)該知悉,本申請并不受所描述的動作順序的限制,因為依據(jù)本申請,某些步驟可以采用其他順序或者同時進行。其次,本領(lǐng)域技術(shù)人員也應(yīng)該知悉,說明書中所描述的實施例均屬于優(yōu)選實施例,所涉及的動作和模塊并不一定是本申請所必須的。參照圖3,示出了本申請ETL測試的裝置實施例I的結(jié)構(gòu)框圖,具體可以包括以下模塊拆分模塊301,用于按照預(yù)置規(guī)則將ETL測試對象拆分為測試子對象;測試模塊302,用于針對所述測試子對象逐個進行測試。在本申請的一種優(yōu)選的實施例中,拆分模塊301可以包括個數(shù)獲取子模塊,用于獲取ETL測試對象中可拆分的測試子對象的個數(shù);測試對象拆分子模塊,用于依據(jù)所述可拆分的測試子對象個數(shù),將ETL測試對象拆分為相應(yīng)個數(shù)的測試子對象。在本申請的一種優(yōu)選的實施例中,所述個數(shù)獲取子模塊可以進一步包括業(yè)務(wù)分割子模塊,用于針對ETL測試對象中所包含的各個業(yè)務(wù)進行分割,獲得可拆分的測試子對象個數(shù);或者,功能分割子模塊,用于針對ETL測試對象中所包含的各個功能進行分割,獲得可拆分的測試子對象個數(shù)。在本申請的一種優(yōu)選的實施例中,所述測試對象拆分子模塊可以包括代碼段提取子模塊,用于在ETL測試對象對應(yīng)的代碼中,提取插入相同臨時表的代碼段;代碼段合并子模塊,用于合并所述插入相同臨時表的多個代碼段,組成測試子對象。在具體的實現(xiàn)中,所述ETL測試對象對應(yīng)的代碼為,ETL測試對象的代碼中匹配Insert至Select的代碼段,所述測試子對象為Insert至Select代碼段組成的SQL腳本。在本申請的一種優(yōu)選的實施例中,所述測試模塊302可以包括測試準備子模塊,用于針對所述測試子對象準備測試用例和測試數(shù)據(jù);測試用例執(zhí)行子模塊,用于執(zhí)行采用所述測試數(shù)據(jù)的測試用例,獲得測試結(jié)果。在具體的實現(xiàn)中,所述測試準備子模塊可以包括測試用例編寫子模塊,用于根據(jù)測試目的編寫測試用例;源表信息獲取子模塊,用于獲取當(dāng)前測試子對象所依賴的源表信息。參照圖4,示出了本申請ETL測試的裝置實施例2的結(jié)構(gòu)框圖,具體可以包括以下模塊拆分模塊401,用于按照預(yù)置規(guī)則將ETL測試對象拆分為測試子對象;測試模塊402,用于針對所述測試子對象逐個進行測試;測試結(jié)果獲取模塊403,用于封裝所述測試子對象,并批量執(zhí)行所述測試子對象對應(yīng)的測試用例,獲得所述ETL測試對象的測試結(jié)果。在本申請的一種優(yōu)選的實施例中,所述拆分模塊401可以包括個數(shù)獲取子模塊,用于獲取ETL測試對象中可拆分的測試子對象的個數(shù);測試對象拆分子模塊,用于依據(jù)所述可拆分的測試子對象個數(shù),將ETL測試對象拆分為相應(yīng)個數(shù)的測試子對象。在具體的實現(xiàn)中,所述個數(shù)獲取子模塊可以包括信息獲取子模塊,用于獲取所述ETL測試對象中存儲過程的臨時表和目標表信息;個數(shù)計算子模塊,用于計算所述臨時表和一個目標表的數(shù)量之和,作為可拆分的測試子對象個數(shù)。由于所述裝置實施例基本相應(yīng)于前述圖I和圖2所示的方法實施例,故本實施例的描述中未詳盡之處,可以參見前述實施例中的相關(guān)說明,在此就不贅述了。本申請可用于眾多通用或?qū)S玫挠嬎阆到y(tǒng)環(huán)境或配置中。例如個人計算機、服務(wù)器計算機、手持設(shè)備或便攜式設(shè)備、平板型設(shè)備、多處理器系統(tǒng)、基于微處理器的系統(tǒng)、置頂盒、可編程的消費電子設(shè)備、網(wǎng)絡(luò)PC、小型計算機、大型計算機、包括以上任何系統(tǒng)或設(shè)備的分布式計算環(huán)境等等。本申請可以在由計算機執(zhí)行的計算機可執(zhí)行指令的一般上下文中描述,例如程序模塊。一般地,程序模塊包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型的例程、程序、對象、組件、數(shù)據(jù)結(jié)構(gòu)等等。也可以在分布式計算環(huán)境中實踐本申請,在這些分布式計算環(huán)境中,由通過通信網(wǎng)絡(luò)而被連接的遠程處理設(shè)備來執(zhí)行任務(wù)。在分布式計算環(huán)境中,程序模塊可以位于包括存儲設(shè)備在內(nèi)的本地和遠程計算機存儲介質(zhì)中。最后,還需要說明的是,在本文中,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設(shè)·備所固有的要素。在沒有更多限制的情況下,由語句“包括一個......”限定的要素,并不排除在包括所述要素的過程、方法、物品或者設(shè)備中還存在另外的相同要素。以上對本申請所提供的一種ETL測試的方法,以及,一種ETL測試的裝置進行了詳細介紹,本文中應(yīng)用了具體個例對本申請的原理及實施方式進行了闡述,以上實施例的說明只是用于幫助理解本申請的方法及其核心思想;同時,對于本領(lǐng)域的一般技術(shù)人員,依據(jù)本申請的思想,在具體實施方式及應(yīng)用范圍上均會有改變之處,綜上所述,本說明書內(nèi)容不應(yīng)理解為對本申請的限制。權(quán)利要求1.一種ETL測試的方法,其特征在于,包括按照預(yù)置規(guī)則將ETL測試對象拆分為測試子對象;針對所述測試子對象逐個進行測試。2.根據(jù)權(quán)利要求I所述的方法,其特征在于,所述按照預(yù)置規(guī)則將ETL測試對象拆分為測試子對象的步驟包括獲取ETL測試對象中可拆分的測試子對象的個數(shù);依據(jù)所述可拆分的測試子對象個數(shù),將ETL測試對象拆分為相應(yīng)個數(shù)的測試子對象。3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述獲取ETL測試對象中可拆分的測試子對象的個數(shù)的步驟進一步包括針對ETL測試對象中所包含的各個業(yè)務(wù)進行分割,獲得可拆分的測試子對象個數(shù);或者,針對ETL測試對象中所包含的各個功能進行分割,獲得可拆分的測試子對象個數(shù)。4.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述獲取ETL測試對象中可拆分的測試子對象的個數(shù)的步驟包括獲取所述ETL測試對象中存儲過程的臨時表和目標表信息;計算所述臨時表和一個目標表的數(shù)量之和,作為可拆分的測試子對象個數(shù)。5.根據(jù)權(quán)利要求3或4所述的方法,其特征在于,所述依據(jù)可拆分的測試子對象個數(shù),將ETL測試對象拆分為測試子對象的步驟包括在ETL測試對象對應(yīng)的代碼中,提取插入相同臨時表的代碼段;合并所述插入相同臨時表的多個代碼段,組成測試子對象。6.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述ETL測試對象對應(yīng)的代碼為,ETL測試對象的代碼中匹配Insert至Select的代碼段,所述測試子對象為Insert至Select代碼段組成的SQL腳本。7.根據(jù)權(quán)利要求I所述的方法,其特征在于,所述針對測試子對象逐個進行測試的步驟包括針對所述測試子對象準備測試用例和測試數(shù)據(jù);執(zhí)行采用所述測試數(shù)據(jù)的測試用例,獲得測試結(jié)果。8.根據(jù)權(quán)利要求7所述的方法,其特征在于,所述針對測試子對象準備測試用例和測試數(shù)據(jù)的步驟包括根據(jù)測試目的編寫測試用例;獲取當(dāng)前測試子對象所依賴的源表信息。9.根據(jù)權(quán)利要求1、2、3、4、6、7或8所述的方法,其特征在于,還包括封裝所述測試子對象,并批量執(zhí)行所述測試子對象對應(yīng)的測試用例,獲得所述ETL測試對象的測試結(jié)果。10.一種ETL測試的裝置,其特征在于,包括拆分模塊,用于按照預(yù)置規(guī)則將ETL測試對象拆分為測試子對象;測試模塊,用于針對所述測試子對象逐個進行測試。全文摘要本申請?zhí)峁┝艘环NETL測試的方法和裝置,其中,所述方法包括按照預(yù)置規(guī)則將ETL測試對象拆分為測試子對象;針對所述測試子對象逐個進行測試。本申請可以降低ETL測試對象的復(fù)雜度,提高測試效率。文檔編號G06F17/30GK102915303SQ20111021891公開日2013年2月6日申請日期2011年8月1日優(yōu)先權(quán)日2011年8月1日發(fā)明者孟祥敏申請人:阿里巴巴集團控股有限公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1