如果你采用源碼插裝的方式來做的話,需要對輸入程序進行詞法,語法分析建立語法分析樹(有一些現成的工具如bison, antlr可以借助),通過語分析法分析樹獲取程序控制流關系,然后就可以對程序的基本塊進行分析了。要考慮獲取覆蓋率和程序執行路徑,需要對基本塊做插裝,利用插入的探針來對它們的執行情況做記錄。
10年專注成都網站制作,企業網站制作,個人網站制作服務,為大家分享網站制作知識、方案,網站設計流程、步驟,成功服務上千家企業。為您提供網站建設,網站制作,網頁設計及定制高端網站建設服務,專注于企業網站制作,高端網頁制作,對護欄打樁機等多個方面,擁有豐富的網站運維經驗。
使用 emma 2.1 (emma-stable-2.1.5320-lib) 1. 新建 /home/q/java/emmalib 目錄, 將emma.jar 與 emma_ant.jar 放入 2. 復制 /server/bin/mobileserver/runServer.sh 到 runServer_emma.sh 修改啟動語句。
使用 emma 2.1 (emma-stable-2.1.5320-lib)
1. 新建 /home/q/java/emmalib 目錄, 將emma.jar 與 emma_ant.jar 放入
2. 復制 /server/bin/mobileserver/runServer.sh 到 runServer_emma.sh
修改啟動語句
nohup java -Xmx1800M -Xms800m -Xbootclasspath/p:/home/q/java/emmalib/emma.jar -Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.EPollSelectorProvider -XX:+AggressiveOpts -XX:+UseParallelGC -server -classpath "$jarFile" com.qunar.common.mobileArc.MobileServer conf/TaLog.property conf/TripServer.property $LOG_HOME/error.log 21
復制 /server/bin/mobileserver/stopServer.sh 到 stopServer_emma.sh
添加覆蓋率導出命令
插入 emma 統計代碼
使用root賬號
1. 備份mobileserver.jar
cp /server/TripAssistant/mobile-server.jar $MOB_JAR_BAK/mobile-server.jar.{$timestamp}
2. 執行插入命令
java -cp /home/q/java/emmalib/emma.jar emma instr -m overwrite -cp mobile-server.jar -out coverage.em
輸出如下:
EMMA: processing instrumentation path ...
EMMA: instrumentation path processed in 3117 ms
EMMA: [1000 class(es) instrumented, 126 resource(s) copied]
EMMA: metadata merged into [/server/TripAssistant/coverage.em]
3. 運行mobileserver runServer_emma.sh
sudo sh /server/bin/mobileserver/stopServer.sh sudo sh /server/bin/mobileserver/runServer_emma.sh
在 /server/mobileserverlog/error.log中可見:
EMMA: collecting runtime coverage data ...
EMMA: runtime controller started on port [47653]
emma control 進程已啟動
[root@l-wap4.beta.cn1.qunar.com /server/mobileserverlog]# netstat -na | grep 47653
tcp 0 0 0.0.0.0:47653 0.0.0.0:* LISTEN 20926/java
4. 執行 覆蓋率文件導出命令
java -cp /home/q/java/emmalib/emma.jar emma ctl -connect localhost:47653 -command coverage.get,coverage.ec
可見輸出:
EMMA: processing control command sequence ...
EMMA: executing [coverage.get (coverage.ec,true,true)] ...
EMMA: coverage.get: local copy of coverage data merged into [/server/TripAssistant/coverage.ec]
EMMA: coverage.get: command completed in 79 ms
EMMA: control command sequence complete
并且當前目錄生成文件 coverage.ec
5. 生成報告
java -cp /home/q/java/emmalib/emma.jar emma report -r html -in coverage.em,coverage.ec
指定源代碼生產覆蓋率報告(需先上傳源碼)
java -cp /home/q/java/emmalib/emma.jar emma report -r html -in /server/TripAssistant/coverage.em,/server/TripAssistant/coverage.ec -Dreport.html.out.file=mycoverage/coverage.html -sp /home/liang.zhou/mob_code_dir/mobs_trunk/src/main/java
emma 方式啟動 mobserver
==================================
1. 判斷mobserver.jar size, 大于5M 為已插入過, 小于5M為未插入(需要執行插入)
2. 執行插入
3. 啟動
4. 檢查啟動狀態
47653 端口打開
mobileserver 進程打開
emma 方式停止 mobserver
==================================
1. 檢查47653端口打開狀態, 檢查coverage.em是否存在
2. 導出覆蓋率文件 coverage.ec, 備份coverage.em (加上時間戳)
3. 導出覆蓋率HTML report (加上對應時間戳)
4. kill mobserver 進程
ls -lt mobile-server.jar
判斷 $? == 0
判斷mobile-server.jar size是否大于 5M
#!/bin/bash
function stop_mob_server(){
#!/bin/bash
function stop_mob_server(){
pid=`ps aux | grep MobileServer | grep -v grep | awk '
Unknown macro: {print $2}
'`
` kill -9 $
Unknown macro: {pid}
`
sleep 1
echo "Stop mobileserver success."
}
#判斷 emma ctl 是否啟動
port_check_result=`netstat -na | grep 47653 | awk '
Unknown macro: {print $1}
'`
if [ -z $
Unknown macro: {port_check_result}
]; then
echo "Emma ctl port 47653 is not LISTEN. Coverage.ec export operation aborted."
else
#emma ctl 為啟動狀態,導出 coverage.ec, 并備份至 /home/q/mobsrv_cov
if []
fi
你好,代碼覆蓋率測試,你可以試試Emma和Jacoco,eclipse中也有eclemma插件,這兩種都是比較流行的工具
希望我的解答可以幫助你
新聞名稱:java代碼覆蓋率過濾 java代碼覆蓋率測試工具
URL網址:http://vcdvsql.cn/article0/ddojooo.html
成都網站建設公司_創新互聯,為您提供手機網站建設、全網營銷推廣、Google、移動網站建設、網站設計公司、動態網站
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