專利名稱:進(jìn)程內(nèi)組件對象的創(chuàng)建方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)程序編碼和測試領(lǐng)域,更具體地,涉及一種進(jìn)程內(nèi)組件的創(chuàng)建方法和系統(tǒng)。
背景技術(shù):
隨著人們對軟件需求的不斷增加,軟件的功能、可操作性、智能化程度等也迅速發(fā)展,從而使軟件變得更加復(fù)雜、更加龐大,開發(fā)的難度也越來越大,開發(fā)的周期越來越長,參與開發(fā)人數(shù)越來越多。為了減少重復(fù)勞動,降低被開發(fā)軟件出錯的概率,軟件復(fù)用技術(shù)也就應(yīng)運(yùn)而生。在過去的幾十年里,軟件復(fù)用得到了越來越廣泛的應(yīng)用。組件技術(shù)是上世紀(jì)90年代初出現(xiàn)的一種新技術(shù),它是在結(jié)構(gòu)化設(shè)計(jì)和面向?qū)ο蠹夹g(shù)的基礎(chǔ)上發(fā)展起來的,是面向?qū)ο蠹夹g(shù)之后的軟件開發(fā)的標(biāo)準(zhǔn)方法體系,是面向?qū)ο蟮拈_發(fā)技術(shù)的延伸。在組件規(guī)范化的過程中,許多公司和組織都做出了許多模型,常見的組件模型有 CORBA (公共對象請求代理體系結(jié)構(gòu))、C0M(組件對象模型),EJB組件和.Net組件。下面,“組件”以微軟公司的COM為例進(jìn)行說明。COM的使用非常廣泛,許多桌面應(yīng)用都采用了 COM技術(shù),包括自動化技術(shù)(OLE自動化),ActiveX控件技術(shù)等。根據(jù)C0M/DC0M中客戶應(yīng)用程序和組件程序的交互關(guān)系,可以將組件分為進(jìn)程內(nèi)組件和進(jìn)程外組件兩種。所謂進(jìn)程內(nèi)組件是指客戶應(yīng)用程序和組件程序在同一個進(jìn)程地址空間內(nèi);進(jìn)程外組件指客戶應(yīng)用程序和組件程序分別處在不同的進(jìn)程空間地址中。進(jìn)程內(nèi)組件是通過將組件作為動態(tài)鏈接庫(DLL)來實(shí)現(xiàn)的,客戶應(yīng)用程序?qū)⒔M件程序加載到自己的進(jìn)程地址空間后再調(diào)用組件程序的函數(shù)。對于這兩種不同的組件,客戶應(yīng)用程序和組件程序交互的內(nèi)在方式是完全不同的。但是對于功能相同的進(jìn)程內(nèi)和進(jìn)程外組件,從程序編寫的角度看,客戶應(yīng)用程序是以同樣的方法來使用組件程序的,客戶應(yīng)用程序不需要做任何的修改。獲取和驅(qū)動組件有兩個重要作用。對于新開發(fā)的組件,可以通過獲取和驅(qū)動組件, 來進(jìn)行自動測試;對于已經(jīng)開發(fā)出來的組件,在進(jìn)行應(yīng)用程序遷移時,通過獲取和驅(qū)動組件,可以重復(fù)利用已經(jīng)開發(fā)出來的組件而不用重新編寫。對于進(jìn)程內(nèi)組件,如果在另外一個進(jìn)程中能夠獲取組件對象的接口,那么驅(qū)動組件對象并獲取組件對象的數(shù)據(jù)都非常方便。但是,采用通用方法在另外一個進(jìn)程中獲取進(jìn)程內(nèi)組件對象接口較難?,F(xiàn)有的可以獲取和驅(qū)動進(jìn)程內(nèi)組件的方法主要包括以下兩種1)分析應(yīng)用程序的內(nèi)存。在該方法中,在應(yīng)用程序啟動并加載了進(jìn)程內(nèi)組件之后, 在應(yīng)用程序的內(nèi)存中訪問該組件,然后通過分析內(nèi)存中的數(shù)據(jù),來獲取組件的數(shù)據(jù)。該方法針對應(yīng)用程序中相同組件的不同對象以及不同應(yīng)用程序的相同組件對象都需要分別進(jìn)行分析和處理,因此非常復(fù)雜;以及2)通過組件句柄得到組件對象。在該方法中,通過應(yīng)用程序中的組件句柄來訪問組件對象,然后通過調(diào)用組件對象的函數(shù)和方法來獲取和驅(qū)動組件。這種方法依賴于目標(biāo)應(yīng)用程序所使用的開發(fā)語言。比如用VB開發(fā)的程序和VC開發(fā)的程序,獲取組件對象的方法都不一樣。參考文獻(xiàn)[1]給出了一種測試應(yīng)用程序的方法,其中,將一個測試代理模塊嵌入到被測應(yīng)用程序中,用以完成測試用例中各測試步驟的執(zhí)行。測試代理按照測試步驟,獲取和驅(qū)動被測應(yīng)用程序中的組件,以完成測試。圖1是示出了參考文獻(xiàn)[1]的測試應(yīng)用程序的系統(tǒng)的各個單元的示意框圖。各個單元描述如下 測試客戶端主控樽塊101 作為測試客戶端應(yīng)用稈序的主控樽塊,負(fù)靑加載泖I 試用例到共享數(shù)據(jù)存儲單元300中,并管理測試流程。 測試啟動單元102 用于捭索測試代理窗口單元203,向搜索到的測試代理窗口單元203發(fā)送測試用例的ID集合以及測試指令。 被測應(yīng)用稈序主控樽塊201 作為被測應(yīng)用程序的主控模塊,用于加載其他模塊和/或單元,比如講稈內(nèi)組件單元202和測試代理窗口單元203。 講稈內(nèi)組件單元202 是被測應(yīng)用程序的進(jìn)程內(nèi)組件,比如.dll或.OCX文件。 進(jìn)程內(nèi)組件單元202作為客戶端運(yùn)行在被測應(yīng)用程序的進(jìn)程中,是被測應(yīng)用程序的進(jìn)程的一部分。 嵌入的測試代理窗口單元203 作為測試代理樽塊。嵌入的測試代理窗口單元 203是一個隨被測應(yīng)用程序一起啟動的對用戶而言隱藏(不可見)的單元。嵌入的測試代理窗口單元203從測試啟動單元102接收測試指令,以開始測試,并從共享數(shù)據(jù)存儲單元中讀取測試客戶端主控模塊101加載的測試用例,按照測試用例的測試步驟,在需要時驅(qū)動進(jìn)程內(nèi)組件單元202,得到測試結(jié)果,并將測試結(jié)果寫入共享數(shù)據(jù)存儲單元中。 共享數(shù)據(jù)存儲單元300 存儲測試用例以及測試結(jié)果。被測應(yīng)用程序中嵌入的測試代理窗口單元203和測試客戶端的主控模塊101均能讀寫此共享數(shù)據(jù)存儲單元。圖2是示出了參考文獻(xiàn)[1]的測試應(yīng)用程序的方法的流程圖。在該測試方法開始后,測試客戶端主控模塊101將測試用例加載到共享數(shù)據(jù)存儲單元300中(步驟S201)。然后,測試客戶端主控模塊101觸發(fā)測試啟動單元102以搜索測試代理窗口單元203,并將測試用例ID集合以及測試指令發(fā)送給搜索到的測試代理窗口單元203(步驟S202)。測試代理窗口單元203接收到測試指令后,開始測試。測試代理窗口單元203根據(jù)接收到的測試用例ID集合,從共享數(shù)據(jù)存儲單元300中讀取測試用例,并依次處理每一個測試用例(步驟S203)。測試代理窗口單元203按照測試用例的測試步驟, 驅(qū)動進(jìn)程內(nèi)組件單元202,并獲得進(jìn)程內(nèi)組件單元的數(shù)據(jù)(S204)。然后,測試代理窗口單元 203確定測試結(jié)果,并將測試結(jié)果寫入共享數(shù)據(jù)存儲單元300 620 。由此,測試客戶端主控模塊101可從共享數(shù)據(jù)存儲單元中300中獲取測試結(jié)果(S206)。圖3是示出了根據(jù)參考文獻(xiàn)[1]的測試應(yīng)用程序的方法的一個示例的示意圖。圖3所示的示例以Microsoft Office的spreadsheet ActiveX作為要測試的應(yīng)用程序的進(jìn)程內(nèi)組件為例。在圖3中,各個模塊之間的連接線上標(biāo)注的數(shù)字表示該示例方法的執(zhí)行順序。這種解決方案的缺點(diǎn)在于,測試客戶端并不能獲取進(jìn)程內(nèi)組件對象的接口,對進(jìn)程內(nèi)組件的獲取和驅(qū)動受限制,必須通過共享數(shù)據(jù)存儲進(jìn)行數(shù)據(jù)交換,而不能直接在測試客戶端驅(qū)動進(jìn)程內(nèi)組件對象并獲取數(shù)據(jù)。因此,需要一種創(chuàng)建進(jìn)程內(nèi)組件的對象的方法,以便能夠直接在測試客戶端獲取所創(chuàng)建的進(jìn)程內(nèi)組件對象的接口從而驅(qū)動進(jìn)程內(nèi)組件的對象并獲取其數(shù)據(jù)。[參考文獻(xiàn)]1.中國發(fā)明專利申請,申請?zhí)?CN 200410079042. 5,發(fā)明名稱“一種應(yīng)用程序的
自動測試方法”.
發(fā)明內(nèi)容
鑒于現(xiàn)有技術(shù)的上述缺點(diǎn),本發(fā)明提出了一種創(chuàng)建程內(nèi)組件的對象的方法,其中, 在目標(biāo)應(yīng)用程序中嵌入一進(jìn)程外組件,所述進(jìn)程外組件具有創(chuàng)建所述進(jìn)程內(nèi)組件的對象并記錄所創(chuàng)建的進(jìn)程內(nèi)組件的對象的接口的功能,在所述目標(biāo)應(yīng)用程序發(fā)出定位所述進(jìn)程內(nèi)組件的請求以創(chuàng)建進(jìn)程內(nèi)組件對象時,將請求定向到進(jìn)程外組件,以創(chuàng)建進(jìn)程外組件的對象,該進(jìn)程外組件的對象將創(chuàng)建所述進(jìn)程內(nèi)組件的對象并記錄所創(chuàng)建的進(jìn)程內(nèi)組件的對象的接口。因此,在不同于所述應(yīng)用程序的應(yīng)用程序中,可以查詢所創(chuàng)建的進(jìn)程外組件的對象的接口并獲取其所記錄的進(jìn)程內(nèi)組件的對象的接口,進(jìn)而直接驅(qū)動進(jìn)程內(nèi)組件的對象。根據(jù)本發(fā)明的第一方面,提出一種創(chuàng)建進(jìn)程內(nèi)組件的對象的方法,包括以下步驟 在一應(yīng)用程序中嵌入一進(jìn)程外組件,所述進(jìn)程外組件具有創(chuàng)建所述進(jìn)程內(nèi)組件的對象并記錄所創(chuàng)建的進(jìn)程內(nèi)組件的對象的接口的功能;啟動所述應(yīng)用程序;在所述應(yīng)用程序發(fā)出定位所述進(jìn)程內(nèi)組件的請求以創(chuàng)建進(jìn)程內(nèi)組件的對象時,將所述請求定向到所述進(jìn)程外組件,以創(chuàng)建所述進(jìn)程外組件的對象;以及所述進(jìn)程外組件的對象創(chuàng)建所述進(jìn)程內(nèi)組件的對象,并記錄所創(chuàng)建的進(jìn)程內(nèi)組件的對象的接口。優(yōu)選地,所述方法還包括步驟在接收到所述請求的進(jìn)程外組件處,分析所述請求,獲得所述進(jìn)程內(nèi)組件的信息,以確定要創(chuàng)建對象的進(jìn)程內(nèi)組件。優(yōu)選地,將所述請求定向到所述進(jìn)程外組件的步驟包括攔截所述應(yīng)用程序發(fā)出的定位所述進(jìn)程內(nèi)組件的請求;獲得所述進(jìn)程外組件的地址信息;定位所述進(jìn)程外組件; 以及將所述請求定向到所定位的所述進(jìn)程外組件。優(yōu)選地,在不同于所述應(yīng)用程序的應(yīng)用程序處,能夠通過查詢而獲取所述進(jìn)程外組件的對象的接口,并通過所述進(jìn)程外組件的對象的接口,獲取所述進(jìn)程外組件的對象所記錄的進(jìn)程內(nèi)組件的對象的接口。優(yōu)選地,在不同于所述應(yīng)用程序的應(yīng)用程序處,通過所獲取的所述進(jìn)程內(nèi)組件的對象的接口,能夠驅(qū)動所述進(jìn)程內(nèi)組件的對象。優(yōu)選地,所述應(yīng)用程序是基于Windows窗口的應(yīng)用程序。根據(jù)本發(fā)明的第二方面,提出了一種創(chuàng)建進(jìn)程內(nèi)組件的對象的系統(tǒng),包括進(jìn)程外組件嵌入單元,用于在一應(yīng)用程序中嵌入一進(jìn)程外組件,所述進(jìn)程外組件具有創(chuàng)建進(jìn)程內(nèi)組件的對象并記錄所創(chuàng)建的進(jìn)程內(nèi)組件的對象的接口的功能;主控單元,用于啟動所述應(yīng)用程序;組件重定向單元,用于在所述應(yīng)用程序發(fā)出定位所述進(jìn)程內(nèi)組件的請求以創(chuàng)建進(jìn)程內(nèi)組件的對象時,將所述請求定向到所述進(jìn)程外組件,以創(chuàng)建所述進(jìn)程外組件的對象;其中,所創(chuàng)建的進(jìn)程外組件的對象將創(chuàng)建所述進(jìn)程內(nèi)組件的對象,并記錄所創(chuàng)建的進(jìn)程內(nèi)組件的對象的接口。優(yōu)選地,所述進(jìn)程外組件包括信息分析單元,用于分析所述請求,獲得所述進(jìn)程內(nèi)組件的信息,以確定要創(chuàng)建對象的進(jìn)程內(nèi)組件。優(yōu)選地,所述組件重定向單元還包括請求攔截單元,用于攔截所述應(yīng)用程序發(fā)出的定位所述進(jìn)程內(nèi)組件的請求;以及定位單元,用于獲得所述進(jìn)程外組件的地址信息,并定位所述進(jìn)程外組件,以便將所述請求定向到所定位的所述進(jìn)程外組件。與最相近的現(xiàn)有技術(shù),即參考文獻(xiàn)[1]相比,本發(fā)明的有益效果至少包括今通過進(jìn)程外組件,可以獲取進(jìn)程內(nèi)組件對象的接口,從而可以直接驅(qū)動進(jìn)程內(nèi)組件對象;令由于通過進(jìn)程外組件而創(chuàng)建進(jìn)程內(nèi)組件的對象,而不需要針對同一個進(jìn)程內(nèi)組件的不同對象進(jìn)行逐個分析和處理,簡化了編程的復(fù)雜度。
結(jié)合附圖,根據(jù)下面對本發(fā)明的非限制性實(shí)施例的詳細(xì)描述,本發(fā)明的上述及其他目的、特征和優(yōu)點(diǎn)將變得更加清楚,附圖中圖1是示出了參考文獻(xiàn)[1]的測試應(yīng)用程序的系統(tǒng)的各個單元的示意框圖;圖2是示出了參考文獻(xiàn)[1]的測試應(yīng)用程序的方法的流程圖;圖3是示出了根據(jù)參考文獻(xiàn)[1]的測試應(yīng)用程序的方法的一個示例的示意圖;圖4是示出了根據(jù)本發(fā)明實(shí)施例的創(chuàng)建進(jìn)程內(nèi)組件的對象的系統(tǒng)的示意框圖;圖5是示出了根據(jù)本發(fā)明實(shí)施例的創(chuàng)建進(jìn)程內(nèi)組件的對象的方法的流程圖;以及圖6是示出了根據(jù)本發(fā)明實(shí)施例的創(chuàng)建進(jìn)程內(nèi)組件的對象的方法的一個示例的示意圖。附圖中,用相同的附圖標(biāo)記表示相關(guān)的單元,以示出它們之間的相關(guān)性。以加粗的實(shí)線表示主要反映了本發(fā)明的發(fā)明思想的那些單元。
具體實(shí)施例方式下面,根據(jù)附圖描述本發(fā)明。在以下描述中,一些具體實(shí)施例僅用于描述目的,而不應(yīng)該理解為對本發(fā)明有任何限制,而只是本發(fā)明的示例。在可能導(dǎo)致對本發(fā)明的理解造成混淆時,將省略常規(guī)結(jié)構(gòu)或構(gòu)造。圖4是示出了根據(jù)本發(fā)明實(shí)施例的創(chuàng)建進(jìn)程內(nèi)組件的對象的系統(tǒng)的示意框圖。各個單元描述如下 測試客戶端主控樽塊101 作為測試客戶端應(yīng)用稈序的主控樽塊,負(fù)靑管理泖I 試流程。 進(jìn)程外組件對象接口杳詢單元103 用于查詢進(jìn)程外組件對象接口的單元。 進(jìn)程內(nèi)組件對象接口獲取單元104 用于通過進(jìn)程外組件對象接口杳詢單元 103所查詢到的進(jìn)程外組件對象的接口,訪問進(jìn)程外組件所提供的服務(wù),以獲取進(jìn)程內(nèi)組件對象的接口。 進(jìn)程內(nèi)組件驅(qū)動和數(shù)據(jù)獲取單元105 是業(yè)務(wù)邏輯處理單元。通過進(jìn)程內(nèi)組件對象接口獲取單元104所獲取的進(jìn)程內(nèi)組件對象的接口,可以自由且方便地驅(qū)動進(jìn)程內(nèi)組件,并獲取進(jìn)程內(nèi)組件的數(shù)據(jù)。 被測應(yīng)用稈序主控樽塊201 作為被測應(yīng)用程序的主控模塊,用于啟動被測應(yīng)用程序,以及加載其他模塊和/或單元,比如組件重定向單元204和講稈外組件單元205。 講稈內(nèi)組件單元202 是被測應(yīng)用程序的進(jìn)程內(nèi)組件單元,比如.dll或.0CX文件。進(jìn)程內(nèi)組件單元202作為客戶端運(yùn)行在被測應(yīng)用程序的進(jìn)程中,是被測應(yīng)用程序的進(jìn)程的一部分。 組件重定向單元204 用于在被測應(yīng)用程序發(fā)送定位進(jìn)程內(nèi)組件單元202的請求以創(chuàng)建進(jìn)程內(nèi)組件的對象時,將請求定向到進(jìn)程外組件單元205。 講稈外組件單元205 用于提供創(chuàng)建進(jìn)程內(nèi)組件對象、并記錄下所創(chuàng)建的進(jìn)程內(nèi)組件對象的接口的功能。并且,進(jìn)程外組件單元205對外提供獲取所記錄的進(jìn)程內(nèi)組件對象接口的服務(wù)。其它應(yīng)用程序通過查詢進(jìn)程外組件單元205的接口,可以訪問進(jìn)程外組件單元205,通過其提供的服務(wù),獲取所記錄的進(jìn)程內(nèi)組件對象的接口。 講稈外組件嵌入單元206 用于在(被測)應(yīng)用程序中嵌入進(jìn)程外組件單元。如圖4所示,組件重定向單元204可包括請求攔截單元2041和定位單元2042。請求攔截單元2041監(jiān)控被測應(yīng)用程序,在被測應(yīng)用程序發(fā)出定位進(jìn)程內(nèi)組件單元202以創(chuàng)建進(jìn)程內(nèi)組件對象時攔截該請求。定位單元2042用于獲得進(jìn)程外組件單元205的地址信息, 并定位該進(jìn)程外組件單元205,以便可以將請求定向到所定位的進(jìn)程外組件單元205。此外,如圖4所示,進(jìn)程外組件單元205可包括信息分析單元2051,用于分析接收到的請求,獲得所述進(jìn)程內(nèi)組件的信息,以確定要創(chuàng)建對象的進(jìn)程內(nèi)組件。圖5是示出了根據(jù)本發(fā)明實(shí)施例的創(chuàng)建進(jìn)程內(nèi)組件的對象的方法的流程圖。如圖5所示,在該方法開始后,首先啟動被測應(yīng)用程序(步驟S501)。與此同時, 啟動組件重定向單元204(步驟S5(^)。組件重定向單元204用于將定位進(jìn)程內(nèi)組件單元 202的請求重定向到進(jìn)程外組件單元205。在被測應(yīng)用程序向操作系統(tǒng)查詢進(jìn)程內(nèi)組件單元202的相關(guān)信息以定位進(jìn)程內(nèi)組件單元并創(chuàng)建(加載)進(jìn)程內(nèi)組件單元202時,該請求被定向到進(jìn)程外組件單元205(步驟S503)。如圖4所示,也可以在組件重定向單元204中設(shè)置請求攔截單元2041和定位單元 2042。在被測應(yīng)用程序向操作系統(tǒng)發(fā)送定位進(jìn)程內(nèi)組件單元202的請求時,請求攔截單元 2041攔截該請求,定位單元202用于獲得與請求的進(jìn)程內(nèi)組件單元相關(guān)聯(lián)的進(jìn)程外組件單元的地址信息,定位該進(jìn)程外組件單元,以便組件重定向單元將該請求定向到所定位的進(jìn)程外組件單元。響應(yīng)于該請求,進(jìn)程外組件單元205創(chuàng)建進(jìn)程外組件對象。然后,所創(chuàng)建的進(jìn)程外組件對象將創(chuàng)建被測應(yīng)用程序所請求的進(jìn)程內(nèi)組件的對象,并在所創(chuàng)建的進(jìn)程外組件對象中記錄所創(chuàng)建的進(jìn)程內(nèi)組件對象的接口(步驟S504)。至此,被測應(yīng)用程序的啟動完成(步驟 S505)。測試客戶端應(yīng)用程序要驅(qū)動進(jìn)程內(nèi)組件對象并獲取數(shù)據(jù)時,測試客戶端應(yīng)用程序的進(jìn)程外組件對象接口查詢單元103查詢進(jìn)程外組件對象的接口。進(jìn)程內(nèi)組件對象接口獲取單元104通過查詢到的接口,訪問進(jìn)程外組件對象,獲取進(jìn)程外組件對象所記錄的進(jìn)程內(nèi)組件對象的接口(步驟S506)。然后,測試客戶端應(yīng)用程序的進(jìn)程內(nèi)組件驅(qū)動和數(shù)據(jù)獲取單元105通過進(jìn)程內(nèi)組件對象接口獲取單元104所獲取的進(jìn)程內(nèi)組件對象的接口,可以方便地、直接地驅(qū)動進(jìn)程內(nèi)組件對象,并獲取進(jìn)程內(nèi)組件對象的數(shù)據(jù)(步驟S507)。圖6是示出了根據(jù)本發(fā)明實(shí)施例的創(chuàng)建進(jìn)程內(nèi)組件的對象的方法的一個示例的示意圖。與圖3所示的示例一樣,圖6所示的示例以MicrosoftOffice的spreadsheet ActiveX作為要驅(qū)動的進(jìn)程內(nèi)組件為例。在圖6中,各個模塊之間的連接線上標(biāo)注的數(shù)字表示該示例方法的執(zhí)行順序。在圖6所示的示例中,首先啟動被測應(yīng)用程序和組件重定向單元。在被測應(yīng)用程序向組件重定向單元請求創(chuàng)建進(jìn)程內(nèi)組件的對象時(步驟Si),組件重定向單元將該請求重定向到進(jìn)程外組件(步驟S2)。在另一示例中,修改注冊表,將注冊表中注冊的進(jìn)程內(nèi)組件的動態(tài)鏈接庫DLL修改為指向進(jìn)程外組件。被測應(yīng)用程序要創(chuàng)建進(jìn)程內(nèi)組件時,要訪問注冊表以獲得進(jìn)程內(nèi)組件的DLL。在該示例中,被測應(yīng)用程序?qū)⒈粚?dǎo)向進(jìn)程外組件。因而,在被測應(yīng)用程序向進(jìn)程內(nèi)組件單元請求創(chuàng)建對象時,該請求被定向到進(jìn)程外組件單元,實(shí)現(xiàn)了重定向的功能。在另一個示例中,在被測應(yīng)用程序中嵌入了請求攔截單元。如圖4所示,請求攔截單元也可以被集成在組件重定向單元中。在該示例中,請求攔截單元將監(jiān)控被測應(yīng)用程序?qū)Σ僮飨到y(tǒng)的動作,并在監(jiān)測到被測應(yīng)用程序向操作系統(tǒng)發(fā)送查詢以定位進(jìn)程內(nèi)組件的請求時,攔截該請求并由組件重定向單元將該請求定向到進(jìn)程外組件。在圖6所示的示例中,進(jìn)程外組件是封裝有進(jìn)程內(nèi)組件spreadsheetActiveX的 COM。因此,將創(chuàng)建COM對象。COM對象將創(chuàng)建進(jìn)程內(nèi)組件spreadsheet ActiveX的對象,并返回被測應(yīng)用程序(步驟S3)。如果被測應(yīng)用程序還需要創(chuàng)建/加載其它進(jìn)程內(nèi)組件,則重復(fù)步驟S1-S3。在創(chuàng)建了所有需要的進(jìn)程內(nèi)組件(和對應(yīng)的進(jìn)程外組件)對象之后,被測應(yīng)用程序的啟動完成。測試客戶端使用Windows API "CoCreatelnstance",查詢COM對象的接口(步驟 S4)。然后,訪問COM對象,以獲取spreadsheet ActiveX對象的接口(步驟S5)。通過所獲取的spreadsheet ActiveX對象的接口,可以驅(qū)動spreadsheet ActiveX對象并獲取數(shù)據(jù) (步驟S6)。在該示例中,可以通過如下調(diào)用方法來驅(qū)動spreadsheet ActiveX對象并獲取其數(shù)據(jù)spreadsheet. SetCellDatad, 1,20);spreadsheet. SetCellDatad, 2, 30);spreadsheet. SetCellData(l, 3, "= (A1+B1),,);spreadsheet. ShowAbout ().從圖6所示的示例可見,根據(jù)本發(fā)明實(shí)施例的創(chuàng)建進(jìn)程內(nèi)組件的對象的方法,通過將創(chuàng)建進(jìn)程內(nèi)組件對象的請求重定向到一個進(jìn)程外組件,該進(jìn)程外組件提供創(chuàng)建進(jìn)程內(nèi)組件對象、并記錄所創(chuàng)建的進(jìn)程內(nèi)組件對象的功能,測試客戶端通過調(diào)用進(jìn)程外組件對象的服務(wù)可以獲取所創(chuàng)建的進(jìn)程內(nèi)組件對象的接口,從而可以在與被測應(yīng)用程序不同的另一個進(jìn)程中,容易且方便地驅(qū)動進(jìn)程內(nèi)組件。因此,可以提高編寫自動測試用例的效率。在圖6所示的示例中,進(jìn)程外組件封裝有進(jìn)程內(nèi)組件,因此對于每個進(jìn)程內(nèi)組件, 需要在被測應(yīng)用程序中嵌入一個對應(yīng)的進(jìn)程外組件,用于創(chuàng)建該進(jìn)程內(nèi)組件的對象并對外提供所創(chuàng)建的進(jìn)程內(nèi)組件對象的接口。因此,不需要針對相同進(jìn)程內(nèi)組件的不同對象進(jìn)行逐個分析和處理,提高了編寫測試程序的效率。在圖6所示的示例中,以應(yīng)用程序是基于Windows窗口的應(yīng)用程序?yàn)槔M(jìn)行了說明。當(dāng)然,本領(lǐng)域技術(shù)人員可以認(rèn)識到,本發(fā)明同樣適應(yīng)于其它應(yīng)用程序。在其它示例中,可以在被測應(yīng)用程序中嵌入對于所有進(jìn)程內(nèi)組件公共的進(jìn)程外組件。此時,在將請求重定向到公共的進(jìn)程外組件時,進(jìn)程外組件分析請求,獲得進(jìn)程內(nèi)組件的信息,以確定要創(chuàng)建對象的進(jìn)程內(nèi)組件。然后,進(jìn)程外組件可以創(chuàng)建所確定的進(jìn)程內(nèi)組件的對象,并記錄所創(chuàng)建的進(jìn)程內(nèi)組件的對象的接口。在這種情況下,不需要針對每個需要驅(qū)動的進(jìn)程內(nèi)組件而嵌入一個進(jìn)程外組件。因此,可以進(jìn)一步提高編寫測試程序的效率。這里所公開的本發(fā)明實(shí)施例的其他設(shè)置包括執(zhí)行在先概述并隨后詳述的方法實(shí)施例的步驟和操作的軟件程序。更具體地,計(jì)算機(jī)程序產(chǎn)品是如下的一種實(shí)施例具有計(jì)算機(jī)可讀介質(zhì),計(jì)算機(jī)可讀介質(zhì)上編碼有計(jì)算機(jī)程序邏輯,當(dāng)在計(jì)算設(shè)備上執(zhí)行時,計(jì)算機(jī)程序邏輯提供相關(guān)的操作,從而提供上述單向代理轉(zhuǎn)密方案。當(dāng)在計(jì)算系統(tǒng)的至少一個處理器上執(zhí)行時,計(jì)算機(jī)程序邏輯使得處理器執(zhí)行本發(fā)明實(shí)施例所述的操作(方法)。本發(fā)明的這種設(shè)置典型地提供為設(shè)置或編碼在例如光介質(zhì)(例如CD-ROM)、軟盤或硬盤等的計(jì)算機(jī)可讀介質(zhì)上的軟件、代碼和/或其他數(shù)據(jù)結(jié)構(gòu)、或者諸如一個或多個ROM或RAM或PROM芯片上的固件或微代碼的其他介質(zhì)、或?qū)S眉呻娐?ASIC)、或一個或多個模塊中的可下載的軟件圖像、共享數(shù)據(jù)庫等。軟件或固件或這種配置可安裝在計(jì)算設(shè)備上,以使得計(jì)算設(shè)備中的一個或多個處理器執(zhí)行本發(fā)明實(shí)施例所述的技術(shù)。結(jié)合諸如一組數(shù)據(jù)通信設(shè)備或其他實(shí)體中的計(jì)算設(shè)備進(jìn)行操作的軟件過程也可以提供根據(jù)本發(fā)明的系統(tǒng)。根據(jù)本發(fā)明的系統(tǒng)也可以分布在多個數(shù)據(jù)通信設(shè)備上的多個軟件過程、或者在一組小型專用計(jì)算機(jī)上運(yùn)行的所有軟件過程、或者單個計(jì)算機(jī)上運(yùn)行的所有軟件過程之間。應(yīng)該理解,嚴(yán)格地講,本發(fā)明的實(shí)施例可以實(shí)現(xiàn)為計(jì)算機(jī)設(shè)備上的軟件程序、軟件和硬件、或者單獨(dú)的軟件和/或單獨(dú)的電路。以上描述僅給出了本發(fā)明的優(yōu)選實(shí)施例,而并不是要以任何方式限制本發(fā)明。因此,本發(fā)明的范圍應(yīng)涵蓋在本發(fā)明精神和原理內(nèi)進(jìn)行的任何修改、替換、改進(jìn)等。
9
權(quán)利要求
1.一種創(chuàng)建進(jìn)程內(nèi)組件的對象的方法,包括以下步驟在一應(yīng)用程序中嵌入一進(jìn)程外組件,所述進(jìn)程外組件具有創(chuàng)建所述進(jìn)程內(nèi)組件的對象并記錄所創(chuàng)建的進(jìn)程內(nèi)組件的對象的接口的功能; 啟動所述應(yīng)用程序;在所述應(yīng)用程序發(fā)出定位所述進(jìn)程內(nèi)組件的請求以創(chuàng)建進(jìn)程內(nèi)組件的對象時,將所述請求定向到所述進(jìn)程外組件,以創(chuàng)建所述進(jìn)程外組件的對象;以及所述進(jìn)程外組件的對象創(chuàng)建所述進(jìn)程內(nèi)組件的對象,并記錄所創(chuàng)建的進(jìn)程內(nèi)組件的對象的接口。
2.根據(jù)權(quán)利要求1所述的方法,還包括步驟在接收到所述請求的進(jìn)程外組件處,分析所述請求,獲得所述進(jìn)程內(nèi)組件的信息,以確定要創(chuàng)建對象的進(jìn)程內(nèi)組件。
3.根據(jù)權(quán)利要求1所述的方法,其中,將所述請求定向到所述進(jìn)程外組件的步驟包括 攔截所述應(yīng)用程序發(fā)出的定位所述進(jìn)程內(nèi)組件的請求;獲得所述進(jìn)程外組件的地址信息;定位所述進(jìn)程外組件;以及將所述請求定向到所定位的所述進(jìn)程外組件。
4.根據(jù)權(quán)利要求1所述的方法,其中,在不同于所述應(yīng)用程序的另一應(yīng)用程序處,能夠通過查詢而獲取所述進(jìn)程外組件的對象的接口,并通過所述進(jìn)程外組件的對象的接口,獲取所述進(jìn)程外組件的對象所記錄的進(jìn)程內(nèi)組件的對象的接口。
5.根據(jù)權(quán)利要求4所述的方法,其中,在不同于所述應(yīng)用程序的所述另一應(yīng)用程序處,通過所獲取的所述進(jìn)程內(nèi)組件的對象的接口,能夠驅(qū)動所述進(jìn)程內(nèi)組件的對象。
6.根據(jù)權(quán)利要求1所述的方法,其中,所述應(yīng)用程序是基于Windows窗口的應(yīng)用程序。
7.一種創(chuàng)建進(jìn)程內(nèi)組件的對象的系統(tǒng),包括進(jìn)程外組件嵌入單元,用于在一應(yīng)用程序中嵌入一進(jìn)程外組件,所述進(jìn)程外組件具有創(chuàng)建進(jìn)程內(nèi)組件的對象并記錄所創(chuàng)建的進(jìn)程內(nèi)組件的對象的接口的功能; 主控單元,用于啟動所述應(yīng)用程序;以及組件重定向單元,用于在所述應(yīng)用程序發(fā)出定位所述進(jìn)程內(nèi)組件的請求以創(chuàng)建進(jìn)程內(nèi)組件的對象時,將所述請求定向到所述進(jìn)程外組件,以創(chuàng)建所述進(jìn)程外組件的對象;其中,所創(chuàng)建的進(jìn)程外組件的對象將創(chuàng)建所述進(jìn)程內(nèi)組件的對象,并記錄所創(chuàng)建的進(jìn)程內(nèi)組件的對象的接口。
8.根據(jù)權(quán)利要求7所述的系統(tǒng),其中,所述進(jìn)程外組件包括信息分析單元,用于分析所述請求,獲得所述進(jìn)程內(nèi)組件的信息,以確定要創(chuàng)建對象的進(jìn)程內(nèi)組件。
9.根據(jù)權(quán)利要求7所述的系統(tǒng),其中,所述組件重定向單元包括請求攔截單元,用于攔截所述應(yīng)用程序發(fā)出的定位所述進(jìn)程內(nèi)組件的請求;以及定位單元,用于獲得所述進(jìn)程外組件的地址信息,并定位所述進(jìn)程外組件,以便將所述請求定向到所定位的所述進(jìn)程外組件。
全文摘要
本發(fā)明提出了一種創(chuàng)建進(jìn)程內(nèi)組件的對象的方法,包括以下步驟在一應(yīng)用程序中嵌入一進(jìn)程外組件,所述進(jìn)程外組件具有創(chuàng)建所述進(jìn)程內(nèi)組件的對象并記錄所創(chuàng)建的進(jìn)程內(nèi)組件的對象的接口的功能;啟動所述應(yīng)用程序;在所述應(yīng)用程序發(fā)出定位所述進(jìn)程內(nèi)組件的請求以創(chuàng)建進(jìn)程內(nèi)組件的對象時,將所述請求定向到所述進(jìn)程外組件,以創(chuàng)建所述進(jìn)程外組件的對象;所述進(jìn)程外組件的對象創(chuàng)建所述進(jìn)程內(nèi)組件的對象,并記錄所創(chuàng)建的進(jìn)程內(nèi)組件的對象的接口。在不同于該應(yīng)用程序的另一應(yīng)用程序處,可以獲取進(jìn)程外組件對象的接口并訪問進(jìn)程外組件所提供的服務(wù),以獲取進(jìn)程內(nèi)組件對象的接口,從而可以直接驅(qū)動進(jìn)程內(nèi)組件對象。此外,本發(fā)明還提出了一種創(chuàng)建進(jìn)程內(nèi)組件的對象的系統(tǒng)。
文檔編號G06F9/44GK102207856SQ20101013701
公開日2011年10月5日 申請日期2010年3月29日 優(yōu)先權(quán)日2010年3月29日
發(fā)明者劉慧峰, 劉曉煒, 史敬威, 孟昕, 宋才良, 王煉 申請人:日電(中國)有限公司