2017-09-21html
1 Jacoco的安裝和設置
1.1 什麼是Jacoco?
1.2 Jacoco安裝
1.3 Tomcat配置
2 在客戶端進行功能測試或接口測試
3 Ant安裝與配置
3.1 安裝
3.2 配置build.xml
4 生成代碼覆蓋率報告
5 查看結果apache
開發在作單元測試時,經過開發工具的插件很容易獲得測試代碼覆蓋率。當軟件部署好以後,咱們經過功能測試或接口測試,可否獲得代碼覆蓋率?Jacoco能夠經過JavaAgent技術監控Java程序的到代碼覆蓋率。tomcat
此文介紹java Agent的'tcpserver' output方法,用此方法時,JavaAgent會監聽服務器端設置(Tomcat配置)的TCP port,而後把收集到的信息(jacoco.exec)寫入TCP connection。而後經過jacocoant在客戶端把收集的信息(jacoco.exec)從TCP connection拉取到客戶端,再根據收集到信息(jacoco.exec)和源代碼生成覆蓋率report。服務器
返回app
Jacoco是一個開源的Java代碼覆蓋率工具,Jacoco能夠嵌入到Ant 、Maven中,並提供了EclEmma Eclipse插件,也能夠使用JavaAgent技術監控Java程序。不少第三方的工具提供了對Jacoco的集成,如sonar、Jenkins等。maven
官網地址:http://www.eclemma.org/jacoco/ (這裏下載了jacoco-0.7.4.201502262128.zip版本)tcp
下載後加壓到目錄:D:\CodeCoverage\jacocoide
1 關閉Tomcat:雙擊安裝目錄下的 D:\tomcat\bin\shutdown.bat (window是bat擴展名、Linux是sh擴展名)工具
2 修改D:\tomcat\bin\catalina.bat,在第一行添加以下腳本:
set JAVA_OPTS=-javaagent:D:\CodeCoverage\jacoco\lib\jacocoagent.jar=includes=*,output=tcpserver,address=172.31.1.32,port=6300,append=true
JVM option 格式:-javaagent:[yourpath/]jacocoagent.jar=[option1]=[value1],[option2]=[value2]
官方文檔:http://www.eclemma.org/jacoco/trunk/doc/agent.html
或者:啓動的時候加上javaagent參數
java -javaagent:/opt/quality/lib/jacocoagent.jar=includes=*,output=tcpserver,port=6300,address=*,append=true -jar /app/bin/start.jar
3 啓動Tomcat:雙擊安裝目錄下的 D:\tomcat\bin\startup.bat
4 驗證JAVA_OPTS是否有修改正確
使用WMIC命令
vmic
process where name="java.exe"
若顯示一下內容,表示修改爲功
java.exe "D:\Java\jdk1.8.0_91\bin\java.exe" -javaagent:D:\CodeCoverage\jacoco\lib\jacocoagent.jar=includes=*,output=tcpserver,address=172.31.1.32,port=6300,append=true
圖1 process WMIC
1 測試對象:SpringMVC HelloWorld實例開發及部署
2 功能測試:輸入url:http://localhost:8080/HelloSpringMVC/saveResult
說明:在功能測試過程當中javaagent會收集覆蓋到的代碼信息
1 官方網址: http://ant.apache.org -> download -> binary distribute apache-ant-1.9.9-bin.zip
解壓到:D:\CodeCoverage\ant
2 驗證安裝是否成功
在安裝目錄D:\CodeCoverage\ant\bin下執行命令:ant -version
<?xml version="1.0" encoding="UTF-8"?> <project name="plate_id_sample_service" xmlns:jacoco="antlib:org.jacoco.ant"> <taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml"> <classpath path="D:\CodeCoverage\jacoco\lib\jacocoant.jar"/> </taskdef> <target name="dump"> <!-- address和port和catalina.bat設置保持一致,destfile設置jacoco.exec保存地址 --> <jacoco:dump address="172.31.1.32" reset="true" port="6300" destfile="D:\CodeCoverage\jacoco\jacoco.exec"/> </target> <target name="report"> <jacoco:report> <executiondata> <file file="D:\CodeCoverage\jacoco\jacoco.exec"/> </executiondata> <structure name="Example Project"> <!-- 能夠按軟件功能模塊設置多個group,方便在report中查看 --> <group name="SpringMVC"> <classfiles> <!--.class文件路徑,能夠放在客戶端--> <fileset dir="D:\CodeCoverage\project\HelloSpringMVC\classes"/> </classfiles> <sourcefiles encoding="gbk"> <!--源代碼路徑,能夠放在客戶端--> <fileset dir="D:\CodeCoverage\project\HelloSpringMVC\java" /> </sourcefiles> </group> </structure> <!-- report文件保存地址 --> <html destdir="D:\CodeCoverage\jacoco\report"/> </jacoco:report> </target> </project>
在ant安裝目錄運行ant dump命令,把jacoco.exec拉取到build.xml設置的客戶端路徑
在ant安裝目錄運行ant report命令,根據build.xml設置jacoco.exec、class和java文件地址生成report
圖2 ant命令
若build.xml沒有設置源代碼java的地址,就看不到代碼內容的覆蓋狀況,最細只能看到方法的覆蓋率統計
圖3 覆蓋率報表