1:什么是jacoco?
JaCoCo是一個開源的覆蓋率工具(官網地址:http://www.eclemma.org/JaCoCo/),它針對的開發語言是java,其使用方法很靈活,可以嵌入到Ant、Maven中;可以作為Eclipse插件,可以使用其JavaAgent技術監控Java程序等等。
很多第三方的工具提供了對JaCoCo的集成,如sonar、Jenkins等。
2:什么是代碼覆蓋?
測試過程中根據需求文檔和設計文檔編寫測試用例、執行測試;為了更加全面的覆蓋,我們可能還需要理解被測程序的邏輯,需要考慮到每個函數的輸入與輸出,邏輯分支代碼的執行情況,這個時候我們的測試執行情況就以代碼覆蓋率來衡量,可以理解為白盒覆蓋。
以上兩者完全可以相輔相成,用代碼覆蓋結果反向的檢查需求覆蓋(用例)的測試是否充分完整。
。
3:安裝軟件
3.1:tomcat:因為服務器上已經安裝了tomcat,所以沒有親自在Linux服務器上安裝
3.2:Jacoco:
安裝步驟:
3.2.1:下載包上傳到Linux服務器,(路徑自己選擇):https://oss.sonatype.org/service/local/artifact/maven/redirect?r=snapshots&g=org.jacoco&a=jacoco&e=zip&v=LATEST
3.2.2:下載unzip工具,命令:sudo apt-get install unzip(1:apt-get sudo apt-get install package #安裝包)
3.2.3:解壓文件,執行命令:unzip jacoco-0.8.2-20180518.004140-15.zip
3.3:ant:
3.2.1:下載:下載地址:http://ant.apache.org/bindownload.cgi 下載apache-ant-1.8.1-bin.tar.gz(當前最新版本)
3.2.2:解壓cd /home/ubuntu/ant ; tar -zxvf apache-ant-1.8.1-bin.tar.gz,解壓后生成一個文件夾apache-ant-1.8.1
3.2.3:配置環境變量(ant是基於java的,所以要先確保系統中已經安裝了jdk,檢查系統是否安裝JDK:java -version)
(1)設置用戶環境變量:輸入命令:vim ~/.bashrc,打開文件,輸入ant需要的環境變量;如下內容:
ANT_HOME=/home/ubuntu/ant/apache-ant-1.8.1
PATH=$JAVA_HOME/bin:$ANT_HOME/bin:$PATH
export JAVA_HOME JAVA_BIN ANT_HOME PATH CLASSPATH
(2)退出並保存:esc => shift + : => wq => 回車
(3)【設置環境變量后必須使命令生效!!】再輸入命令使之生效:source ~/.bashrc
4:准備項目
4.1:源碼、WAR包
5:Tomcat配置
5.1:1、進入你需要統計代碼覆蓋率的tomcat :cd /home/ubuntu/local/server/apache-tomcat-7.0.77
5.2、先關閉這個tomcat的服務:正常情況下可以直接執行 ./shutdown.sh;執行結束后 ps -ef|grep 端口號 查看是否已經正常關閉,如果還沒有關閉 kill -9 pid(來源於ps的結果)
5.3、修改 catalina.sh 的JAVA_OPTS配置
JAVA_OPTS="$JAVA_OPTS -javaagent:/home/ubuntu/jcoco/lib/jacocoagent.jar=includes=*,output=tcpserver,append=true,,port=6101,address=*"
具體參數的意思請查看官方文檔
5.4、啟動服務 ./startup.sh
5.5、查看一下JAVA_OPTS是否有修改正確
6:Ant配置
隨意進入一個目錄新建build.xml,build.xml見附件
7:生成報告:
進入build.xml路徑下執行ant命令:
首先ant dump:開始統計代碼覆蓋率
自動化跑完之后,執行ant report命令生成report報告
生成的最終覆蓋率report文件路徑是在build.xml中配置的;到生成report路徑下將report文件down下來,打開index.html則可以看見覆蓋率報告。
生成報告截圖如下:
build.xml文件配置:
<?xml version="1.0" ?>
<project name="coverage" xmlns:jacoco="antlib:org.jacoco.ant" default="report">
<!--Jacoco的安裝路徑-->
<property name="jacocoantPath" value="/home/ubuntu/jcoco/lib/jacocoant.jar"/>
<!--最終生成.exec文件的路徑,Jacoco就是根據這個文件生成最終的報告的-->
<property name="jacocoexecPath" value="/home/ubuntu/jcoco/jacoco.exec"/>
<!--生成覆蓋率報告的路徑-->
<property name="reportfolderPath" value="/home/ubuntu/jacoco/report"/>
<!--遠程tomcat服務的ip地址-->
<property name="server_ip" value="127.0.0.1"/>
<!--前面配置的遠程tomcat服務打開的端口,要跟上面配置的一樣-->
<property name="server_port" value="6101"/>
<!--源代碼路徑-->
<property name="wqltest-src" value="/home/ubuntu/wqltest/jacocowql/src/main/java" />
<!--.class文件路徑-->
<property name="wqltest-classpath" value="/home/ubuntu/local/server/apache-tomcat-7.0.77/webapps/jacocowql/WEB-INF/classes" />
<!--讓ant知道去哪兒找Jacoco-->
<taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml">
<classpath path="${jacocoantPath}" />
</taskdef>
<!--dump任務:
根據前面配置的ip地址,和端口號,
訪問目標tomcat服務,並生成.exec文件。-->
<target name="dump">
<jacoco:dump address="${server_ip}" reset="false" destfile="${jacocoexecPath}" port="${server_port}" append="false"/>
</target>
<!--jacoco任務:
根據前面配置的源代碼路徑和.class文件路徑,
根據dump后,生成的.exec文件,生成最終的html覆蓋率報告。-->
<target name="report" depends="dump">
<delete dir="${reportfolderPath}" />
<mkdir dir="${reportfolderPath}" />
<jacoco:report>
<executiondata>
<file file="${jacocoexecPath}" />
</executiondata>
<structure name="JaCoCo Report">
<group name="wqltest">
<classfiles>
<fileset dir="${wqltest-classpath}" />
</classfiles>
<sourcefiles encoding="UTF-8">
<fileset dir="${wqltest-src}" />
</sourcefiles>
</group>
</structure>
<html destdir="${reportfolderPath}" encoding="utf-8" />
</jacoco:report>
</target>
</project>
文章轉自https://www.cnblogs.com/qiaoli0726/p/9094202.html