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

一種基于代碼注入的移動(dòng)端應(yīng)用測(cè)試系統(tǒng)及方法

文檔序號(hào):10686970閱讀:161來源:國(guó)知局
一種基于代碼注入的移動(dòng)端應(yīng)用測(cè)試系統(tǒng)及方法
【專利摘要】本發(fā)明公開了一種基于代碼注入的移動(dòng)端應(yīng)用測(cè)試系統(tǒng)及方法,包括進(jìn)程劫持模塊,全自動(dòng)化測(cè)試模塊;進(jìn)程劫持模塊對(duì)系統(tǒng)進(jìn)程進(jìn)行檢測(cè),如果進(jìn)程存在則獲取進(jìn)程的唯一標(biāo)識(shí)符,對(duì)進(jìn)程進(jìn)行劫持,如果劫持成功,注入用于獲取進(jìn)程信息的代碼,用于實(shí)時(shí)檢測(cè)和獲取進(jìn)程的運(yùn)行信息,如果劫持失敗則返回失敗碼,如果進(jìn)程不存在返回進(jìn)程不存在碼;全自動(dòng)化測(cè)試模塊執(zhí)行循環(huán)獲取圖形繪制過程中幀繪制時(shí)間的信息。本發(fā)明對(duì)應(yīng)用運(yùn)行過程中的圖形運(yùn)行流暢度進(jìn)行自動(dòng)化的測(cè)試和分析,提高了測(cè)試的效率,而且不需要修改應(yīng)用的源代碼,適用于屏幕尺寸多樣的移動(dòng)Android設(shè)備,極大地方便了自動(dòng)化測(cè)試平臺(tái)和開發(fā)者對(duì)應(yīng)用進(jìn)行測(cè)試。
【專利說明】
一種基于代碼注入的移動(dòng)端應(yīng)用測(cè)試系統(tǒng)及方法
技術(shù)領(lǐng)域
[0001]本發(fā)明屬于軟件測(cè)試技術(shù)領(lǐng)域,涉及一類移動(dòng)端應(yīng)用軟件測(cè)試方法及一個(gè)完整的軟件測(cè)試系統(tǒng),特別使用代碼注入技術(shù)對(duì)應(yīng)用運(yùn)行的圖形繪制的幀率及幀繪制時(shí)間信息進(jìn)行自動(dòng)化獲取,可應(yīng)用于移動(dòng)端軟件的自動(dòng)測(cè)試、兼容性測(cè)試及游戲視頻等軟件的運(yùn)行流暢情況的性能測(cè)試。
【背景技術(shù)】
[0002]Android作為一個(gè)開放開源的平臺(tái),發(fā)展迅速,目前就應(yīng)用數(shù)量和開發(fā)者人數(shù)及市場(chǎng)份額而言,Android已經(jīng)取得了成功。據(jù)統(tǒng)計(jì)移動(dòng)設(shè)備擁有多種屏幕尺寸和分辨率,其數(shù)量已超過百億,而應(yīng)用的數(shù)量也不計(jì)其數(shù),它們能否在設(shè)備上運(yùn)行流暢直接影響用戶的體驗(yàn)。如果應(yīng)用運(yùn)行不流暢,出現(xiàn)屏幕撕裂、屏幕停滯甚至界面不響應(yīng)現(xiàn)象,可能使得用戶直接卸載該應(yīng)用,降低開發(fā)者的收入。對(duì)應(yīng)用運(yùn)行流暢情況進(jìn)行測(cè)試和分析非常重要。
[0003]幀率及16-ms-per-frame基準(zhǔn)用來評(píng)估和衡量應(yīng)用運(yùn)行流暢情況。由于幀率的直觀和數(shù)值表示,自動(dòng)化測(cè)試平臺(tái)常常使用幀率來量化應(yīng)用的流暢性能。通常,獲取幀率有兩種方式:一是親自編寫一個(gè)應(yīng)用,在其嵌入統(tǒng)計(jì)圖形渲染的代碼來獲取幀率信息;二是對(duì)應(yīng)用的安裝文件(apk文件)進(jìn)行反編譯,獲取該應(yīng)用的源代碼,然后嵌入相關(guān)代碼以獲取。雖然兩種方式都可以獲取幀率信息,但都需要修改應(yīng)用的源代碼,而且只能獲取本應(yīng)用的運(yùn)行幀率,而不能得到其他應(yīng)用的。
[0004]再者,目前Google及第三方提供了許多用于性能測(cè)試的工具,針對(duì)應(yīng)用運(yùn)行流暢情況的有Systrace,GPU呈現(xiàn)模式分析,GT和FPS Meter等。這些工具要么需要甚至修改應(yīng)用的源碼,要么無法獲取和保留應(yīng)用的幀率運(yùn)行信息,如Systrace可以幫助開發(fā)者收集Android關(guān)鍵子系統(tǒng)(如SurfaceFlinger服務(wù))的運(yùn)行信息,包括將該應(yīng)用的幀率清染信息按行顯示,并通過標(biāo)記不同的顏色來區(qū)分處理一幀的時(shí)間有沒有超過16ms等,從而幫助開發(fā)者更直觀的分析系統(tǒng)瓶頸,改進(jìn)應(yīng)用的性能,但是它檢測(cè)信息的同時(shí),需要運(yùn)行應(yīng)用的源碼。
[0005]實(shí)際中為了防止應(yīng)用代碼被竊取開發(fā)者會(huì)對(duì)應(yīng)用做加密處理,所以應(yīng)用的源碼是很難拿到的,需要獲取應(yīng)用源碼的方法或工具就很難對(duì)應(yīng)用進(jìn)行測(cè)試分析。另外,由于Android系統(tǒng)版本和設(shè)備繁多及日益增長(zhǎng)的應(yīng)用數(shù)量,對(duì)應(yīng)用進(jìn)行自動(dòng)測(cè)試不可避免,隨而涌現(xiàn)了許多自動(dòng)化測(cè)試平臺(tái),開發(fā)者可將應(yīng)用安裝文件(apk文件)上傳到平臺(tái)上進(jìn)行應(yīng)用性能進(jìn)行測(cè)試和分析。為了獲取應(yīng)用運(yùn)行流暢情況,自動(dòng)化測(cè)試平臺(tái)常常要求開發(fā)者上傳應(yīng)用之前按照流程嵌入相關(guān)的開發(fā)包及相應(yīng)代碼以便進(jìn)行測(cè)試,手續(xù)繁瑣,操作麻煩,不利于進(jìn)行大規(guī)模自動(dòng)化測(cè)試。

