久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

收集Android程序測試代碼覆蓋率

 盈盈一書屋 2013-01-09

代碼覆蓋率的作用主要是用來查看測試用例執(zhí)行完畢后,有哪些代碼尚未覆蓋到,,未覆蓋到的代碼通常意味著未覆蓋到的功能或場景,,對于Andriod程序來說,,好像國內(nèi)聊到這個領(lǐng)域的文章不多,,這里記錄下來供大家參考,。


因 為Andriod程序?qū)嶋H上就是Java程序,,這里先不談Andriod native C程序的代碼覆蓋率收集(后面的文章會講到,,其實就是用gcov做的),Java程序的代碼覆蓋率統(tǒng)計可以使用一個開源軟件Emma,,Emma并不需要源 碼就可以統(tǒng)計代碼覆蓋率 ,。這是因為統(tǒng)計代碼覆蓋率的做法有兩種(參看以前的文章:):

1、修改程序源代碼,,添加統(tǒng)計代碼覆蓋率的代碼,,例如gcov采用的就是這種做法。

2,、 修改最終程序,,比如Emma就是修改Java class的字節(jié)碼Oolong代碼。為了能夠?qū)⒔y(tǒng)計到的代碼覆蓋率結(jié)果追溯到源代碼,,一般是將Java編譯成調(diào)試(Debug)版,,做法是:Emma在 每個Oolong跳轉(zhuǎn)代碼前加入統(tǒng)計覆蓋率的代碼,而調(diào)試版的class,里面會有.source, .line. .var這些指令,,告訴調(diào)試器字節(jié)碼與Java源代碼,、Java變量與Oolong變量的數(shù)字引用的映射關(guān)系,這種做法的好處是,,只要你的程序最終會生成 Java字節(jié)碼,,例如Scala之類的程序,生成的調(diào)試版都可以用Emma修改,,達到統(tǒng)計代碼覆蓋率的目的,。Java虛擬機對調(diào)試的支持,請參考書籍 《Programming for the Java? Virtual Machine》第7章里的描述,。


因為Andriod程序在部署到設(shè)備之前,,會有個程序(dx)將Java字節(jié)碼翻譯成Andriod虛擬機里的字節(jié)碼,所以可以在翻譯之前使用Emma修改class文件,,再打包,。


實際上Andriod提供了一個ant的 build文件,里面就封裝了這個功能,,我這里將這個腳本做的事情挖了出來,,解釋一下各步驟。在解釋之前,,先看看如何用ant編譯一個覆蓋率統(tǒng)計版:


1,、從eclipse的andriod工程里生成一個ant的build文件,andriod-app就是工程名:

android update project -p android-app

2,、將eclipse的andriod測試工程也轉(zhuǎn)換成ant工程,,-m選項指定了測試工程對應(yīng)的主andriod工程的位置,而android-test就是測試工程名:

android update test-project -m ../android-app -p android-test

3,、執(zhí)行下面的命令,,編譯、執(zhí)行單元測試,、收集覆蓋率:

ant clean emma debug install test

4,、在設(shè)備上,/data/data/<package name>/目錄里,,有一個files文件夾里有coverage.ec文件,,即記錄了代碼覆蓋率信息,但這個信息還需要跟源碼做一次映射才能看到哪些代碼行已覆蓋,。

5,、將上面coverage.ec文件拷貝到andriod主工程的bin文件夾里,這個文件夾里有一個文件名coverage.em,,里面記錄了修改過的字節(jié)碼與源代碼的映射關(guān)系,。

6,、要查看代碼覆蓋率時,執(zhí)行下面的命令(andriod SDK里以及自帶了emma.jar),,下面命令里的sp參數(shù)即指定了 源代碼的位置:

java -cp ~/android-sdk/tools/lib/emma.jar emma report -r html -in coverage.em -in coverage.ec -sp ~/<andriod-app>/src/


這里我們把ant命令分解(假設(shè)已經(jīng)將andriod eclipse工程轉(zhuǎn)換成ant工程了),,實際上執(zhí)行下面幾個命令就可以了,下例中~/research/multiplatformdemoproject就是andriod的主工程路徑:


cd ~/research/multiplatformdemoproject/

# 編譯成調(diào)試版

ant debug


# 在打包成dex文件之前,,修改class字節(jié)碼

cd bin

java -cp ~/android-sdk/tools/lib/emma.jar emma instr -ip classes -d instrumented


# 將修改成覆蓋率統(tǒng)計版的class字節(jié)碼打包成andriod虛擬機文件

~/android-sdk/platform-tools/dx --dex --debug --no-optimize --output=classes.dex instrumented

~/android-sdk/platform-tools/aapt package -v -f -M /home/shiyimin/research/multiplatformdemoproject/AndroidManifest.xml -S /home/shiyimin/research/multiplatformdemoproject/res -I /home/shiyimin/android-sdk/platforms/android-8/android.jar -F multiplatformdemoproject.unsigned.apk /home/shiyimin/research/multiplatformdemoproject/bin/


# 簽名

jarsigner -keystore ~/.android/debug.keystore -storepass android -keypass android -signedjar multiplatformdemoproject.signed.apk multiplatformdemoproject.unsigned.apk androiddebugkey

~/android-sdk/tools/zipalign 4 multiplatformdemoproject.signed.apk multiplatformdemoproject.apk


# 部署主程序到設(shè)備上

~/android-sdk/platform-tools/adb install multiplatformdemoproject.apk

# 編譯測試用例

cd tests

ant debug


# 部署并且執(zhí)行測試用例

~/android-sdk/platform-tools/adb install multiplatformdemoproject.test-debug.apk

~/android-sdk/platform-tools/adb shell am instrument -w -e coverage true cc.iqa.studio.demo.test/android.test.InstrumentationTestRunner

# 查看代碼覆蓋率結(jié)果報告

cd http://www.cnblogs.com/bin/

~/android-sdk/platform-tools/adb pull /data/data/cc.iqa.studio.demo/files/coverage.ec .

java -cp ~/android-sdk/tools/lib/emma.jar emma report -r html -in coverage.em -in coverage.ec -sp ~/research/multiplatformdemoproject/src/


下面是幾個截圖:


 


    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多