本發(fā)明涉及android移動應用研發(fā)及軟件測試領域,尤其涉及一種基于android多瀏覽器內(nèi)核的自動化測試方法。
背景技術:
隨著移動互聯(lián)網(wǎng)的高度普及、html5規(guī)范標準的確立和技術成熟,以及各終端設備硬件性能和瀏覽器內(nèi)核的日趨發(fā)展,基于html5的webapp或微信公眾號微網(wǎng)站及微服務已經(jīng)成為移動互聯(lián)網(wǎng)應用的重要組成部分。如今,html5化的webapp呈現(xiàn)出易于開發(fā)、迭代迅速、易于傳播等特性,已經(jīng)被廣泛應用于移動電商、移動辦公、新聞資訊、視頻游戲等各個領域。但由于移動互聯(lián)網(wǎng)用戶的手機終端各種個性化需求存在,導致瀏覽和使用webapp的瀏覽器(包括微信、微博等應用內(nèi)嵌瀏覽器)呈現(xiàn)多樣性,也就導致了一系列的因瀏覽器內(nèi)核不同出現(xiàn)不同程度的ui及功能上的兼容性問題。android因其開源開放的生態(tài),其兼容性問題表現(xiàn)得尤為凸顯,而ios研發(fā)生態(tài)和體系較為封閉,webapp基本都是基于safari瀏覽器和對應內(nèi)核,兼容性問題呈現(xiàn)較少。所以,本發(fā)明旨在找到一種行之有效的方法,集成適用于android系統(tǒng)的不同瀏覽器內(nèi)核,通過javascript腳本語言提供測試腳本,僅在單機設備上,即可集中完成多瀏覽器內(nèi)核下的兼容性自動化測試。
技術實現(xiàn)要素:
針對現(xiàn)有技術存在的不足之處,本發(fā)明的目的在于提供一種基于android多瀏覽器內(nèi)核的自動化測試方法,該方法包括android系統(tǒng)上主流四種主流瀏覽器內(nèi)核即webkit、blink、chromium、騰訊x5的集成,以滿足基本全覆蓋android系統(tǒng)的自帶瀏覽器、第三方瀏覽器、微信微博內(nèi)嵌瀏覽器等平臺上發(fā)布的webapp的自動化兼容性測試。
本發(fā)明的目的通過下述技術方案實現(xiàn):
一種基于android多瀏覽器內(nèi)核的自動化測試方法,其方法步驟如下:
步驟a、在集成adt、androidstudio或intellijidea的android開發(fā)環(huán)境下創(chuàng)建工程,在該工程中分別引入webkit、blink、chromium、騰訊x5四種不同的瀏覽器內(nèi)核的官方sdk,該官方sdk包括jar包、so庫;
步驟b、在android開發(fā)環(huán)境或步驟a的工程中構造superwebview基類,并引入這四種內(nèi)核的webview類作為成員變量;
步驟c、設置webview類的成員變量為coretype,用以標記當前測試對象使用的瀏覽器內(nèi)核類型,coretype包含core_webkit、core_blink、core_chromium、core_x5共四個常量;
步驟d、結(jié)合switch分支邏輯判斷,重寫superwebview基類構造函數(shù)和瀏覽器常用函數(shù);
步驟e、在步驟d的構造函數(shù)中做好相應的初始化配置,以開啟瀏覽器對象對javascript的支持;
步驟f、為superwebview基類編寫starttest(url,scripts[])函數(shù),以針對待測地址url,按照scripts[]數(shù)組的順序地執(zhí)行測試腳本;
步驟g、將待測webapp以域名形式發(fā)布至內(nèi)網(wǎng)或公網(wǎng)中,通過url即可訪問;
步驟h、利用javascript腳本語言,為待測webapp編寫若干后綴名*.js的測試腳本,其核心方法是利用包括模擬點擊、模擬滾動、模擬輸入、模擬延時、模擬循環(huán)方法對待測webapp頁面的dom元素進行模擬操作測試;
步驟i、通過if-else條件判斷語句,判斷是否達到腳本最終預期運行狀態(tài);同時,結(jié)合webview記錄報錯日志,編寫superwebview的testjudger模塊,通過該testjudger模塊最終形成通過率及錯誤率的報告。
本發(fā)明較現(xiàn)有技術相比,具有以下優(yōu)點及有益效果:
本發(fā)明包括android系統(tǒng)上主流四種主流瀏覽器內(nèi)核即webkit、blink、chromium、騰訊x5的集成,以滿足基本全覆蓋android系統(tǒng)的自帶瀏覽器、第三方瀏覽器、微信微博內(nèi)嵌瀏覽器等平臺上發(fā)布的webapp的自動化兼容性測試。
附圖說明
圖1是本發(fā)明的superwebview基類的結(jié)構示意圖;
圖2是本發(fā)明的自動化測試流程示意圖。
具體實施方式
下面結(jié)合實施例對本發(fā)明作進一步地詳細說明:
實施例
如圖1、圖2所示,一種基于android多瀏覽器內(nèi)核的自動化測試方法,android多內(nèi)核自動化測試方法是用android原生代碼開發(fā)一個能兼容不同瀏覽器內(nèi)核的superwebview基類,并讓其繼承webview的所有常用操作,通過coretype變量標記當前測試內(nèi)核類型,在此基礎上擴展提供starttest(url,scripts[])方法來提供針對域名形式發(fā)布的webapp在scripts[]測試腳本集合上的兼容性測試,而scripts[]的測試腳本是由若干后綴名*.js的基于javascript腳本語言編寫的自動化測試用例腳本。其具體方法步驟如下:
步驟a、在集成adt、androidstudio或intellijidea的android開發(fā)環(huán)境下創(chuàng)建工程,在該工程中分別引入webkit、blink、chromium、騰訊x5四種不同的瀏覽器內(nèi)核的官方sdk,該官方sdk包括jar包、so庫;
步驟b、在android開發(fā)環(huán)境或步驟a的工程中構造superwebview基類,并引入這四種內(nèi)核的webview類作為成員變量;
步驟c、設置webview類的成員變量為coretype,用以標記當前測試對象使用的瀏覽器內(nèi)核類型,coretype包含core_webkit、core_blink、core_chromium、core_x5共四個常量;
步驟d、結(jié)合switch分支邏輯判斷,重寫superwebview基類構造函數(shù)和瀏覽器常用函數(shù);
步驟e、在步驟d的構造函數(shù)中做好相應的初始化配置,以開啟瀏覽器對象對javascript的支持;
步驟f、為superwebview基類編寫starttest(url,scripts[])函數(shù),以針對待測地址url,按照scripts[]數(shù)組的順序地執(zhí)行測試腳本(其具體流程請見圖2);
步驟g、將待測webapp以域名形式發(fā)布至內(nèi)網(wǎng)或公網(wǎng)中,通過url即可訪問;
步驟h、利用javascript腳本語言,為待測webapp編寫若干后綴名*.js的測試腳本,其核心方法是利用包括模擬點擊、模擬滾動、模擬輸入、模擬延時、模擬循環(huán)方法對待測webapp頁面的dom元素進行模擬操作測試;
步驟i、通過if-else條件判斷語句,判斷是否達到腳本最終預期運行狀態(tài);同時,結(jié)合webview記錄報錯日志,編寫superwebview的testjudger模塊,通過該testjudger模塊最終形成通過率及錯誤率的報告。
superwebview基類的具體實現(xiàn)方法如下:
⑴定義枚舉類型,包括四個靜態(tài)常量:
core_webkit=0;//webkit內(nèi)核類型
core_blink=1;//blink內(nèi)核類型
core_chromium=2;//chromium內(nèi)核類型
core_x5=3;//騰訊x5內(nèi)核類型
⑵申明當前瀏覽器內(nèi)核類型標識變量coretype,并完成初始化定義:
coretype=core_webkit;
⑶提供加載url方法,其接口原型為:
publicvoidloadurl(stringurl);
⑷提供開始自動化測試方法,其接口原型為:
publicvoidstarttest(stringurl,strings[]scrips);
⑸實現(xiàn)測試腳本加載器scriptsloader{}
⑹實現(xiàn)測試判斷器testjudger{}
測試用例腳本的編寫方法可以具體概括為:
模擬點擊object.click(),以id為targetobject的按鈕為例:
document.getelementbyid(“targetobject”).click();
模擬滾動window.scrollto(),以滾動到1/2文檔高度為例:
window.scrollto(0,document.body.offsetheight/2);
模擬輸入object.innerhtml=xxx,以id為targetedit的輸入框為例:
document.getelementbyid(“targetedit”).innerhtml=”代輸入數(shù)據(jù)”;
模擬延時settimeout(執(zhí)行func,延時),以延時1000ms為例:
settimeout(testfunc(),1000);
模擬循環(huán)setinterval(執(zhí)行func,間隔),以間隔1000ms為例:
setinterval(testfunc(),1000);
其對于清除循環(huán)的方法為:clearinterval()。
scriptsloader的具體實現(xiàn)方法為:
將測試用例腳本的編寫方法中所編寫的測試用例腳本放置在手機內(nèi)置或外置sd存儲卡中,并給出其文件存儲路徑,將其以string[]scripts的參數(shù)形式傳給scriptsloader,由scriptsloader開啟一個線程thread,按行分別取出javascript語句,假設句柄字串為handlestr1、handlestr2、handlestr3…,并以間隔1000ms,通知主線程,利用loadurl(“javascript:”+handlestr)的方式執(zhí)行,直至當前腳本句柄全部完成為止,又繼續(xù)循環(huán)執(zhí)行下一個腳本。待所有腳本執(zhí)行完畢,線程結(jié)束。
testjudger的具體實現(xiàn)方法為:
webview內(nèi)在的html、css、javascript解釋器,在運行出錯時,會自動反饋錯誤異常句柄,testjudger主要需要攔截異常事件,并分別統(tǒng)計每個測試腳本的異常個數(shù)和具體異常代碼行。若測試腳本無法完整執(zhí)行,則在報告提示正確執(zhí)行到的腳步句柄行數(shù)(handlen);若測試腳本能夠完整執(zhí)行,則統(tǒng)計整個腳本完整執(zhí)行的耗時。結(jié)合javascript的if-else條件判斷語句,通過是否到達預期頁面,或出現(xiàn)預期dom元素結(jié)果,來判別是否完正確執(zhí)行完成測試腳本。
核心指標如下:
運行完整度(100%):正確運行行數(shù)/腳本完整行數(shù)。
錯誤數(shù)(個):由webview內(nèi)核截獲的javascript報錯數(shù)。
錯誤日志:由webview返回的異常代碼段及錯誤異常原因+測試用例腳本異常行號。
以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進等,均應包含在本發(fā)明的保護范圍之內(nèi)。