【發(fā)明內(nèi)容】

[0006]本發(fā)明技術(shù)解決問題:克服現(xiàn)有技術(shù)中存在的上述問題,提出了一種基于代碼注入的移動(dòng)端應(yīng)用測(cè)試的系統(tǒng)及方法,極大地提高了應(yīng)用測(cè)試的效率,并提供了基于代碼注入技術(shù)實(shí)現(xiàn)的系統(tǒng)方法。
[0007]本發(fā)明技術(shù)解決方案:一種基于代碼注入的移動(dòng)端應(yīng)用測(cè)試的系統(tǒng)及方法,包括:進(jìn)程劫持模塊、全自動(dòng)化測(cè)試模塊、鏈接庫(kù)文件模塊、文件傳輸模塊、ShellExecute執(zhí)行命令模塊、Andro id底層庫(kù)、Linux內(nèi)核,其中進(jìn)程劫持模塊、全自動(dòng)化測(cè)試模塊位于頂層的應(yīng)用層,鏈接庫(kù)文件模塊、文件傳輸模塊、ShellExecute執(zhí)行命令模塊位于中間層,Android底層庫(kù)、Linux內(nèi)核位于底層:
[0008]進(jìn)程劫持模塊,采用代碼注入技術(shù),在移動(dòng)端設(shè)備運(yùn)行過程中通過調(diào)用鏈接庫(kù)文件模塊的動(dòng)態(tài)鏈接庫(kù)對(duì)系統(tǒng)進(jìn)程(SurfaceFlinger進(jìn)程)進(jìn)行獲取,如果進(jìn)程存在,獲取進(jìn)程的唯一標(biāo)識(shí)符并執(zhí)行進(jìn)程劫持,如果劫持成功則注入靜態(tài)鏈接庫(kù)到該進(jìn)程,同時(shí)通過文件傳輸模塊將檢測(cè)到的進(jìn)程中應(yīng)用圖像運(yùn)行的幀率信息進(jìn)行獲取,如果劫持失敗返回失敗碼,如果進(jìn)程不存在返回進(jìn)程不存在碼,它依賴于鏈接庫(kù)文件模塊和文件傳輸模塊;
[0009]全自動(dòng)化測(cè)試模塊,在不影響移動(dòng)端應(yīng)用運(yùn)行情況下后臺(tái)運(yùn)行,通過Shel IExecute執(zhí)行命令模塊的adb she 11獲取移動(dòng)端屏幕圖像幀繪制時(shí)間信息和Andro id底層庫(kù)獲取移動(dòng)端設(shè)備信息,并調(diào)用文件傳輸模塊對(duì)獲取到的信息進(jìn)行存儲(chǔ),以實(shí)現(xiàn)自動(dòng)地獲取應(yīng)用運(yùn)行過程中圖像的幀繪制時(shí)間等詳細(xì)信息,依賴于ShellExecute執(zhí)行命令模塊和文件傳輸模塊。
[0010]鏈接庫(kù)文件模塊,通過Java本地接口(Java Native Interface,JNI)將C/C++文件進(jìn)行調(diào)用并使用本地開發(fā)包(Native Development Kit,NDK)將這些文件編譯為多個(gè)平臺(tái)(armeabi,armeabi_v7a,x86)下可執(zhí)行的動(dòng)態(tài)鏈接庫(kù)和靜態(tài)鏈接庫(kù);
[0011]文件傳輸模塊,使用Android庫(kù)中的adb或http通信協(xié)議,傳輸數(shù)據(jù)到上層的進(jìn)程劫持模塊和全自動(dòng)化測(cè)試模塊,數(shù)據(jù)包括移動(dòng)設(shè)備應(yīng)用屏幕圖像運(yùn)行的幀率和圖像的幀繪制時(shí)間信息及移動(dòng)設(shè)備相關(guān)的信息;
[0012]ShelIExecute執(zhí)行命令模塊,對(duì)ShelIExecute進(jìn)行了封裝,循環(huán)執(zhí)行adb shell命令檢測(cè)和獲取應(yīng)用運(yùn)行過程中圖像幀繪制時(shí)間信息,調(diào)用文件傳輸模塊將信息寫入文件并進(jìn)行格式處理;
[0013]Android 底層庫(kù),底層依賴,包括 OpenGL ES、SGL、Surface Manager ,Android 自帶的基礎(chǔ)庫(kù),為上層的鏈接庫(kù)文件模塊和文件傳輸模塊提供基礎(chǔ)的移動(dòng)端操作接口;
[0014]Linux內(nèi)核,底層依賴,作為硬件和軟件之間的抽象層,為中間層(鏈接庫(kù)文件模塊,文件傳輸模塊和Shel IExecute執(zhí)行命令模塊)提供了依賴支持,隱藏具體硬件細(xì)節(jié)提供Andr ο i d的核心系統(tǒng)服務(wù)。
[0015]進(jìn)程劫持模塊在移動(dòng)端設(shè)備運(yùn)行過程中將自動(dòng)加載并執(zhí)行鏈接庫(kù)文件模塊的靜態(tài)鏈接庫(kù),對(duì)界面組合數(shù)據(jù)對(duì)移動(dòng)端應(yīng)用屏幕圖像的圖形交換接口進(jìn)行重寫并實(shí)時(shí)檢測(cè)圖像的幀率調(diào)用文件傳輸模塊對(duì)其進(jìn)行獲取對(duì)負(fù)責(zé)圖形界面呈現(xiàn)的幀緩沖區(qū)進(jìn)行實(shí)時(shí)檢測(cè)。
[0016]所述進(jìn)程劫持模塊代碼注入技術(shù)使用內(nèi)存代碼注入,直接將代碼寫入目標(biāo)進(jìn)程(是任何你想注入的進(jìn)程,此處為系統(tǒng)進(jìn)程一 SurfaceFlinger進(jìn)程),并啟動(dòng)鏈接庫(kù)文件模塊的遠(yuǎn)程線程注入功能注入靜態(tài)鏈接庫(kù)遠(yuǎn)程線程對(duì)應(yīng)用的運(yùn)行性能進(jìn)行監(jiān)控。
[0017]進(jìn)程劫持模塊所述代碼注入技術(shù)在不修改Android移動(dòng)端應(yīng)用的源碼且不用重啟Android系統(tǒng)的情況下可實(shí)時(shí)檢測(cè)到應(yīng)用運(yùn)行過程中屏幕圖像運(yùn)行幀率及應(yīng)用圖像幀繪制時(shí)間信息數(shù)據(jù)進(jìn)行自動(dòng)化獲取。
[0018]所述進(jìn)程劫持模塊代碼注入技術(shù)用于系統(tǒng)升級(jí)及加固,對(duì)應(yīng)用自動(dòng)化測(cè)試的同時(shí)不對(duì)系統(tǒng)及應(yīng)用產(chǎn)生安全威脅行為。
[0019]基于代碼注入的移動(dòng)端應(yīng)用測(cè)試方法,其特征在實(shí)現(xiàn)步驟如下:
[0020]步驟1、啟動(dòng)服務(wù)通過adb或者h(yuǎn)ttp協(xié)議獲取設(shè)備運(yùn)行平臺(tái)及設(shè)備型號(hào)信息,同時(shí)執(zhí)行步驟2和步驟5 ;
[0021]步驟2、執(zhí)行鏈接庫(kù)文件模塊中的動(dòng)態(tài)鏈接庫(kù)列出Android系統(tǒng)中所有進(jìn)程并查詢系統(tǒng)中是否存在用于呈現(xiàn)應(yīng)用屏幕圖形的系統(tǒng)進(jìn)程,如果不存在返回進(jìn)程不存在碼;
[0022]步驟3、獲取進(jìn)程的唯一標(biāo)識(shí)符,對(duì)進(jìn)程進(jìn)行跟蹤,獲取進(jìn)程執(zhí)行信息,啟動(dòng)遠(yuǎn)程線程將相應(yīng)平臺(tái)下的鏈接庫(kù)文件模塊的靜態(tài)鏈接庫(kù)注入到該進(jìn)程,如果劫持進(jìn)程失敗,返回失敗碼;
[0023]步驟4、自動(dòng)加載并調(diào)用重寫的界面組合數(shù)據(jù)的圖形交換接口,通過adb或http協(xié)議獲取進(jìn)程中移動(dòng)端屏幕運(yùn)行過程中的幀率;
[0024]步驟5、創(chuàng)建線程循環(huán)調(diào)用adb協(xié)議獲取應(yīng)用運(yùn)行過程中圖像的幀繪制時(shí)間信息應(yīng)用運(yùn)行過程中幀繪制時(shí)間信息。
[0025]本發(fā)明與現(xiàn)有技術(shù)相比的優(yōu)點(diǎn)在于:
[0026]本發(fā)明使用代碼注入技術(shù)實(shí)現(xiàn)了移動(dòng)端的測(cè)試,可應(yīng)用在屏幕尺寸不同、運(yùn)行環(huán)境多樣的各種設(shè)備中,根據(jù)設(shè)備運(yùn)行的平臺(tái)執(zhí)行相應(yīng)的測(cè)試代碼,擁有非常強(qiáng)大的適配性,相比于傳統(tǒng)獲取應(yīng)用流暢性能的測(cè)試方法,本方法不需要應(yīng)用的源碼,操作簡(jiǎn)單,可直接運(yùn)行在多平臺(tái)上獲取多個(gè)應(yīng)用運(yùn)行的流暢情況;
[0027]本發(fā)明提出了一種基于代碼注入的移動(dòng)端應(yīng)用流暢性能測(cè)試的方法,可以實(shí)時(shí)地對(duì)應(yīng)用進(jìn)行自動(dòng)化檢測(cè),獲取和保留應(yīng)用運(yùn)行過程中圖形繪制幀率及幀繪制時(shí)間等信息,滿足了對(duì)應(yīng)用進(jìn)行大規(guī)模自動(dòng)化測(cè)試的需求。
[0028]本發(fā)明使用后臺(tái)服務(wù)調(diào)用自動(dòng)化測(cè)試流程,可以在不影響應(yīng)用運(yùn)行情況下實(shí)現(xiàn)檢測(cè)應(yīng)用的性能。
[0029]本發(fā)明對(duì)應(yīng)用運(yùn)行過程中的圖形運(yùn)行流暢度進(jìn)行自動(dòng)化的測(cè)試和分析,提高了測(cè)試的效率,而且不需要修改應(yīng)用的源代碼,適用于屏幕尺寸多樣的移動(dòng)Android設(shè)備,極大地方便了自動(dòng)化測(cè)試平臺(tái)和開發(fā)者對(duì)應(yīng)用進(jìn)行測(cè)試。
【附圖說明】
[0030]圖1為本發(fā)明的系統(tǒng)架構(gòu)圖;
[0031 ]圖2為基于代碼注入技術(shù)的系統(tǒng)測(cè)試的流程圖;
[0032]圖3為進(jìn)程劫持模塊采用的代碼注入技術(shù)的詳細(xì)流程圖;
[0033]圖4為進(jìn)程劫持模塊和全自動(dòng)化測(cè)試模塊部分實(shí)驗(yàn)結(jié)果;
[0034]圖5為系統(tǒng)測(cè)試中運(yùn)行流暢性能分析的折線圖。
【具體實(shí)施方式】
[0035]本發(fā)明的原理:
[0036]1.代碼注入技術(shù)不需要獲取應(yīng)用的源碼更不用對(duì)應(yīng)用的源碼進(jìn)行修改,它使用內(nèi)存代碼注入,直接將代碼寫入系統(tǒng)進(jìn)程,可以對(duì)運(yùn)行在移動(dòng)端設(shè)備的多個(gè)應(yīng)用進(jìn)行檢測(cè)和分析,相比傳統(tǒng)方式操作更為簡(jiǎn)單,同時(shí)省時(shí)省力,準(zhǔn)確性很高。
[0037]目前現(xiàn)有的分析應(yīng)用流暢性能的工具,往往需要應(yīng)用源碼比如Systrace或者無法記錄保留應(yīng)用運(yùn)行流暢的數(shù)據(jù)如FPS Meter。針對(duì)移動(dòng)端測(cè)試過程中的特點(diǎn),設(shè)計(jì)了代碼注入技術(shù),實(shí)現(xiàn)了不修改應(yīng)用源碼的情況下對(duì)應(yīng)用進(jìn)行實(shí)時(shí)檢測(cè)并記錄運(yùn)行數(shù)據(jù),極大地方便了自動(dòng)化測(cè)試。
[0038]如圖1所示,本發(fā)明系統(tǒng)的架構(gòu)主要分為三層:
[0039]最底層、主要是Android底層庫(kù)和Linux內(nèi)核,Android底層庫(kù),底層依賴,包括OpenGL ES,SGL,Surf ace Manager等,Android自帶的基礎(chǔ)庫(kù),為上層的鏈接庫(kù)文件模塊和文件傳輸模塊提供基礎(chǔ)的移動(dòng)端操作接口,Linux內(nèi)核,底層依賴,為文件傳輸模塊和ShellExecute執(zhí)行命令模塊提供支持,作為移動(dòng)端硬件和(系統(tǒng)和應(yīng)用)軟件之間的抽象層,隱藏具體硬件細(xì)節(jié)提供Android的核心系統(tǒng)服務(wù)。
[0040]中間層、主要是代碼注入技術(shù)實(shí)現(xiàn)的鏈接庫(kù)文件模塊、為進(jìn)程劫持模塊和全自動(dòng)化模塊提供獲取和傳輸數(shù)據(jù)的文件傳輸模塊,及為全自動(dòng)化模塊提供服務(wù)的Shel IExecute執(zhí)行命令模塊,鏈接庫(kù)文件模塊,通過Java本地接口(Java Native Interface,JNI)將C/C++文件進(jìn)行調(diào)用并使用本地開發(fā)包(Native Development Kit,NDK)將這些文件編譯為多個(gè)平臺(tái)下可執(zhí)行的動(dòng)態(tài)鏈接庫(kù)和靜態(tài)鏈接庫(kù);文件傳輸模塊,使用Android庫(kù)中的adb或http通信協(xié)議,傳輸數(shù)據(jù)到上層的進(jìn)程劫持模塊和全自動(dòng)化測(cè)試模塊,數(shù)據(jù)包括移動(dòng)設(shè)備應(yīng)用屏幕圖像運(yùn)行的幀率和圖像的幀繪制時(shí)間信息及移動(dòng)設(shè)備相關(guān)的信,ShellExecute執(zhí)行命令模塊,對(duì)shell命令及命令執(zhí)行路徑的調(diào)用執(zhí)行ShellExecute進(jìn)行了封裝,創(chuàng)建線程循環(huán)執(zhí)行adb shell命令檢測(cè)和獲取應(yīng)用運(yùn)行過程中圖像幀繪制時(shí)間信息,調(diào)用文件傳輸模塊將信息寫入文件并進(jìn)行格式處理。
[0041]應(yīng)用層、主要有兩個(gè)最核心的功能,基于代碼注入技術(shù)的進(jìn)程劫持模塊,以及全自動(dòng)化測(cè)試模塊,進(jìn)程劫持模塊,采用代碼注入技術(shù),通過調(diào)用鏈接庫(kù)文件模塊的動(dòng)態(tài)鏈接庫(kù)對(duì)系統(tǒng)進(jìn)程(SurfaceFlinger進(jìn)程)進(jìn)行獲取,如果進(jìn)程存在,獲取進(jìn)程的唯一標(biāo)識(shí)符并執(zhí)行進(jìn)程劫持,如果劫持成功則注入靜態(tài)鏈接庫(kù)到該進(jìn)程,同時(shí)通過文件傳輸模塊將檢測(cè)到的進(jìn)程中應(yīng)用圖像運(yùn)行的幀率信息進(jìn)行獲取,如果劫持失敗返回失敗碼,如果進(jìn)程不存在返回進(jìn)程不存在碼,它依賴于鏈接庫(kù)文件模塊和文件傳輸模塊;全自動(dòng)化測(cè)試模塊,在不影響移動(dòng)端應(yīng)用運(yùn)行情況下后臺(tái)運(yùn)行,通過ShellExecute執(zhí)行命令模塊的adb shell獲取移動(dòng)端屏幕圖像幀繪制時(shí)間信息和移動(dòng)端設(shè)備相關(guān)的信息,并調(diào)用文件傳輸模塊對(duì)獲取到的ig息進(jìn)行存儲(chǔ)。
[0042]本發(fā)明的方法中,移動(dòng)端應(yīng)用測(cè)試系統(tǒng)是基于代碼注入的進(jìn)程劫持模塊及全自動(dòng)化測(cè)試模塊,測(cè)試的主要流程為,啟動(dòng)服務(wù)調(diào)用后臺(tái)服務(wù),打開一個(gè)應(yīng)用,對(duì)應(yīng)用進(jìn)行正常操作,后臺(tái)服務(wù)將執(zhí)行進(jìn)程劫持模塊對(duì)應(yīng)用進(jìn)行測(cè)試,獲取設(shè)備的運(yùn)行平臺(tái)及設(shè)備型號(hào)信息,查詢系統(tǒng)中是否存在目標(biāo)進(jìn)程,如果存在獲取進(jìn)程的唯一標(biāo)識(shí)符對(duì)進(jìn)程進(jìn)行跟蹤,將相應(yīng)平臺(tái)下的靜態(tài)鏈接庫(kù)加載到進(jìn)程,自動(dòng)加載并調(diào)用重寫的界面組合數(shù)據(jù)的圖形交換接口,檢測(cè)幀緩沖區(qū)刷新信息,通過adb或http協(xié)議獲取進(jìn)程中移動(dòng)端應(yīng)用運(yùn)行流暢性能信息,同時(shí)后臺(tái)服務(wù)循環(huán)調(diào)用adb協(xié)議獲取應(yīng)用運(yùn)行過程中幀繪制時(shí)間信息,如圖2所示。
[0043]移動(dòng)應(yīng)用基于代碼注入的測(cè)試模塊,測(cè)試的主要流程為,測(cè)試一個(gè)應(yīng)用,正常操作應(yīng)用的同時(shí)后臺(tái)查詢并獲取目標(biāo)進(jìn)程,跟蹤目標(biāo)進(jìn)程,注入用于檢測(cè)應(yīng)用運(yùn)行流暢信息的代碼到進(jìn)程,實(shí)時(shí)獲取和記錄應(yīng)用運(yùn)行流暢數(shù)據(jù)。代碼注入的主要步驟包括(見圖3)。
[0044]如圖3所示,本發(fā)明基于代碼注入技術(shù)主要分為三個(gè)步驟:
[0045]步驟1、執(zhí)行鏈接庫(kù)文件模塊中的動(dòng)態(tài)鏈接庫(kù)列出系統(tǒng)中所有進(jìn)程并查詢移動(dòng)端設(shè)備系統(tǒng)中是否存在用于呈現(xiàn)應(yīng)用屏幕圖形的系統(tǒng)進(jìn)程,如果不存在返回進(jìn)程不存在碼;
[0046]步驟2、獲取進(jìn)程的唯一標(biāo)識(shí)符,對(duì)進(jìn)程進(jìn)行跟蹤,獲取進(jìn)程執(zhí)行信息,啟動(dòng)遠(yuǎn)程線程將相應(yīng)平臺(tái)下的鏈接庫(kù)文件模塊中的靜態(tài)鏈接庫(kù)注入到該進(jìn)程,靜態(tài)鏈接庫(kù)是事先寫好的重寫圖形交換接口的代碼然后經(jīng)過本地編譯工具編譯而生成的,如果劫持進(jìn)程失敗,返回失敗碼;
[0047]步驟3、自動(dòng)加載并調(diào)用重寫的界面組合數(shù)據(jù)的圖形交換接口,通過adb或http協(xié)議獲取進(jìn)程中移動(dòng)端屏幕運(yùn)行過程中的幀率。
[0048]提供以上實(shí)施例僅僅是為了描述本發(fā)明的目的,而并非要限制本發(fā)明的范圍。本發(fā)明的范圍由所附權(quán)利要求限定。不脫離本發(fā)明的精神和原理而做出的各種等同替換和修改,均應(yīng)涵蓋在本發(fā)明的范圍之內(nèi)。
[0049]部分系統(tǒng)實(shí)驗(yàn)結(jié)果
[0050]基于代碼注入的系統(tǒng)測(cè)試見圖4,保證移動(dòng)終端運(yùn)行在無毒干凈獨(dú)立真實(shí)的測(cè)試環(huán)境下,在Android手機(jī)上運(yùn)行相同的測(cè)試流程,使用了一個(gè)對(duì)比試驗(yàn),比較在相同的移動(dòng)終端上運(yùn)行不同的應(yīng)用(一共5個(gè)應(yīng)用,每個(gè)應(yīng)用運(yùn)行3次,時(shí)間限制為3分鐘),分別是它們的運(yùn)行過程中的問題幀百分比,平均每幀繪制的時(shí)間,幀率,以及幀繪制步驟中占時(shí)最長(zhǎng)的步驟,可以發(fā)現(xiàn)測(cè)試運(yùn)行過程中,代碼注入技術(shù)可以執(zhí)行成功,全自動(dòng)化測(cè)試運(yùn)行穩(wěn)定,能實(shí)現(xiàn)測(cè)試的目標(biāo)??蓪⒉糠謱?shí)驗(yàn)數(shù)據(jù)繪制成折線圖,見圖5,問題幀百分比,幀繪制時(shí)間及幀率,這些都可用于量化和分析應(yīng)用運(yùn)行流暢度情況,進(jìn)一步分析問題幀占比及平均每幀繪制的時(shí)間和幀率的關(guān)系,探討性能指標(biāo)的準(zhǔn)確性以及幫助定位運(yùn)行不流暢情況。
[0051]提供以上實(shí)施例僅僅是為了描述本發(fā)明的目的,而并非要限制本發(fā)明的范圍。本發(fā)明的范圍由所附權(quán)利要求限定。不脫離本發(fā)明的精神和原理而做出的各種等同替換和修改,均應(yīng)涵蓋在本發(fā)明的范圍之內(nèi)。
【主權(quán)項(xiàng)】
1.一種基于代碼注入的移動(dòng)端應(yīng)用測(cè)試系統(tǒng),其特征在于:包括進(jìn)程劫持模塊、全自動(dòng)化測(cè)試模塊、鏈接庫(kù)文件模塊、文件傳輸模塊、She I IExecute執(zhí)行命令模塊、Android底層庫(kù)、Linux內(nèi)核;其中進(jìn)程劫持模塊、全自動(dòng)化測(cè)試模塊位于頂層的應(yīng)用層,鏈接庫(kù)文件模塊、文件傳輸模塊、Shel IExecute執(zhí)行命令模塊位于中間層,Android底層庫(kù)、Linux內(nèi)核位于底層; 進(jìn)程劫持模塊,采用代碼注入技術(shù),通過調(diào)用鏈接庫(kù)文件模塊的動(dòng)態(tài)鏈接庫(kù)對(duì)Android的系統(tǒng)進(jìn)程進(jìn)行獲取,如果進(jìn)程存在,獲取該進(jìn)程的唯一標(biāo)識(shí)符并執(zhí)行進(jìn)程劫持,如果劫持成功則注入鏈接庫(kù)文件模塊的靜態(tài)鏈接庫(kù)到該進(jìn)程,靜態(tài)鏈接庫(kù)文件將自動(dòng)執(zhí)行實(shí)時(shí)地檢測(cè)并獲取進(jìn)程中應(yīng)用圖像運(yùn)行的幀率信息,并調(diào)用文件傳輸模塊將幀率信息數(shù)據(jù)傳輸并保存到指定目錄的文件中,同時(shí)通過文件傳輸模塊將檢測(cè)到的進(jìn)程中應(yīng)用圖像運(yùn)行的幀率信息進(jìn)行獲取,如果劫持失敗返回失敗碼,如果進(jìn)程不存在返回進(jìn)程不存在碼,靜態(tài)鏈接庫(kù)將不被注入系統(tǒng)進(jìn)程中,也不會(huì)調(diào)用文件傳輸模塊獲取應(yīng)用運(yùn)行信息; 全自動(dòng)化測(cè)試模塊,在不影響移動(dòng)端應(yīng)用運(yùn)行情況下后臺(tái)運(yùn)行,通過Shel IExecute執(zhí)行命令模塊的adb shell獲取移動(dòng)端屏幕圖像幀繪制時(shí)間信息和移動(dòng)端設(shè)備相關(guān)的信息,并調(diào)用文件傳輸模塊對(duì)獲取到的信息進(jìn)行存儲(chǔ); 鏈接庫(kù)文件模塊,通過Java本地接口將C/C++文件進(jìn)行調(diào)用,并使用本地開發(fā)包將這些文件編譯為多個(gè)平臺(tái)下可執(zhí)行的動(dòng)態(tài)鏈接庫(kù)和靜態(tài)鏈接庫(kù); 文件傳輸模塊,使用Android庫(kù)中的adb或http通信協(xié)議,傳輸數(shù)據(jù)到上層的進(jìn)程劫持模塊和全自動(dòng)化測(cè)試模塊,數(shù)據(jù)包括移動(dòng)設(shè)備應(yīng)用屏幕圖像運(yùn)行的幀率信息和圖像的幀繪制時(shí)間信息及移動(dòng)設(shè)備相關(guān)的信息; She I IExecute執(zhí)行命令模塊,對(duì)She I IExecute進(jìn)行了封裝,循環(huán)執(zhí)行adb she 11命令檢測(cè)和獲取應(yīng)用運(yùn)行過程中圖像幀繪制時(shí)間信息,調(diào)用文件傳輸模塊將圖像幀繪制時(shí)間信息寫入文件,并進(jìn)行格式處理; Android底層庫(kù),底層依賴,包括Android自帶的基礎(chǔ)庫(kù),為上層的鏈接庫(kù)文件模塊和文件傳輸模塊提供基礎(chǔ)的移動(dòng)端操作接口 ; Linux內(nèi)核,底層依賴,作為移動(dòng)端Android設(shè)備硬件和Android系統(tǒng)及應(yīng)用軟件之間的抽象層,為中間層,即鏈接庫(kù)文件模塊,文件傳輸模塊和Shel IExecute執(zhí)行命令模塊提供了依賴支持,隱藏具體硬件細(xì)節(jié)提供Andro i d的核心系統(tǒng)服務(wù)。2.根據(jù)權(quán)利要求1所述的基于代碼注入的移動(dòng)端應(yīng)用測(cè)試系統(tǒng),其特征在于:所述代碼注入技術(shù)使用內(nèi)存代碼注入,直接將代碼寫入系統(tǒng)進(jìn)程,該系統(tǒng)進(jìn)程作為目標(biāo)進(jìn)程,并啟動(dòng)鏈接庫(kù)文件模塊的遠(yuǎn)程線程注入功能注入靜態(tài)鏈接庫(kù)的遠(yuǎn)程線程對(duì)應(yīng)用的運(yùn)行性能進(jìn)行監(jiān)控,在不修改應(yīng)用的源碼且不用重啟系統(tǒng)的情況下,可實(shí)時(shí)檢測(cè)到多應(yīng)用運(yùn)行過程中圖形運(yùn)行流暢情況及對(duì)應(yīng)用圖形幀率數(shù)據(jù)進(jìn)行自動(dòng)化獲取。3.—種基于代碼注入的移動(dòng)端應(yīng)用測(cè)試方法,其特征在于實(shí)現(xiàn)步驟如下: 步驟1、啟動(dòng)全自動(dòng)化測(cè)試模塊的后臺(tái)運(yùn)行,通過adb或者h(yuǎn)ttp協(xié)議獲取設(shè)備運(yùn)行平臺(tái)及設(shè)備型號(hào)信息,同時(shí)執(zhí)行步驟2和步驟5; 步驟2、執(zhí)行鏈接庫(kù)文件模塊中的動(dòng)態(tài)鏈接庫(kù)列出Android系統(tǒng)中所有進(jìn)程并查詢系統(tǒng)中是否存在用于呈現(xiàn)應(yīng)用屏幕圖形的系統(tǒng)進(jìn)程,如果不存在返回進(jìn)程不存在碼; 步驟3、獲取進(jìn)程的唯一標(biāo)識(shí)符,對(duì)進(jìn)程進(jìn)行跟蹤,獲取進(jìn)程執(zhí)行信息,執(zhí)行信息,包括進(jìn)程執(zhí)行的內(nèi)存地址,啟動(dòng)遠(yuǎn)程線程注入功能將相應(yīng)平臺(tái)下的鏈接庫(kù)文件模塊中的靜態(tài)鏈接庫(kù)注入到該進(jìn)程,如果劫持進(jìn)程失敗,返回失敗碼; 步驟4、注入的靜態(tài)鏈接庫(kù)文件會(huì)被目標(biāo)進(jìn)程自動(dòng)加載并調(diào)用目標(biāo)進(jìn)程代碼,自動(dòng)加載并調(diào)用重寫的移動(dòng)端應(yīng)用屏幕圖像界面組合數(shù)據(jù)的圖形交換接口,實(shí)時(shí)地通過adb或http協(xié)議獲取進(jìn)程中移動(dòng)端屏幕運(yùn)行過程中的幀率信息,并調(diào)用文件傳輸模塊對(duì)獲取到的數(shù)據(jù)保存到文件; 步驟5、創(chuàng)建線程循環(huán)執(zhí)行ShellExecute執(zhí)行命令模塊獲取應(yīng)用運(yùn)行過程中圖像幀繪制時(shí)間信息,并調(diào)用文件傳輸模塊中對(duì)獲取到的數(shù)據(jù)保存到文件,調(diào)用adb協(xié)議獲取應(yīng)用運(yùn)行過程中圖像的幀繪制時(shí)間信息。
【文檔編號(hào)】G06F11/36GK106055469SQ201610333630
【公開日】2016年10月26日
【申請(qǐng)日】2016年5月19日
【發(fā)明人】黃甜, 張震宇
【申請(qǐng)人】中國(guó)科學(xué)院軟件研究所
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1