Jacoco遠程統計tomcat服務(Windows系統)的代碼覆蓋率


Jacoco遠程統計tomcat服務(Windows系統)的代碼覆蓋率

2017-09-21

目錄

1 Jacoco的安裝和設置
  1.1 什么是Jacoco?
  1.2 Jacoco安裝
  1.3 Tomcat配置
2 在客戶端進行功能測試或接口測試
3 Ant安裝與配置
  3.1 安裝
  3.2 配置build.xml
4 生成代碼覆蓋率報告
5 查看結果

 通用技術 jacoco 代碼覆蓋率使用中遇到的一些坑

 

開發在做單元測試時,通過開發工具的插件很容易得到測試代碼覆蓋率。當軟件部署好之后,我們通過功能測試或接口測試,能否得到代碼覆蓋率?Jacoco可以通過JavaAgent技術監控Java程序的到代碼覆蓋率。

此文介紹java Agent的'tcpserver' output方法,用此方法時,JavaAgent會監聽服務器端設置(Tomcat配置)的TCP port,然后把收集到的信息(jacoco.exec)寫入TCP connection。然后通過jacocoant在客戶端把收集的信息(jacoco.exec)從TCP connection拉取到客戶端,再根據收集到信息(jacoco.exec)和源代碼生成覆蓋率report。

1 Jacoco的安裝和設置


 返回

1.1 什么是Jacoco?

Jacoco是一個開源的Java代碼覆蓋率工具,Jacoco可以嵌入到Ant 、Maven中,並提供了EclEmma Eclipse插件,也可以使用JavaAgent技術監控Java程序。很多第三方的工具提供了對Jacoco的集成,如sonar、Jenkins等。

1.2 Jacoco安裝

官網地址:http://www.eclemma.org/jacoco/ (這里下載了jacoco-0.7.4.201502262128.zip版本)

下載后加壓到目錄:D:\CodeCoverage\jacoco

1.3 Tomcat配置

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

2 在客戶端進行功能測試或接口測試


 返回

1 測試對象:SpringMVC HelloWorld實例開發及部署

2 功能測試:輸入url:http://localhost:8080/HelloSpringMVC/saveResult

說明:在功能測試過程中javaagent會收集覆蓋到的代碼信息

3 Ant安裝與配置


 返回

3.1 安裝

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

3.2 配置build.xml

<?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>
View Code

4 生成代碼覆蓋率報告


 返回

在ant安裝目錄運行ant dump命令,把jacoco.exec拉取到build.xml設置的客戶端路徑

在ant安裝目錄運行ant report命令,根據build.xml設置jacoco.exec、class和java文件地址生成report

圖2 ant命令

5 查看結果


 返回

若build.xml沒有設置源代碼java的地址,就看不到代碼內容的覆蓋情況,最細只能看到方法的覆蓋率統計

圖3 覆蓋率報表

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM