本發(fā)明實(shí)施例對(duì)上述模擬類和上述模擬方法中的具體內(nèi)容不加以限制。
[0053]另外,該測(cè)試應(yīng)用程序可以在UI (用戶界面,User Interface)上提供相應(yīng)的控件,當(dāng)接收到針對(duì)該控件的觸發(fā)操作時(shí),可以執(zhí)行本發(fā)明實(shí)施例的步驟流程,以實(shí)現(xiàn)應(yīng)用程序的啟動(dòng)時(shí)間的快速獲取??梢岳斫?,本發(fā)明實(shí)施例對(duì)于相應(yīng)步驟流程的具體觸發(fā)條件不加以限制。
[0054]本發(fā)明實(shí)施例中,操作系統(tǒng)可用于表示移動(dòng)終端等終端設(shè)備的操作系統(tǒng),其可以為安卓、Windows等類型,本發(fā)明實(shí)施例主要以安卓操作系統(tǒng)為例進(jìn)行說明,其他類型的操作系統(tǒng)相互參照即可。
[0055]操作系統(tǒng)的啟動(dòng)等待方法可用于表示操作系統(tǒng)提供的、獲取一個(gè)應(yīng)用程序從啟動(dòng)到加載完成的等待時(shí)間的API (應(yīng)用程序編程接口,Applicat1n Program Interface),該操作系統(tǒng)的啟動(dòng)等待方法通常為未公開的方法。本發(fā)明實(shí)施例可以在測(cè)試應(yīng)用程序中模擬未公開的系統(tǒng)類或系統(tǒng)方法,這樣,在調(diào)用與該系統(tǒng)類同名的模擬類或者與該系統(tǒng)方法同名的模擬方法時(shí),可以調(diào)用到燒制到移動(dòng)終端中的系統(tǒng)類或者系統(tǒng)方法。
[0056]本發(fā)明實(shí)施例中,可以利用Java反射技術(shù),通過調(diào)用與系統(tǒng)類同名的模擬類或者與系統(tǒng)方法同名的模擬方法,獲取操作系統(tǒng)的啟動(dòng)等待方法。其中,Java反射技術(shù)允許程序在運(yùn)行時(shí)透過反射API (應(yīng)用程序編程接口,Applicat1n Programming Interface)取得任何一個(gè)已知名稱的class (類)對(duì)象的內(nèi)部信息,容許程序在運(yùn)行時(shí)加載、探知、使用編譯期間完全未知的class,也即,在調(diào)用與系統(tǒng)類同名的模擬類或者與系統(tǒng)方法同名的模擬方法時(shí),可以加載該模擬類或者模擬方法對(duì)應(yīng)的class對(duì)象。上述內(nèi)部信息具體可以包括:方法(methods)、作用域(fields)和構(gòu)造函數(shù)(constructor)等,本發(fā)明實(shí)施例則可以通過調(diào)用上述模擬類或者模擬方法,獲取操作系統(tǒng)的啟動(dòng)等待方法。
[0057]本發(fā)明實(shí)施例在調(diào)用上述模擬類或者模擬方法時(shí),操作系統(tǒng)將會(huì)調(diào)用并運(yùn)行與上述模擬類或者模擬方法同名的真實(shí)類或者真實(shí)方法,從而可以獲取運(yùn)行過程中的真實(shí)類或者真實(shí)方法對(duì)應(yīng)class對(duì)象的內(nèi)部信息,該內(nèi)部信息中就可以包括操作系統(tǒng)的啟動(dòng)等待方法。
[0058]本發(fā)明實(shí)施例可以提供通過調(diào)用與系統(tǒng)類同名的模擬類或者與系統(tǒng)方法同名的模擬方法,獲取操作系統(tǒng)的啟動(dòng)等待方法的如下技術(shù)方案:
[0059]技術(shù)方案Al
[0060]技術(shù)方案Al中,所述系統(tǒng)類具體可以包括:系統(tǒng)接口類,則所述通過調(diào)用與系統(tǒng)類同名的模擬類或者與系統(tǒng)方法同名的模擬方法,獲取操作系統(tǒng)的啟動(dòng)等待方法的步驟,具體可以包括:
[0061]步驟S11、通過調(diào)用與所述系統(tǒng)接口類同名的模擬類,獲取所述系統(tǒng)接口類的實(shí)例;
[0062]步驟S12、通過反射調(diào)用所述系統(tǒng)接口類的實(shí)例,獲取操作系統(tǒng)的所述系統(tǒng)接口類中的啟動(dòng)等待方法。
[0063]例如,在安卓系統(tǒng)中,所述系統(tǒng)接口類可以為IActivityManager,則可以通過反射調(diào)用IActivityManager的實(shí)例,獲取IActivityManager的實(shí)例中的所有方法,并從所有方法中查找得到所述啟動(dòng)等待方法。其中,在調(diào)用與IActivityManager同名的模擬類時(shí),操作系統(tǒng)將會(huì)調(diào)用并運(yùn)行真實(shí)的IActivityManager,從而可以獲取運(yùn)行過程中真實(shí)的IActivityManager實(shí)例對(duì)應(yīng)class對(duì)象的內(nèi)部信息,該內(nèi)部信息中就可以包括操作系統(tǒng)的啟動(dòng)等待方法。
[0064]技術(shù)方案A2
[0065]技術(shù)方案A2中,所述系統(tǒng)類具體可以包括:系統(tǒng)原生類,則所述通過調(diào)用與系統(tǒng)類同名的模擬類或者與系統(tǒng)方法同名的模擬方法,獲取操作系統(tǒng)的啟動(dòng)等待方法的步驟,具體可以包括:
[0066]步驟S21、通過調(diào)用與所述系統(tǒng)原生類同名的模擬類,獲取所述原生類中系統(tǒng)接口類的實(shí)例;
[0067]步驟S22、通過反射調(diào)用所述系統(tǒng)接口類的實(shí)例,獲取操作系統(tǒng)的所述系統(tǒng)接口類中的啟動(dòng)等待方法。
[0068]例如,在安卓系統(tǒng)中,所述系統(tǒng)原生類可以為ActivityManagerNative,則可以通過調(diào)用與其同名的模擬類,獲取其所有派生類的實(shí)例,并從所有派生類的實(shí)例中查找得到IActivityManager的實(shí)例,從而可以通過反射調(diào)用IActivityManager的實(shí)例獲取其中的啟動(dòng)等待方法。其中,在調(diào)用與ActivityManagerNative同名的模擬類時(shí),操作系統(tǒng)將會(huì)調(diào)用并運(yùn)行真實(shí)的ActivityManagerNative,從而可以獲取運(yùn)行過程中真實(shí)的ActivityManagerNative實(shí)例對(duì)應(yīng)class對(duì)象的內(nèi)部信息,該內(nèi)部信息中就可以包括IActivityManager的實(shí)例;進(jìn)一步,可以通過反射調(diào)用IActivityManager的實(shí)例,獲取IActivityManager的實(shí)例的內(nèi)部信息,該內(nèi)部信息中就可以包括操作系統(tǒng)的啟動(dòng)等待方法。
[0069]技術(shù)方案A3
[0070]技術(shù)方案A3中,所述系統(tǒng)方法具體可以包括:啟動(dòng)等待方法,則所述通過調(diào)用與系統(tǒng)類同名的類或者與系統(tǒng)方法同名的模擬方法,獲取操作系統(tǒng)的啟動(dòng)等待方法的步驟,具體可以包括:
[0071]步驟S31、通過調(diào)用與所述啟動(dòng)等待方法同名的模擬方法,獲取操作系統(tǒng)的啟動(dòng)等待方法。
[0072]相對(duì)于技術(shù)方案Al和技術(shù)方案A2通過反射調(diào)用上述啟動(dòng)等待方法所屬的系統(tǒng)類的實(shí)例來獲取上述啟動(dòng)等待方法,技術(shù)方案A3可以預(yù)先創(chuàng)建于上述啟動(dòng)等待方法同名的模擬方法,并在該模擬方法中定義對(duì)應(yīng)的參數(shù)和參數(shù)順序,從而可以通過調(diào)用該模擬方法,獲取對(duì)應(yīng)的啟動(dòng)等待方法。其中,在調(diào)用與啟動(dòng)等待方法同名的模擬方法時(shí),操作系統(tǒng)將會(huì)調(diào)用并運(yùn)行真實(shí)的啟動(dòng)等待方法,從而可以獲取運(yùn)行過程中真實(shí)的啟動(dòng)等待方法實(shí)例對(duì)應(yīng)class對(duì)象的內(nèi)部信息。
[0073]以上對(duì)通過調(diào)用與系統(tǒng)類同名的模擬類或者與系統(tǒng)方法同名的模擬方法,獲取操作系統(tǒng)的啟動(dòng)等待方法的技術(shù)方案進(jìn)行了詳細(xì)介紹,可以理解,本領(lǐng)域技術(shù)人員可以根據(jù)實(shí)際需要,采用上述技術(shù)方案中的任一或者組合,或者,還可以根據(jù)實(shí)際需要采用通過調(diào)用與系統(tǒng)類同名的模擬類或者與系統(tǒng)方法同名的模擬方法,獲取操作系統(tǒng)的啟動(dòng)等待方法的其他技術(shù)方案,本發(fā)明實(shí)施例對(duì)于通過調(diào)用與系統(tǒng)類同名的模擬類或者與系統(tǒng)方法同名的模擬方法,獲取操作系統(tǒng)的啟動(dòng)等待方法的具體技術(shù)方案不加以限制。
[0074]步驟102、在獲取操作系統(tǒng)的啟動(dòng)等待方法后,啟動(dòng)目標(biāo)應(yīng)用程序;
[0075]上述目標(biāo)應(yīng)用程序可以為與上述測(cè)試應(yīng)用程序處于相同運(yùn)行環(huán)境的被測(cè)試應(yīng)用程序,因此,本發(fā)明實(shí)施例可以適用于通過上述測(cè)試應(yīng)用程序的控件啟動(dòng)上述目標(biāo)程序,從而可以獲得上述目標(biāo)應(yīng)用程序的時(shí)間。
[0076]在本發(fā)明的一種可選實(shí)施例中,所述啟動(dòng)目標(biāo)應(yīng)用程序的步驟,具體可以包括:
[0077]步驟S41、獲取所述目標(biāo)應(yīng)用程序的包名和類名;
[0078]步驟S42、依據(jù)所述目標(biāo)應(yīng)用程序的包名和類名,啟動(dòng)所述目標(biāo)應(yīng)用程序。
[0079]在本發(fā)明的一種應(yīng)用示例中,可以依據(jù)所述目標(biāo)應(yīng)用程序的包名和類名,構(gòu)造一個(gè)意圖(intent),并在該意圖中指定欲要對(duì)所述目標(biāo)應(yīng)用程序的包名和類名進(jìn)行的啟動(dòng)動(dòng)作,這樣,可以通過執(zhí)行該意圖來實(shí)現(xiàn)所述目標(biāo)應(yīng)用程序的啟動(dòng)。
[0080]可以理解,本領(lǐng)域技術(shù)人員可以根據(jù)實(shí)際需要采用啟動(dòng)所述目標(biāo)應(yīng)用程序的任意技術(shù)方案,本發(fā)明實(shí)施例對(duì)啟動(dòng)所述目標(biāo)應(yīng)用程序的具體技術(shù)方案不加以限制。
[0081]步驟103、依據(jù)所述啟動(dòng)等待方法的返回值,確定所述目標(biāo)應(yīng)用程序的啟動(dòng)時(shí)間。
[0082]在本發(fā)明的一種應(yīng)用示例中,上述啟動(dòng)等待方法的本次啟動(dòng)的等待結(jié)果參數(shù)可以攜帶有本次啟動(dòng)的時(shí)間,因此,可以通過本次啟動(dòng)的等待結(jié)果參數(shù)的返回值得到所述目標(biāo)應(yīng)用程序的啟動(dòng)時(shí)間。
[0083]在本發(fā)明的一種可選實(shí)施例中,考慮到上述啟動(dòng)等待方法的本次啟動(dòng)的等待結(jié)果參數(shù)的不公開和隱藏特性,可以通過反射調(diào)用來獲取其具體的值,具體地,上述依據(jù)所述啟動(dòng)等待方法的返回值,確定所述目標(biāo)應(yīng)用程序的啟動(dòng)時(shí)間的步驟,具體可以包括:
[0084]步驟S51、通過反射調(diào)用所述啟動(dòng)等待方法,獲得所述啟動(dòng)等待方法的本次啟動(dòng)的等待結(jié)果參數(shù)的返回值;其中,所述反射調(diào)用的參數(shù)具體可以包括:系統(tǒng)接口類的實(shí)例和所述本次啟動(dòng)的等待結(jié)果參數(shù);
[0085]步驟S52、將所述返回值確定為所述目標(biāo)應(yīng)用程序的啟動(dòng)時(shí)間。
[0086]可以理解,上述只是作為可選實(shí)施例,本發(fā)明實(shí)施例對(duì)于依據(jù)所述啟動(dòng)等待方法的返回值,確定所述目標(biāo)應(yīng)用程序的啟動(dòng)時(shí)間的具體實(shí)現(xiàn)過程不加以限制。
[0087]綜上,本發(fā)明實(shí)施例在獲取操作系統(tǒng)的啟動(dòng)等待方法后,啟動(dòng)