国产精品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>

      一種測試方法及裝置與流程

      文檔序號:12063585閱讀:236來源:國知局
      一種測試方法及裝置與流程

      本發(fā)明涉及移動測試技術(shù)領(lǐng)域,尤其涉及一種測試方法及裝置。



      背景技術(shù):

      隨著智能手機的發(fā)展,出現(xiàn)了多種支持智能手機的系統(tǒng),比如Android(安卓)系統(tǒng)。Android是一種以Linux為基礎(chǔ)的開放源碼操作系統(tǒng),主要使用于手機等移動終端。Android平臺由操作系統(tǒng)、中間件、用戶界面和應用軟件組成。

      隨著Android系統(tǒng)的市場占有率的增加,越來越多的開發(fā)者基于Android系統(tǒng)開發(fā)APP(Application,應用)?;顒咏M件(Activity)是安卓(Android)組件中最基本也是最為常見用的四大組件之一。

      Activity中所有操作都與用戶密切相關(guān),是一個負責與用戶交互的組件,可以顯示指定控件。在一個Android應用中,一個Activity通常就是一個單獨的屏幕,它上面可以顯示一些控件也可以監(jiān)聽并處理用戶的事件。在Android編程過程中,很多開發(fā)人員為了減少內(nèi)存泄露,會在activity onDestroy(界面銷毀時調(diào)用的函數(shù))中回收資源,較少變量的引用,將一些成員變量置空,而通過handler post的消息,特別是通過postDelayed(Runnable r,long delayMills)的線程需在用戶設(shè)定的延遲時間后才開始執(zhí)行,若線程執(zhí)行時界面銷毀,引用的變量為空,就會導致應用崩潰(Crash)。目前還未出現(xiàn)對這種由于界面銷毀導致Crash的情況進行測試的先例。



      技術(shù)實現(xiàn)要素:

      本發(fā)明的目的旨在至少在一定程度上解決相關(guān)技術(shù)中的技術(shù)問題之一。

      為此,本發(fā)明的第一個目的在于提出一種測試方法。該方法通過延長任務(wù)的延遲執(zhí)行時間,來延遲工作線程執(zhí)行所述任務(wù),由于任務(wù)執(zhí)行時間越靠后其對應的變量被置空的可能性越大,從而能夠提高復現(xiàn)手機應用界面銷毀使得變量為空后再引用導致Crash的概率。

      通過延長任務(wù)的延遲執(zhí)行時間,來提高發(fā)現(xiàn)崩潰的概率。因為任務(wù)執(zhí)行時間越靠后其對應的變量被置空的可能性越大。

      本發(fā)明的第二個目的在于提出一種測試裝置。

      本發(fā)明第一方面提供的一種測試方法,包括:確定目標任務(wù),所述目標任務(wù)供被測應用調(diào)用;延長所述目標任務(wù)的延遲執(zhí)行時間;根據(jù)延長后的延遲執(zhí)行時間將所述目標任務(wù)插入任務(wù)隊列;當所述目標任務(wù)處于任務(wù)隊列的隊頭時,提取出所述目標任務(wù);將所述目標任務(wù)分發(fā)至所述被測應用對應的工作線程,測試被測應用是否發(fā)生崩潰。

      優(yōu)選地,所述確定目標任務(wù)包括:獲取工作線程發(fā)送的待執(zhí)行任務(wù)和待執(zhí)行任務(wù)的延遲執(zhí)行時間;確定所述待執(zhí)行任務(wù)是否是通過post發(fā)送的封裝消息,若是,則確定所述待執(zhí)行任務(wù)是否供被測應用調(diào)用,若是,則判斷所述待執(zhí)行任務(wù)的延遲執(zhí)行時間是否小于預設(shè)的時長閾值,若是,則將所述待執(zhí)行任務(wù)確定為目標任務(wù)。

      優(yōu)選地,所述確定所述待執(zhí)行任務(wù)是否是通過post發(fā)送的封裝消息,包括:獲取所述待執(zhí)行任務(wù)的回調(diào)信息;判斷所述回調(diào)信息是否為空,若是,確定所述待執(zhí)行任務(wù)不是通過post發(fā)送的封裝消息,若否,確定所述待執(zhí)行任務(wù)是通過post發(fā)送的封裝消息。

      優(yōu)選地,所述確定確定所述待執(zhí)行任務(wù)是否供被測應用調(diào)用,包括:獲取調(diào)用堆棧;判斷調(diào)用堆棧是否包含被測應用信息,若是,確定所述待執(zhí)行任務(wù)供被測應用調(diào)用,若否,確定所述待執(zhí)行任務(wù)不供被測應用調(diào)用。

      優(yōu)選地,所述延長所述目標任務(wù)的延遲執(zhí)行時間包括:將所述目標任務(wù)的延遲執(zhí)行時間乘以設(shè)定倍數(shù)或者加上設(shè)定時長,計算得到延長后的延遲執(zhí)行時間;用延長后的延遲執(zhí)行時間替換所述延遲執(zhí)行時間。

      本發(fā)明第二方面提供的一種測試裝置,包括:確定單元,用于確定目標任務(wù),所述目標任務(wù)供被測應用調(diào)用;修改單元,用于延長所述目標任務(wù)的延遲執(zhí)行時間;插入單元,用于根據(jù)延長后的延遲執(zhí)行時間將所述目標任務(wù)插入任務(wù)隊列;提取單元,用于當所述目標任務(wù)處于任務(wù)隊列的隊頭時,提取出所述目標任務(wù);發(fā)送單元,用于將所述目標任務(wù)分發(fā)至所述被測應用對應的工作線程,測試被測應用是否發(fā)生崩潰。

      優(yōu)選地,所述確定單元包括:獲取子單元,用于獲取工作線程發(fā)送的待執(zhí)行任務(wù)和待執(zhí)行任務(wù)的延遲執(zhí)行時間;第一確定子單元,用于確定所述待執(zhí)行任務(wù)是否是通過post發(fā)送的封裝消息;第二確定子單元,用于在確定所述待執(zhí)行任務(wù)是通過post發(fā)送的封裝消息時,確定所述待執(zhí)行任務(wù)是否供被測應用調(diào)用;第三確定子單元,用于在確定所述待執(zhí)行任務(wù)是供被測應用調(diào)用時,判斷所述延遲執(zhí)行時間是否小于預設(shè)的時長閾值,若是,則將所述待執(zhí)行任務(wù)確定為目標任務(wù)。

      優(yōu)選地,所述第一確定子單元包括:第一獲取模塊,用于獲取所述待執(zhí)行任務(wù)的回調(diào)信息;第一確定模塊,用于判斷所述回調(diào)信息是否為空,若是,確定所述待執(zhí)行任務(wù)不是通過post發(fā)送的封裝消息,若否,確定所述待執(zhí)行任務(wù)是通過post發(fā)送的封裝消息。

      優(yōu)選地,所述第二確定子單元包括:第二獲取模塊,用于獲取調(diào)用堆棧;第二確定模塊,用于判斷調(diào)用堆棧是否包含被測應用信息,若是,確定所述待執(zhí)行任務(wù)供被測應用調(diào)用,若否,確定所述待執(zhí)行任務(wù)不供被測應用調(diào)用。

      優(yōu)選地,所述修改單元,具體用于將所述目標任務(wù)的延遲執(zhí)行時間乘以設(shè)定倍數(shù)或者加上設(shè)定時長,計算得到延長后的延遲執(zhí)行時間;用延長后的延遲執(zhí)行時間替換所述延遲執(zhí)行時間。

      本發(fā)明具有如下有益效果:

      上述技術(shù)方案中,通過獲取待執(zhí)行任務(wù),從待執(zhí)行任務(wù)中確定目標任務(wù),并延長目標任務(wù)的延遲執(zhí)行時間,然后根據(jù)延長后的延遲執(zhí)行時間將目標任務(wù)插入任務(wù)隊列,從而推遲目標任務(wù)的執(zhí)行。在目標任務(wù)執(zhí)行前,如果對應的界面被銷毀導致變量為空,則在工作線程執(zhí)行目標任務(wù)時對應的應用就會發(fā)生崩潰。本發(fā)明通過推遲目標任務(wù)的執(zhí)行,能夠提高復現(xiàn)手機應用界面銷毀導致變量為空后再引用導致Crash的概率。

      附圖說明

      為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案和優(yōu)點,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單的介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其它附圖。

      圖1是可用于實施本發(fā)明實施例的測試方法的計算機終端的硬件結(jié)構(gòu)框圖;

      圖2是本發(fā)明實施例1揭示的測試方法的流程圖;

      圖3是本發(fā)明實施例2揭示的消息處理方法的流程圖;

      圖4是本發(fā)明實施例2揭示的確定目標任務(wù)的方法流程圖;

      圖5是本發(fā)明實施例3揭示的測試裝置的示意圖;

      圖6是本發(fā)明實施例4揭示的測試裝置的示意圖;

      圖7是根據(jù)本發(fā)明實施例的計算機終端的結(jié)構(gòu)框圖。

      具體實施方式

      為了使本技術(shù)領(lǐng)域的人員更好地理解本發(fā)明方案,下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分的實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都應當屬于本發(fā)明保護的范圍。

      需要說明的是,本發(fā)明的說明書和權(quán)利要求書及上述附圖中的術(shù)語“第一”、“第二”等是用于區(qū)別類似的對象,而不必用于描述特定的順序或先后次序。應該理解這樣使用的數(shù)據(jù)在適當情況下可以互換,以便這里描述的本發(fā)明的實施例能夠以除了在這里圖示或描述的那些以外的順序?qū)嵤?。此外,術(shù)語“包括”和“具有”以及他們的任何變形,意圖在于覆蓋不排他的包含,例如,包含了一系列步驟或單元的過程、方法、系統(tǒng)、產(chǎn)品或設(shè)備不必限于清楚地列出的那些步驟或單元,而是可包括沒有清楚地列出的或?qū)τ谶@些過程、方法、產(chǎn)品或設(shè)備固有的其它步驟或單元。

      實施例1

      本實施例提供一種測試方法的實施例,需要說明的是,在附圖的流程圖示出的步驟可以在諸如一組計算機可執(zhí)行指令的計算機系統(tǒng)中執(zhí)行,并且,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟。

      本申請所提供的方法實施例可以在移動終端、計算機終端或者類似的運算裝置中執(zhí)行。以運行在計算機終端上為例,圖1是可用于實施本發(fā)明的測試方法的計算機終端的硬件結(jié)構(gòu)框圖。如圖1所示,計算機終端100可以包括一個或多個(圖中僅示出一個)處理器102(處理器102可以包括但不限于微處理器MCU或可編程邏輯器件FPGA等的處理裝置)、用于存儲數(shù)據(jù)的存儲器104、以及用于通信功能的傳輸裝置106。本領(lǐng)域普通技術(shù)人員可以理解,圖1所示的結(jié)構(gòu)僅為示意,其并不對上述電子裝置的結(jié)構(gòu)造成限定。例如,計算機終端100還可包括比圖1中所示更多或者更少的組件,或者具有與圖1所示不同的配置。

      存儲器104可用于存儲應用軟件的軟件程序以及模塊,如本發(fā)明實施例中的測試方法對應的程序指令/模塊,處理器102通過運行存儲在存儲器104內(nèi)的軟件程序以及模塊,從而執(zhí)行各種功能應用以及數(shù)據(jù)處理,即實現(xiàn)上述的測試方法。存儲器104可包括高速隨機存儲器,還可包括非易失性存儲器,如一個或者多個磁性存儲裝置、閃存、或者其他非易失性固態(tài)存儲器。在一些實例中,存儲器104可進一步包括相對于處理器102遠程設(shè)置的存儲器,這些遠程存儲器可以通過網(wǎng)絡(luò)連接至計算機終端10。上述網(wǎng)絡(luò)的實例包括但不限于互聯(lián)網(wǎng)、企業(yè)內(nèi)部網(wǎng)、局域網(wǎng)、移動通信網(wǎng)及其組合。

      傳輸裝置106用于經(jīng)由一個網(wǎng)絡(luò)接收或者發(fā)送數(shù)據(jù)。上述的網(wǎng)絡(luò)具體實例可包括計算機終端100的通信供應商提供的無線網(wǎng)絡(luò)。在一個實例中,傳輸裝置106包括一個網(wǎng)絡(luò)適配器(Network Interface Controller,簡稱為NIC),其可通過基站與其他網(wǎng)絡(luò)設(shè)備相連從而可與互聯(lián)網(wǎng)進行通訊。在一個實例中,傳輸裝置106可以為射頻(Radio Frequency,簡稱為RF)模塊,其用于通過無線方式與互聯(lián)網(wǎng)進行通訊。

      在上述運行環(huán)境下,本申請?zhí)峁┝巳鐖D3所示的一種測試方法。該方法可以應用于智能終端設(shè)備中,由智能終端設(shè)備中的處理器執(zhí)行,智能終端設(shè)備可以是智能手機、平板電腦等。智能終端設(shè)備中安裝有至少一個應用程序,本發(fā)明實施例并不限定應用程序的種類,可以為系統(tǒng)類應用程序,也可以為軟件類應用程序。

      圖2是本發(fā)明實施例1揭示的測試方法的流程圖。如圖2所示,該方法的一種可選的方案包括如下步驟:

      步驟S201:確定目標任務(wù),所述目標任務(wù)供被測應用調(diào)用;

      步驟S202:延長所述目標任務(wù)的延遲執(zhí)行時間;

      步驟S203:根據(jù)延長后的延遲執(zhí)行時間將所述目標任務(wù)插入任務(wù)隊列;

      步驟S204:當所述目標任務(wù)處于任務(wù)隊列的隊頭時,提取出所述目標任務(wù);

      步驟S205:將所述目標任務(wù)分發(fā)至所述被測應用對應的工作線程,測試被測應用是否發(fā)生崩潰。

      優(yōu)選地,所述步驟S201具體包括:獲取待執(zhí)行任務(wù)和待執(zhí)行任務(wù)的延遲執(zhí)行時間;確定所述待執(zhí)行任務(wù)是否是通過post發(fā)送的封裝消息,若是,則確定所述待執(zhí)行任務(wù)是否供被測應用調(diào)用,若是,則判斷所述待執(zhí)行任務(wù)的延遲執(zhí)行時間是否小于預設(shè)的時長閾值,若是,則將所述待執(zhí)行任務(wù)確定為目標任務(wù)。

      本實施例中,通過獲取待執(zhí)行任務(wù),從待執(zhí)行任務(wù)中確定目標任務(wù),并延長目標任務(wù)的延遲執(zhí)行時間,然后根據(jù)延長后的延遲執(zhí)行時間將目標任務(wù)插入任務(wù)隊列,從而推遲目標任務(wù)的執(zhí)行。在目標任務(wù)執(zhí)行前,如果對應的界面被銷毀導致變量為空,則在工作線程執(zhí)行目標任務(wù)時對應的應用就會發(fā)生崩潰。本發(fā)明通過推遲目標任務(wù)的執(zhí)行,能夠提高復現(xiàn)手機應用界面銷毀導致變量為空后再引用導致Crash的概率。

      實施例2

      本實施例涉及消息處理機制,下面首先就消息處理機制可能涉及的概念進行說明:

      1、MessageQueue

      消息隊列,存放消息的地方,按照FIFO規(guī)則執(zhí)行,每一個線程只可以擁有一個MessageQueue。在創(chuàng)建Looper對象會創(chuàng)建一個MessageQueue對象。

      2、Message

      消息對象,MessageQueue中存放的對象。一個MessageQueue中可以包含多個Message對象??梢酝ㄟ^Message.obtain()或者Handler.obtain Message()獲取Message對象。但是這并不一定是直接創(chuàng)建一個新的實例,而是先從消息池中看有沒有可用的Message實例,存在則直接取出返回這個實例。如果消息池中沒有可用的Message實例,則用給定的參數(shù)創(chuàng)建一個Message對象。調(diào)用remove Messages()時,將Message從MessageQueue中刪除,同時放入到消息池中。

      3、Looper

      操作MessageQueue。一個Looper對應一個MessageQueue。通過調(diào)用Looper.myLooper()可以獲得當前線程的Looper對象。Looper從MessageQueue中取出Message然后交由Handler的handle Message()進行處理。處理完成后,調(diào)用Message.recycle()將其放入消息池中。

      4、Handler

      消息的處理者。handler負責將需要傳遞的信息封裝成Message對象,然后調(diào)用sendMessage()方法將消息放入MessageQueue中。當MessageQueue循環(huán)到該Message,調(diào)用相應的handler對象的handle Message()方法對其進行處理。Handler都可以共享同一Looper和MessageQueue。

      消息處理機制流程如圖3所示。在一個Activity中,系統(tǒng)會自動幫用戶啟動Looper對象,Looper對象內(nèi)部維護一個消息隊列MessageQueue,調(diào)用loop方法后,Looper線程開始工作,它不斷從消息隊列MessageQueue中取出隊頭的消息(也叫任務(wù)),分析取出的消息,通過消息的參數(shù)判斷該消息對應的Handler,通過Handler將消息發(fā)送給對應的worker thread(工作線程)進行處理。

      作為一種將上述消息處理機制處理方法應用于Android系統(tǒng)的實施例,在工作線程執(zhí)行完任務(wù)后,需要通知activity更新UI界面,一種常用的方法就是通過UI線程的handler將Message、Runnable發(fā)送給UI線程,handler會將Message(Runnable也會封裝成Message)加入到UI線程的MessageQueue中,UI線程對應的Looper不斷從MessageQueue中取出Message,然后分發(fā)、再去執(zhí)行。

      在Android中handler用來進行進程間通信,Handler主要有send和post兩種方法。send方法是在工作線程中處理完操作后調(diào)用handler的sendMessage(message)把message對象發(fā)送給主線程,在主線程中重寫handlerMessage()方法,根據(jù)接收到的消息進行更新UI的操作;而post方法傳遞的是一個runnable對象,更新UI的操作也是在這個runnable的run方法中進行的,也就是說run方法中的代碼是執(zhí)行在主線程中的,雖然它是寫在工作線程中,主線程在接收到消息后自動執(zhí)行runnable的run方法中的代碼。其中,通過post方法傳遞的Runnable也會被封裝成Message對象,runnable賦值給Message對象的callback成員,而send方法中Message的callback會為空。這兩類方法最終都會調(diào)用sendMessageAtTime(Message msg,long uptimeMillis),其中第二個參數(shù)uptimeMillis用于將Message插入MessageQueue時會用到,入隊列時將根據(jù)uptimeMillis大小排序,在隊列中尋找一個位置插入,即uptimeMillis越大的消息將越靠后處理。

      根據(jù)Activity生命周期,UI界面銷毀時會調(diào)用onDestroy(),為了減少占用內(nèi)存,很多開發(fā)者都會在onDestroy()里釋放資源,將一些成員變量置空,如果一些工作線程處理完邏輯后需要更新UI界面,但此時UI界面已銷毀,工作線程引用到的變量已被置空,就會導致空指針Crash。

      針對上述現(xiàn)狀,為了在產(chǎn)品開發(fā)階段最大化發(fā)現(xiàn)這種由于UI界面銷毀導致Crash的問題,本實施例提供一種測試方法,可以提高復現(xiàn)界面銷毀導致Crash的概率,幫助開發(fā)任務(wù)定位問題。

      在如實施例1的運行環(huán)境下,本申請?zhí)峁┝艘环N測試方法。該方法的一種可選的方案包括如下步驟:

      步驟一:確定目標任務(wù),所述目標任務(wù)供被測應用調(diào)用。

      圖4是本發(fā)明實施例2揭示的確定目標任務(wù)的方法流程圖。參見圖4,確定目標任務(wù)的一種可選方法包括如下步驟:

      獲取工作線程發(fā)送的待執(zhí)行任務(wù)和待執(zhí)行任務(wù)的延遲執(zhí)行時間;

      確定所述待執(zhí)行任務(wù)是否是通過post發(fā)送的封裝消息,若是,則

      確定所述待執(zhí)行任務(wù)是否供被測應用調(diào)用,若是,則

      判斷所述待執(zhí)行任務(wù)的延遲執(zhí)行時間是否小于預設(shè)的時長閾值,若是,則將所述待執(zhí)行任務(wù)確定為目標任務(wù)。

      作為一種優(yōu)選方式,所述確定所述待執(zhí)行任務(wù)是否是通過post發(fā)送的封裝消息,包括:獲取所述待執(zhí)行任務(wù)的回調(diào)信息;判斷所述回調(diào)信息是否為空,若是,確定所述待執(zhí)行任務(wù)不是通過post發(fā)送的封裝消息,若否,確定所述待執(zhí)行任務(wù)是通過post發(fā)送的封裝消息。

      作為一種優(yōu)選方式,所述確定確定所述待執(zhí)行任務(wù)是否供被測應用調(diào)用,包括:獲取調(diào)用堆棧;判斷調(diào)用堆棧是否包含被測應用信息,若是,確定所述待執(zhí)行任務(wù)供被測應用調(diào)用,若否,確定所述待執(zhí)行任務(wù)不供被測應用調(diào)用。

      具體來說,本步驟通過hook sendMessageAtTime方法獲取兩個參數(shù)Message(待執(zhí)行任務(wù))和uptimeMillis(待執(zhí)行任務(wù)的延遲執(zhí)行時間),首先判斷Message.callback是否為空,若為空,說明是sendMessageXXX(Message)發(fā)過來的消息,不處理;不為空,說明是通過postXXX(Runnable)發(fā)過來經(jīng)過封裝的消息;然后判斷調(diào)用堆棧是否包括被測應用的信息,若沒有,說明是系統(tǒng)api調(diào)用postXXX(Runnable),不處理;否則是被測應用調(diào)用postXXX(Runnable),然后判斷第二個參數(shù)uptimeMillis,若大于某個設(shè)定值,說明開發(fā)者可能對這個Runnable的反饋結(jié)果不太關(guān)注,不處理,若小于某個設(shè)定值,說明開發(fā)者希望這個Runnable在短時間內(nèi)得到處理,則可以確定postXXX(Runnable)是目標任務(wù)。

      步驟二:延長所述目標任務(wù)的延遲執(zhí)行時間。

      在應用程序正常運行過程中,工作線程處理完任務(wù)后需要更新UI界面,而為了減少內(nèi)存占用,會調(diào)用函數(shù)onDestroy()銷毀UI界面,如果在工作線程處理任務(wù)之前UI界面已銷毀,會因更新UI引用的變量為空導致Crash。為此,本實施例提出通過延遲工作線程處理任務(wù)的時間,進而延遲UI界面更新,來提高發(fā)現(xiàn)這種Crash的概率。

      作為一種優(yōu)選方式,所述延長所述目標任務(wù)的延遲執(zhí)行時間包括:將所述目標任務(wù)的延遲執(zhí)行時間乘以設(shè)定倍數(shù),計算得到延長后的延遲執(zhí)行時間;用延長后的延遲執(zhí)行時間替換所述延遲執(zhí)行時間。

      作為另一種優(yōu)選方式,所述延長所述目標任務(wù)的延遲執(zhí)行時間包括:將所述目標任務(wù)的延遲執(zhí)行時間加上設(shè)定時長,計算得到延長后的延遲執(zhí)行時間;用延長后的延遲執(zhí)行時間替換所述延遲執(zhí)行時間。

      步驟三:根據(jù)延長后的延遲執(zhí)行時間將所述目標任務(wù)插入任務(wù)隊列。

      經(jīng)過步驟二中對目標任務(wù)延遲執(zhí)行時間的修改,此步驟中將目標任務(wù)插入隊列將參考修改后的延遲執(zhí)行時間,即:將修改后的延遲執(zhí)行時間的長短與任務(wù)隊列中各任務(wù)的延遲執(zhí)行時間的長短比較,按照延遲執(zhí)行時間由小至大進行排序,按照目標任務(wù)的延遲執(zhí)行在任務(wù)隊列中的排序序位,將目標任務(wù)插入任務(wù)隊列。

      步驟四:當所述目標任務(wù)處于任務(wù)隊列的隊頭時,提取出所述目標任務(wù)。

      步驟五:將所述目標任務(wù)分發(fā)至所述被測應用對應的工作線程,測試被測應用是否發(fā)生崩潰。

      UI主線程通過Looper循環(huán)查詢?nèi)蝿?wù)隊列,當發(fā)現(xiàn)任務(wù)隊列中存在任務(wù)時,會將隊頭任務(wù)從任務(wù)隊列中取出。當目標任務(wù)處于任務(wù)隊列的隊頭時,UI主線程提取出所述目標任務(wù),然后通過目標任務(wù)的參數(shù)判斷該目標任務(wù)對應的Handler,將該目標任務(wù)通過指定的Handler分發(fā)至被測應用對應的工作線程進行處理,若工作線程執(zhí)行所述目標任務(wù)時,該目標任務(wù)對應的變量已置空,則會導致空指針Crash,應用發(fā)生崩潰。本實施例通過在目標任務(wù)延遲執(zhí)行時間的基礎(chǔ)上進一步延遲目標任務(wù)的執(zhí)行,能夠提高復現(xiàn)手機應用界面銷毀導致變量為空后再引用導致Crash的概率。

      需要說明的是,對于前述的方法實施例,為了簡單描述,故將其都表述為一系列的動作組合,但是本領(lǐng)域技術(shù)人員應該知悉,本發(fā)明并不受所描述的動作順序的限制,因為依據(jù)本發(fā)明,某些步驟可以采用其他順序或者同時進行。其次,本領(lǐng)域技術(shù)人員也應該知悉,說明書中所描述的實施例均屬于優(yōu)選實施例,所涉及的動作和模塊并不一定是本發(fā)明所必須的。

      實施例3

      本實施例提供了一種實施上述測試方法的裝置。圖5所示的測試裝置,可用于實施實施例1所述的測試方法。如圖5所示,該裝置包括確定單元10、修改單元20、插入單元30、提取單元40和發(fā)送單元50。其中:

      確定單元10,用于確定目標任務(wù),所述目標任務(wù)供被測應用調(diào)用;

      修改單元20,用于延長所述目標任務(wù)的延遲執(zhí)行時間;

      插入單元30,用于根據(jù)延長后的延遲執(zhí)行時間將所述目標任務(wù)插入任務(wù)隊列;

      提取單元40,用于當所述目標任務(wù)處于任務(wù)隊列的隊頭時,提取出所述目標任務(wù);

      發(fā)送單元50,用于將所述目標任務(wù)分發(fā)至所述被測應用對應的工作線程,測試被測應用是否發(fā)生崩潰。

      該實施例的測試裝置中,確定單元10用于執(zhí)行本發(fā)明實施例1中的步驟S201,修改單元20用于執(zhí)行本發(fā)明實施例1中的步驟S202,插入單元30用于執(zhí)行本發(fā)明實施例1中的步驟S203,提取單元40用于執(zhí)行本發(fā)明實施例1中的步驟S204,發(fā)送單元50用于執(zhí)行本發(fā)明實施例1中的步驟S205。

      本實施例中,在將任務(wù)插入任務(wù)隊列之前,先確定目標任務(wù),并延長目標任務(wù)的延遲執(zhí)行時間,然后根據(jù)延長后的延遲執(zhí)行時間將目標任務(wù)插入任務(wù)隊列,從而推遲目標任務(wù)的執(zhí)行,能夠提高復現(xiàn)手機應用界面銷毀導致變量為空后再引用導致Crash的概率。

      實施例4

      本實施例還提供了一種實施上述測試方法的裝置。圖6所示的測試裝置,可用于實施實施例2所述的測試方法。如圖6所示,該裝置包括確定單元10、修改單元20、插入單元30、提取單元40和發(fā)送單元50。其中:

      確定單元10,用于確定目標任務(wù),所述目標任務(wù)供被測應用調(diào)用;

      修改單元20,用于延長所述目標任務(wù)的延遲執(zhí)行時間;

      插入單元30,用于根據(jù)延長后的延遲執(zhí)行時間將所述目標任務(wù)插入任務(wù)隊列;

      提取單元40,用于當所述目標任務(wù)處于任務(wù)隊列的隊頭時,提取出所述目標任務(wù);

      發(fā)送單元50,用于將所述目標任務(wù)分發(fā)至所述被測應用對應的工作線程,測試被測應用是否發(fā)生崩潰。

      可選地,所述確定單元包括獲取子單元11、第一確定子單元12、第二確定子單元13和第三確定子單元14。其中:

      獲取子單元11,用于獲取工作線程發(fā)送的待執(zhí)行任務(wù)和待執(zhí)行任務(wù)的延遲執(zhí)行時間;

      第一確定子單元12,用于確定所述待執(zhí)行任務(wù)是否是通過post發(fā)送的封裝消息;

      第二確定子單元13,用于在確定所述待執(zhí)行任務(wù)是通過post發(fā)送的封裝消息時,確定所述待執(zhí)行任務(wù)是否供被測應用調(diào)用;

      第三確定子單元14,用于在確定所述待執(zhí)行任務(wù)是供被測應用調(diào)用時,判斷所述延遲執(zhí)行時間是否小于預設(shè)的時長閾值,若是,則將所述待執(zhí)行任務(wù)確定為目標任務(wù)。

      可選地,所述第一確定子單元12包括第一獲取模塊121和第一確定模塊122。其中:

      第一獲取模塊121,用于獲取所述待執(zhí)行任務(wù)的回調(diào)信息;

      第一確定模塊122,用于判斷所述回調(diào)信息是否為空,若是,確定所述待執(zhí)行任務(wù)不是通過post發(fā)送的封裝消息,若否,確定所述待執(zhí)行任務(wù)是通過post發(fā)送的封裝消息。

      所述第二確定子單元13包括第二獲取模塊131和第二確定模塊132。其中:

      第二獲取模塊131,用于獲取調(diào)用堆棧;

      第二確定模塊132,用于判斷調(diào)用堆棧是否包含被測應用信息,若是,確定所述待執(zhí)行任務(wù)供被測應用調(diào)用,若否,確定所述待執(zhí)行任務(wù)不供被測應用調(diào)用。

      作為一種可選的實施方式,所述修改單元20,具體用于將所述目標任務(wù)的延遲執(zhí)行時間乘以設(shè)定倍數(shù)或者加上設(shè)定時長,計算得到延長后的延遲執(zhí)行時間;用延長后的延遲執(zhí)行時間替換所述延遲執(zhí)行時間。

      通過以上的實施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到根據(jù)上述實施例的方法可借助軟件加必需的通用硬件平臺的方式來實現(xiàn),當然也可以通過硬件,但很多情況下前者是更佳的實施方式?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品存儲在一個存儲介質(zhì)(如ROM/RAM、磁碟、光盤)中,包括若干指令用以使得一臺終端設(shè)備(可以是手機,計算機,服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個實施例所述的方法。

      實施例5

      本發(fā)明的實施例還提供了一種存儲介質(zhì)??蛇x地,在本實施例中,上述存儲介質(zhì)可以用于保存上述實施例的一種測試方法所執(zhí)行的程序代碼。

      可選地,在本實施例中,上述存儲介質(zhì)可以位于計算機網(wǎng)絡(luò)的多個網(wǎng)絡(luò)設(shè)備中的至少一個網(wǎng)絡(luò)設(shè)備。

      可選地,在本實施例中,存儲介質(zhì)被設(shè)置為存儲用于執(zhí)行以下步驟的程序代碼:

      第一步,確定目標任務(wù),所述目標任務(wù)供被測應用調(diào)用;

      第二步,延長所述目標任務(wù)的延遲執(zhí)行時間;

      第三步,根據(jù)延長后的延遲執(zhí)行時間將所述目標任務(wù)插入任務(wù)隊列;

      第四步,當所述目標任務(wù)處于任務(wù)隊列的隊頭時,提取出所述目標任務(wù);

      第五步,將所述目標任務(wù)分發(fā)至所述被測應用對應的工作線程,測試被測應用是否發(fā)生崩潰。

      可選地,存儲介質(zhì)還被設(shè)置為存儲用于執(zhí)行以下步驟的程序代碼:獲取工作線程發(fā)送的待執(zhí)行任務(wù)和待執(zhí)行任務(wù)的延遲執(zhí)行時間;確定所述待執(zhí)行任務(wù)是否是通過post發(fā)送的封裝消息,若是,則確定所述待執(zhí)行任務(wù)是否供被測應用調(diào)用,若是,則判斷所述待執(zhí)行任務(wù)的延遲執(zhí)行時間是否小于預設(shè)的時長閾值,若是,則將所述待執(zhí)行任務(wù)確定為目標任務(wù)。

      可選地,存儲介質(zhì)還被設(shè)置為存儲用于執(zhí)行以下步驟的程序代碼:獲取所述待執(zhí)行任務(wù)的回調(diào)信息;判斷所述回調(diào)信息是否為空,若是,確定所述待執(zhí)行任務(wù)不是通過post發(fā)送的封裝消息,若否,確定所述待執(zhí)行任務(wù)是通過post發(fā)送的封裝消息。

      可選地,存儲介質(zhì)還被設(shè)置為存儲用于執(zhí)行以下步驟的程序代碼:獲取調(diào)用堆棧;判斷調(diào)用堆棧是否包含被測應用信息,若是,確定所述待執(zhí)行任務(wù)供被測應用調(diào)用,若否,確定所述待執(zhí)行任務(wù)不供被測應用調(diào)用。

      可選地,存儲介質(zhì)還被設(shè)置為存儲用于執(zhí)行以下步驟的程序代碼:將所述目標任務(wù)的延遲執(zhí)行時間乘以設(shè)定倍數(shù)或者加上設(shè)定時長,計算得到延長后的延遲執(zhí)行時間;用延長后的延遲執(zhí)行時間替換所述延遲執(zhí)行時間。

      可選地,在本實施例中,上述存儲介質(zhì)可以包括但不限于:U盤、只讀存儲器(ROM,Read-Only Memory)、隨機存取存儲器(RAM,Random Access Memory)、移動硬盤、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。

      實施例6

      本發(fā)明的實施例還提供一種計算機終端,該計算機終端可以是計算機終端群中的任意一個計算機終端設(shè)備??蛇x地,在本實施例中,上述計算機終端也可以替換為移動終端等終端設(shè)備。

      可選地,在本實施例中,上述計算機終端可以位于計算機網(wǎng)絡(luò)的多個網(wǎng)絡(luò)設(shè)備中的至少一個網(wǎng)絡(luò)設(shè)備。

      可選地,圖7是根據(jù)本發(fā)明實施例的計算機終端的結(jié)構(gòu)框圖。如圖7所示,該計算機終端A可以包括:一個或多個(圖中僅示出一個)處理器701、存儲器703、以及傳輸裝置705。

      其中,存儲器703可用于存儲軟件程序以及模塊,如本發(fā)明實施例中的測試方法和裝置對應的程序指令/模塊,處理器701通過運行存儲在存儲器703內(nèi)的軟件程序以及模塊,從而執(zhí)行各種功能應用以及數(shù)據(jù)處理,即實現(xiàn)上述的測試。存儲器703可包括高速隨機存儲器,還可以包括非易失性存儲器,如一個或者多個磁性存儲裝置、閃存、或者其他非易失性固態(tài)存儲器。在一些實例中,存儲器703可進一步包括相對于處理器701遠程設(shè)置的存儲器,這些遠程存儲器可以通過網(wǎng)絡(luò)連接至計算機終端A。上述網(wǎng)絡(luò)的實例包括但不限于互聯(lián)網(wǎng)、企業(yè)內(nèi)部網(wǎng)、局域網(wǎng)、移動通信網(wǎng)及其組合。

      上述的傳輸裝置705用于經(jīng)由一個網(wǎng)絡(luò)接收或者發(fā)送數(shù)據(jù)。上述的網(wǎng)絡(luò)具體實例可包括有線網(wǎng)絡(luò)及無線網(wǎng)絡(luò)。在一個實例中,傳輸裝置705包括一個網(wǎng)絡(luò)適配器,其可通過網(wǎng)線與其他網(wǎng)絡(luò)設(shè)備與路由器相連從而可與互聯(lián)網(wǎng)或局域網(wǎng)進行通訊。在一個實例中,傳輸裝置705為射頻模塊,其用于通過無線方式與互聯(lián)網(wǎng)進行通訊。

      其中,具體地,存儲器703用于存儲預設(shè)動作條件和預設(shè)權(quán)限用戶的信息、以及應用程序。

      處理器701可以通過傳輸裝置調(diào)用存儲器703存儲的信息及應用程序,以執(zhí)行下述步驟:

      第一步,確定目標任務(wù),所述目標任務(wù)供被測應用調(diào)用;

      第二步,延長所述目標任務(wù)的延遲執(zhí)行時間;

      第三步,根據(jù)延長后的延遲執(zhí)行時間將所述目標任務(wù)插入任務(wù)隊列;

      第四步,當所述目標任務(wù)處于任務(wù)隊列的隊頭時,提取出所述目標任務(wù);

      第五步,將所述目標任務(wù)分發(fā)至所述被測應用對應的工作線程,測試被測應用是否發(fā)生崩潰。

      本實施例中的具體示例可以參考上述實施例1和實施例2中所描述的示例,在此不再贅述。

      上述本發(fā)明實施例序號僅僅為了描述,不代表實施例的優(yōu)劣。

      上述實施例中的集成的單元如果以軟件功能單元的形式實現(xiàn)并作為獨立的產(chǎn)品銷售或使用時,可以存儲在上述計算機可讀取的存儲介質(zhì)中?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻的部分或者該技術(shù)方案的全部或部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品存儲在存儲介質(zhì)中,包括若干指令用以使得一臺或多臺計算機設(shè)備(可為個人計算機、服務(wù)器或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個實施例所述方法的全部或部分步驟。

      在本發(fā)明的上述實施例中,對各個實施例的描述都各有側(cè)重,某個實施例中沒有詳述的部分,可以參見其他實施例的相關(guān)描述。

      在本申請所提供的幾個實施例中,應該理解到,所揭露的客戶端,可通過其它的方式實現(xiàn)。其中,以上所描述的裝置實施例僅僅是示意性的,例如所述單元的劃分,僅僅為一種邏輯功能劃分,實際實現(xiàn)時可以有另外的劃分方式,例如多個單元或組件可以結(jié)合或者可以集成到另一個系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,單元或模塊的間接耦合或通信連接,可以是電性或其它的形式。

      所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡(luò)單元上??梢愿鶕?jù)實際的需要選擇其中的部分或者全部單元來實現(xiàn)本實施例方案的目的。

      另外,在本發(fā)明各個實施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個單元中。上述集成的單元既可以采用硬件的形式實現(xiàn),也可以采用軟件功能單元的形式實現(xiàn)。

      當前第1頁1 2 3 
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1