亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

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

文檔序號(hào):6429871閱讀:153來源:國知局

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