張令芬
(河海大學(xué) 商學(xué)院,江蘇 南京 211000)
JavaScript API自動化測試方案的管理設(shè)計與實(shí)現(xiàn)
張令芬
(河海大學(xué) 商學(xué)院,江蘇 南京211000)
在持續(xù)集成的軟件開發(fā)過程中,企業(yè)管理者需要對每個軟件版本的JavaScript API進(jìn)行自動化測試?;赗obotium框架的測試程序,通過采用捕獲被測程序的Logcat信息,之后通過解析Logcat并寫入,最終寫成方案并測試,在應(yīng)用程序中,JavaScript API作為連接程序與web頁面的橋梁,擴(kuò)展了內(nèi)嵌web頁面的JavaScript的能力,為web應(yīng)用帶來更好的體驗(yàn)。所以本文使用本方案,測試人員編寫了26條測試用例,共測試了26個API,除去用例編寫的問題以及一些不適合使用自動化來測試的API,方案的準(zhǔn)確性達(dá)到100%。結(jié)果方案的實(shí)施結(jié)果證明了本方案是可行的。這為以后的研究奠定了堅(jiān)實(shí)的基礎(chǔ)。
應(yīng)用程序;JavaScript API;自動化測試;接口
在現(xiàn)階段的測試中,測試人員需要在測試頁面上逐一地手動觸發(fā)每個測試用例,根據(jù)返回值來判斷功能是否正常。隨著API種類的增多,加上版本迭代速度很快,手工測試變的繁瑣,浪費(fèi)了很多人力物力。為代替人工測試,最終實(shí)現(xiàn)的工具須能夠自動化地完成以下功能:調(diào)用API、判斷返回值、計算調(diào)用耗時、判斷用例是否通過、發(fā)送郵件。
首先,測試頁面通過通用JavaScript對象調(diào)用API,回調(diào)函數(shù)等待接收返回值。返回值獲取后,判斷返回值是否正確,記錄下判斷結(jié)果與API從調(diào)用到獲得返回值之間的耗時。所有API測試完成后,將結(jié)果統(tǒng)一匯總并發(fā)送郵件到API相關(guān)責(zé)任人。
為實(shí)現(xiàn)上述功能,需要用到與相關(guān)的一些組件工具和框架。終端設(shè)備與PC之間的通信時通過Debug Bridge(ADB)來完成的。自動化測試要想順利實(shí)施則少不了Instrument工具,而Instrument的封裝則Robotium來完成,這就大大的方便了測試的進(jìn)行。
1)ADB;ADB作為一種具有多種用途的命令行工具,它的運(yùn)作可以借助模擬器實(shí)例或連接設(shè)備進(jìn)行通訊。它是一個客戶端-服務(wù)器程序,包含3個部分:
客戶端,它運(yùn)行在開發(fā)機(jī)器中。用戶通過發(fā)出的ADB命令從shell中調(diào)用客戶端。對于除此之外的工具就像ADT插件和DDMS,也有類似的功能。
服務(wù)端,在開發(fā)機(jī)器上作為后臺進(jìn)程運(yùn)行。服務(wù)端主要功能就是對客戶端進(jìn)行管理和通信。
守護(hù)進(jìn)程,它扮演的主要角色則是作為模擬器后臺進(jìn)程運(yùn)行。
ADB提供了一系列命令,在測試程序中可以通過命令行的方式調(diào)用。
2)Robotium:工具Robotium作為一個自動化測試的框架,它的功能很廣泛,可以全面支持混合和原生的應(yīng)用。Robotium由于自身功能強(qiáng)大,所以可以很容易地編寫應(yīng)用程和黑盒的UI測試。通過借助Robotium,測試的開發(fā)人員可以借此編寫功能、系統(tǒng)和驗(yàn)收測試的方案,從而實(shí)現(xiàn)跨越多個Activity的功能。
由于本工具涉及到測試程序與被測程序之間的數(shù)據(jù)交換,而基于Robotium的測試程序能夠與被測程序處于同一進(jìn)程中,為測試程序獲取被測程序的數(shù)據(jù)提供了有利條件。
有關(guān)系統(tǒng)架構(gòu)如圖1所示。
圖1 系統(tǒng)架構(gòu)Fig.1 System architecture
控制模塊總控其他模塊的執(zhí)行,并監(jiān)測系統(tǒng)的運(yùn)行情況,捕獲產(chǎn)生的異常??刂颇K控制整體流程,從檢查安裝包的版本、檢查測試程序與被測程序的安裝情況,到控制測試頁面中測試用例的自動執(zhí)行等。工具在控制模塊的控制下完成一系列操作。
web模塊包含web頁面以及應(yīng)用程序內(nèi)嵌的web瀏覽器。web模塊初始化自動化測試用例中用到的JavaScript對象,定義測試用例執(zhí)行的順序、時間間隔等參數(shù)。與之相關(guān)聯(lián)的測試用例模塊是該模塊的子模塊,測試用例模塊包含需要進(jìn)行測試的API的用例。每個用例包含以下參數(shù):
[用例名][用例功能描述][返回值][測試結(jié)果]
API調(diào)用耗時由工具自動計算出,不包含在用例中。測試人員需要手動在此模塊添加測試用例。
數(shù)據(jù)統(tǒng)計模塊負(fù)責(zé)獲取每個API的用例參數(shù)(如上述)、計算API的調(diào)用耗時,并判斷用例是否通過。最終將獲得的數(shù)據(jù)寫入html文件。
郵件發(fā)送模塊負(fù)責(zé)發(fā)送郵件。
根據(jù)系統(tǒng)架構(gòu)可以梳理出本工具的系統(tǒng)流程。如圖2所示。
圖2 系統(tǒng)流程Fig.2 System flow
自動化測試啟動后,執(zhí)行程序檢查測試程序、被測程序等一系列測試前的準(zhǔn)備工作,一切就緒后,測試程序啟動。測試程序通過Robotium提供的方法操作被測程序加載測試頁面。測試頁面是本地的,通過代理的方式載入被測程序的webView中。測試程序在測試頁面載入之后開始捕獲Logcat,并解析出相應(yīng)字段,以html的格式寫入文件中。測試完畢后,將html以郵件的形式發(fā)送給相關(guān)人。
1.1測試程序
1.1.1基于Robotium框架的測試程序
Robotium作為一種工具,主要是建立在一個基于應(yīng)用程序的自動化黑盒基礎(chǔ)之上。它使測試用例的編寫得到了大大的簡化,并且能夠編寫出黑盒測試程序用例,這種工具使得編寫出來的這種應(yīng)用功能強(qiáng)大、健壯性很強(qiáng)。通過對Robotium應(yīng)用,測試人員能夠編寫測試用例,系統(tǒng)測試,驗(yàn)收測試方案等。
新建一個 Test Project,將測試工程指向設(shè)置為 this project,建立完成后引入Robotium需要使用的jar包。
由于內(nèi)置瀏覽器所在Activity非啟動Activity,而應(yīng)用程序也不支持直接喚起內(nèi)置瀏覽器,所以在進(jìn)行測試的過程中需要通過被測程序的內(nèi)置瀏覽器加載測試頁面,故采用點(diǎn)擊界面元素跳轉(zhuǎn)的方法,借助Robotium實(shí)現(xiàn)界面跳轉(zhuǎn)。Robotium中的Solo類提供了一系列對Activity中的界面元素進(jìn)行操作的方法,通過識別Activity中的控件樹來識別指定的元素。
1.1.2捕獲被測程序的Logcat信息
測試頁面、測試程序、被測程序之間沒有相互通信的媒介,測試頁面中的測試用例執(zhí)行后產(chǎn)生的結(jié)果如何獲取是一個難點(diǎn)。Logcat作為平臺提供的系統(tǒng)功能能夠解決這一問題。日志系統(tǒng)提作為一種系統(tǒng),為收集和對系統(tǒng)調(diào)試過程中出現(xiàn)的問題進(jìn)行檢查提供了可能。這樣一來循環(huán)的緩沖區(qū)中就收集了各個系統(tǒng)的應(yīng)用日志,如果需要對這些日志進(jìn)行查看和過濾則需要借助logcat的命令可以實(shí)現(xiàn)這種功能。測試頁面中打出的log可以被Logcat收集,而根據(jù)單元測試原理,測試程序與被測程序是處于同一進(jìn)程中的,這為測試程序獲取被測程序的Logcat提供了很大便利。
1.1.3解析Logcat并寫入
工具自定義的Logcat中測試頁面的log元數(shù)據(jù)結(jié)構(gòu)如下:
#[標(biāo)記]:[內(nèi)容]
每條log的數(shù)據(jù)結(jié)構(gòu)如下:
[時間]#[標(biāo)記1]:[內(nèi)容]#[標(biāo)記2]:[內(nèi)容]……#[標(biāo)記n]:[內(nèi)容]
根據(jù)定義的以上結(jié)構(gòu),在測試程序中解析出相應(yīng)字段。
在測試程序中將獲得的結(jié)果寫入文件中,格式為html,便于郵件的發(fā)送與展示。
1.1.4簽名
系統(tǒng)要求所安裝的應(yīng)用程序被相應(yīng)的開發(fā)者簽名。它主要是作為識別應(yīng)用程序的作者和建立應(yīng)用程序之間的信任關(guān)系的一種手段。所以在進(jìn)行測試的過程中,程序必須保持和被測程序的簽名保持一致。
使用如下方法為測試程序簽名:
jarsigner-verbose-keystore-release-key.keystore-storepass luozhifan@tencent-2010-keypass luozhifan@tencent-2010-digestalg SHA1-sigalg MD5withRSA-signedjar QQJsApiTest-release-signed.a(chǎn)pk QQJsApiTest-release-unsigned.a(chǎn)pk releasekey
其中各參數(shù)說明如表1。
1.2測試頁面
測試頁面由被測程序的內(nèi)置瀏覽器加載,頁面中寫入需要測試的API接口的測試用例。當(dāng)頁面加載完成后觸發(fā)onload方法時,頁面自動執(zhí)行測試用例,將獲得的接口返回值以相應(yīng)的格式打入Logcat,從而被測試程序捕獲。
表1 jarsigner參數(shù)說明Tab.1 Jarsigner parameter description
測試人員首先在測試頁面下按照格式編寫測試用例。然后將終端設(shè)備通過數(shù)據(jù)線與計算機(jī)連接。計算機(jī)需要安裝并配置SDK。執(zhí)行測試需要配置環(huán)境,即HTTP代理。使用HTTP協(xié)議調(diào)試代理工具fiddler將測試程序中的url對應(yīng)的返回結(jié)果替換為本地的測試頁面。測試設(shè)備與PC須處于同一無線局域網(wǎng)中。同時將測試設(shè)備的Wifi代理配置為所連PC的無線局域網(wǎng)的IP地址。
方案的執(zhí)行流程如圖3所示。
圖3 執(zhí)行流程Fig.3 Implementation process
執(zhí)行過程的界面如圖4所示。
執(zhí)行程序入口腳本test.py后,測試啟動。測試完成后,給出測試信息,“.”代表通過的測試用例,“Time”給出完成測試的時間,單位是“秒”。測試完成后給出測試完成的信息。最后將測試報告導(dǎo)入計算機(jī),并發(fā)送郵件。
最終生成并發(fā)送的測試報告如圖5所示。
圖4 界面Fig.4 Interface
圖5 測試報告Fig.5 Test Report
報告首部給出本次測試的通過率,包含接口總數(shù)、通過接口數(shù)、不通過接口數(shù)、通過率幾項(xiàng)。測試用例詳情給出了每個測試用例的用例名稱、功能描述、返回值、耗時和是否通過幾項(xiàng)。耗時的單位為毫秒,不通過的用例用紅色標(biāo)記顯示。
為了驗(yàn)證自動化測試工具返回的耗時是否準(zhǔn)確,統(tǒng)計各API單獨(dú)執(zhí)行返回的時間,進(jìn)行比較,結(jié)果現(xiàn)實(shí)第2、3、4、6、 8、9、10、11、12、13、14、15、16、17個案例此時結(jié)果所用的自動化耗時與單獨(dú)耗時的時間是相同的,可以得出自動化測試所得耗時是很準(zhǔn)確的。
使用本方案,測試人員編寫了26條測試用例,共測試了26個API,除去用例編寫的問題以及一些不適合使用自動化來測試的API,方案的準(zhǔn)確性達(dá)到100%。
方案的實(shí)施結(jié)果證明了本方案是可行的。但是在局部的設(shè)計上還存在一些不足。主要體現(xiàn)在需要配置較為復(fù)雜的測試環(huán)境,例如使用代理的方式替換測試頁面在實(shí)施過程中會較為繁瑣。其次,使用界面跳轉(zhuǎn)方式調(diào)出內(nèi)置瀏覽器,對UI的依賴較強(qiáng),不具有擴(kuò)展性。因此,研究優(yōu)化測試頁面的替換策略將是未來需要解決的重要問題。
[1]肖冬平,李玲琳.軟件系統(tǒng)中性能測試方案的設(shè)計與實(shí)現(xiàn)[J].企業(yè)技術(shù)開發(fā),2014(13):21-22.
[2]蔡增柱.基于移動平臺測試相關(guān)技術(shù)研究[D].廣州:華南理工大學(xué),2012.
[3]何偉.基于移動平臺的應(yīng)用軟件性能優(yōu)化技術(shù)研究[J].計算機(jī)光盤軟件與應(yīng)用,2014(12):87-90,98.
[4]劉博.平臺上針對UI控件的測試工具的設(shè)計與實(shí)現(xiàn)[D].哈爾濱:哈爾濱工業(yè)大學(xué),2013.
[5]劉鑫正,陳玉華,黃利,等.智能終端功耗自動化測試系統(tǒng)的研究與設(shè)計[J].電子測量技術(shù),2014(9):79-82,97.
[6]祝犇.基于爬蟲的Web測試生成系統(tǒng)的設(shè)計與實(shí)現(xiàn)[J].蘇州科技學(xué)院學(xué)報:自然科學(xué)版,2014(3):56-62.
[7]陳玉華,劉鑫正,蔡成亮,等.射頻全自動化測試系統(tǒng)的設(shè)計與實(shí)現(xiàn)[J].電子測量技術(shù),2013(9):9-13.
[8]陳江勇,許力,張輝,等.Web自動化測試框架的設(shè)計與實(shí)現(xiàn)[J].福建師范大學(xué)學(xué)報:自然科學(xué)版,2013(4):39-45.
JavaScript API management design and implementation of automated testing program
ZHANG Ling-fen
(Hohai University Business School,Nanjing 211000,China)
In the continuous integration of the software development process,companies′s management need automated testing of each software version of JavaScript API.Robotium framework based on test procedures,test procedures by capturing Logcat information Logcat after parsing and writing the final written plan and test the application,JavaScript API with a web page as a connecting bridge program extends the embedded web ability of JavaScript page,for a better experience web application.So this use of the program,testers prepared the 26 test cases were tested 26 API,removing the problem and use cases that are not prepared for the use of automation to test the API,the program reaches 100%accuracy.Results prove that the implementation of this scheme is feasible.This has laid a solid foundation for future research.
applications;JavaScript API;automated testing;interface
TN31
A
1674-6236(2016)02-0035-03
2015-03-11稿件編號:201503155
張令芬(1986—),女,山東滕州人,碩士研究生。研究方向:財務(wù)管理。