jacoco統計自動化代碼覆蓋率


  1. 什么是Jacoco
    Jacoco是一個開源的代碼覆蓋率工具,可以嵌入到Ant 、Maven中,並提供了EclEmma Eclipse插件,也可以使用JavaAgent技術監控Java程序。很多第三方的工具提供了對Jacoco的集成,如sonar、Jenkins等
  2. 什么是代碼覆蓋率
    代碼覆蓋(Code coverage)是軟件測試中的一種度量,描述程式中源代碼被測試的比例和程度,所得比例稱為代碼覆蓋率。
    代碼覆蓋率是衡量測試質量的一個重要指標。在對一個軟件產品進行了單元測試、組裝測試、集成測試以及接口測試等繁多的測試之后,我們能不能就此對軟件的質量產生一定的信心呢?這就需要我們對測試的質量進行考察。如果測試僅覆蓋了代碼的一小部分,那么不管我們寫了多少測試用例,我們也不能相信軟件質量是有保證的。相反,如果測試覆蓋到了軟件的絕大部分代碼,我們就能對軟件的質量有一個合理的信心。
  3. Jacoco的功能
  • 覆蓋率計數器
    Jacoco使用一系列的不同的計數器來做覆蓋率的度量計算。所有這些計數器都是從java的class文件中獲取信息,這些class文件可以(可選)包含調試的信息在里面。即使在沒有源碼的情況下,這種方法也可以實時有效地對應用程序進行度量和分析。在大部分情況下,收集到的信息可以映射到源碼,可視化到每一行代碼的粒度。但這種方法還是有一些限制。這些class文件必須使用調試信息來編譯,這樣才可以計算行的覆蓋率和提供出源碼的高亮。但不是所有的JAVA語言的結構都可以直接編譯成一致的二進制代碼。在這種情況下,java 編譯器會創建所謂的“合成”代碼,會導致產生一些不期望得到的覆蓋率結果。
  • 指令覆蓋率
    Jacoco最小的計數單元是單個java二進制代碼指令。指令覆蓋率提供了代碼是否被執行的信息。這個度量完全獨立源碼格式,並且總是可用,即使class文件里面沒有調試信息。
  • 分支覆蓋率
    Jacoco也計算分支的覆蓋率,包括所有的if和switch語句。這個度量計算一個方法里面的總分支數,確定執行和不執行的分支數量。分支覆蓋率總是可用的,即使class文件里面沒有調試信息。注意異常處理是不在分支度量里面統計的
  1. Demo
    代碼結構

    pom.xml文件內容
 <?xml version="1.0" encoding="UTF-8"?>
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <groupId>com.xxx.tutorial</groupId>
     <artifactId>jacoco-demo</artifactId>
     <version>0.0.1-SNAPSHOT</version>

     <properties>
         <jacoco.version>0.7.5.201505241946</jacoco.version>
         <junit.version>4.12</junit.version>
     </properties>


     <dependencies>
         <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
             <version>${junit.version}</version>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>org.testng</groupId>
             <artifactId>testng</artifactId>
             <version>7.0.0</version>
             <scope>test</scope>
         </dependency>

     </dependencies>
     <build>
         <plugins>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-compiler-plugin</artifactId>
                 <version>3.7.0</version>
                 <configuration>
                     <skipMain>true</skipMain>
                     <skip>true</skip>
                     <source>1.7</source>
                     <target>1.7</target>
                 </configuration>
             </plugin>
             <plugin>
                 <groupId>org.jacoco</groupId>
                 <artifactId>jacoco-maven-plugin</artifactId>
                 <version>${jacoco.version}</version>
                 <executions>
                     <execution>
                         <id>prepare-agent</id>
                         <goals>
                             <goal>prepare-agent</goal>
                         </goals>
                     </execution>
                     <execution>
                         <id>report</id>
                         <phase>prepare-package</phase>
                         <goals>
                             <goal>report</goal>
                         </goals>
                     </execution>
                     <execution>
                         <id>post-unit-test</id>
                         <phase>test</phase>
                         <goals>
                             <goal>report</goal>
                         </goals>
                         <configuration>
                             <dataFile>target/jacoco.exec</dataFile>
                             <outputDirectory>target/jacoco-ut</outputDirectory>
                         </configuration>
                     </execution>
                 </executions>
             </plugin>
         </plugins>
     </build>

 </project>

被測代碼

測試代碼

testng.xml配置

執行testng.xml 並 執行 mvn test查看測試報告
測試報告目錄

測試報告及詳情

全覆蓋:在該行的所有指令已執行(綠色背景)
部分覆蓋:只有在該行的指示的一部分已經被執行(黃色背景)
沒有覆蓋:在該行任何指令執行(紅色背景)


免責聲明!

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



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