Spring Boot 代碼覆蓋率測試


  代碼覆蓋率測試是規范軟件開發流程里一個必不可少的環節。一般都是在PG末尾階段,伴隨着IT自測產生。

↑以上,是自己yy出來的啊,反正我司是這樣要求的。不跑覆蓋率,鬼知道你在代碼里夾雜了一些什么東西。

  好了,以下是正題。

安裝jacoco和ant

  傳統的Spring MVC WEB項目,只需要jacoco即可。找到這邊文章的朋友應該知道spring是怎么跑覆蓋率的,我就不說明了啊。

因Spring Boot本身集成了Tomcat,所以我們這邊需要用到ant,ant是干嘛的?自行百度,這里不做說明。

  地址如下:

  1.jacoco: http://www.eclemma.org/jacoco/

  2.ant: https://www.apache.org/dist/ant/binaries/

  注:下載ant時請認准binaries里的包而不是source,要是解壓后找不到bin文件夾請回到這瞅瞅。

配置ant

  在解壓后的bin路徑下編寫build.xml文件,

    

<?xml version="1.0" encoding="UTF-8"?>
<project name="test" xmlns:jacoco="antlib:org.jacoco.ant" >
    <!--Jacoco的安裝路徑-->
  <property name="jacocoantPath" value="D:\jar\jacoco-0.8.1\lib\jacocoant.jar"/>
  <!--最終生成.exec文件的路徑,Jacoco就是根據這個文件生成最終的報告的-->
  <property name="jacocoexecPath" value="D:\jar\jacoco-0.8.1\target\jacoco.exec"/>
    <!--生成覆蓋率報告的路徑-->
  <property name="reportfolderPath" value="D:\jar\jacoco-0.8.1\report"/>
  <!--遠程tomcat服務的ip地址-->
  <property name="server_ip" value="127.0.0.1"/>
  <!--監聽端口號,非項目端口號,和常用的8080是不是很接近,別誤會,自行配置就好-->
  <property name="server_port" value="8090"/>
  <!--源代碼路徑可以包含多個源代碼-->   
  <property name="webSrcpath" value="D:\springboot\demo\src\main\java" />   

  <!--.class文件路徑可以包含多個-->
  <property name="webClasspath" value="D:\springboot\demo\target\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="true" destfile="${jacocoexecPath}" port="${server_port}" append="false"/>
  </target>

  <!--jacoco任務:
      根據前面配置的源代碼路徑和.class文件路徑,
      根據dump后,生成的.exec文件,生成最終的html覆蓋率報告。-->

  <target name="report">
      <delete dir="${reportfolderPath}" />
      <mkdir dir="${reportfolderPath}" />

      <jacoco:report>
          <executiondata>
              <file file="${jacocoexecPath}" />
          </executiondata>

          <structure name="JaCoCo Report">
              <group name="Launch related">   
             <!--此處配置classes文件地址 -->        
                  <classfiles>
                      <fileset dir="${webClasspath}" />
                  </classfiles>
                  <!--此處配置源碼地址-->
                    <sourcefiles encoding="utf-8">
                      <fileset dir="${webSrcpath}" />
                  </sourcefiles>
              </group>

          </structure>

          <html destdir="${reportfolderPath}" encoding="utf-8" />         
      </jacoco:report>
  </target>
</project>

 

 

 

 再強調一遍build.xml中的server_port是后面啟動命令參數中的監聽端口號,非項目端口號。如果寫錯會報 Unable to dump coverage data。

 

啟動項目

  1.Debug模式

     配置VM arguments,步驟:右擊項目>Debug As>Debug Configruations...>Arguments

     在VM arguments 中添加-javaagent:D:\jar\jacoco-0.8.1\lib\jacocoagent.jar=includes=*,output=tcpserver,port=8090,address=127.0.0.1

     debug啟動

  2.jar包

     mvn clean package生成jar包后,在啟動jar包時添加上面的參數就行。  

     java -javaagent:D:\jar\jacoco-0.8.1\lib\jacocoagent.jar=includes=*,output=tcpserver,port=8090,address=127.0.0.1 -jar D:\springboot\demo\target\demo.jar

測試

  根據自己的測試case,測試就行啦。測完之后,不需要stop項目。在ant所在目錄的bin路徑下執行ant dump, 如果build success 表示生成了報告數據。

  然后再執行ant report,導出數據,在build.xml中指定的路徑中生成index.html和jacoco.exec文件

 

至此,結束。不對之處,還望指正。

  


免責聲明!

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



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