Jacoco--測試覆蓋率工具

會飛的小熊發表於2018-08-19

介紹

JaCoCo(Java Code Coverage)是一種分析單元測試覆蓋率的工具,使用它執行單元測試後,可以給出程式碼中哪些部分被單元測試測到,哪些部分沒有沒測到,並且給出整個專案的單元測試覆蓋情況百分比,看上去一目瞭然。

JaCoCo會生成以下指標的度量:

Instructions (C0 Coverage)

  • 主要是計算位元組碼檔案的覆蓋率。

Branches (C1 Coverage)

  • JaCoCo也計算分支覆蓋所有if和 switch語句。主要是計算分支的。
  • 沒有覆蓋:在該行沒有分支機構已執行(紅鑽)
  • 部分覆蓋:只有在該行分支機構的一部分已經被執行(黃鑽)
  • 全覆蓋:在該行各分支機構已執行(綠鑽)

Cyclomatic Complexity

  • 圈複雜度(Cyclomatic Complexity)是一種程式碼複雜度的衡量標準。它可以用來衡量一個模組判定結構的複雜程度,數量上表現為獨立現行路徑條數,也可理解為覆蓋所有的可能情況最少使用的測試用例數。圈複雜度大說明程式程式碼的判斷邏輯複雜,可能質量低且難於測試和維護。程式的可能錯誤和高的圈複雜度有著很大關係。請注意,JaCoCo不考慮異常處理的分支機構try-catch塊也不會增加複雜性。總體和分支正相關。實際上,過去幾年的各種研究已經確定:一個方法的圈複雜度(或 CC)大於 10 的方法存在很大的出錯風險。
  • 關於圈複雜度的理解,可以看以下連結。

Lines

  • 主要計算基於覆蓋的實際原始碼行類和原始檔行覆蓋。通常會標識三種狀態。
  • 沒有覆蓋:在該行任何指令執行(紅色背景)
  • 部分覆蓋:只有在該行的指示的一部分已經被執行(黃色背景)
  • 全覆蓋:在該行的所有指令已執行(綠色背景)

Methods

  • 每個非抽象方法包含至少一個指令。建構函式和靜態初始化都算作方法。

單元測試

Eclipse 外掛 EclEmma

EclEmma的安裝

1.啟動eclipse,點選Help選單,Install New Software,在彈出的對話方塊中,點選Add

2. 輸入Name,例如EclEmma。輸入Location:update.eclemma.org/

3. 在Work With處選擇剛剛輸入的Location地址

4. 安裝後重新啟動eclipse,如果成功安裝,工具欄上會出現一個新的按鈕

EclEmma的使用

1.編寫單元測試用例。現在支援以下測試:

  • Local Java application
  • Eclipse/RCP application
  • Equinox OSGi framework
  • JUnit test
  • TestNG test
  • JUnit plug-in test
  • JUnit RAP test
  • SWTBot test
  • Scala application

        2.以JUnit為例,在測試用例檔案上右鍵,選擇 Coverage As -> JUnit Test

        3. 會在測試的檔案中顯示出執行結果:

        • 綠色:完整執行 
        • 紅色:沒執行 
        • 黃色:部分執行

        4.通過點選調出Coverage視窗,它是用來統計程式的覆蓋測試率

        5. 點選紅色矩形框的按鈕能將多次測試的覆蓋資料綜合起來進行檢視

        6. 在Coverage檢視主區域中點選右鍵,出現的快捷選單中選擇”Export Report…”

        7.出現Export介面,選項如下:

        • Available sessions:要匯出的session 
        • Format:選擇報告的型別(HTML/XML/Text/EMMA session) 
        • Destination:匯出的session 存放的位置

        IDEA外掛

        IDEA自帶Jacoco單元測試分析工具,操作步驟如下。
        1.選擇編輯配置 “Edit Configurations”。

        Jacoco--測試覆蓋率工具

        2.新增單元測試型別,選擇被測檔案,此處以TestNG為例,測試所有程式碼(不包含lib)。

        Jacoco--測試覆蓋率工具

        3.選擇工具jacoco。

        Jacoco--測試覆蓋率工具

        4.以覆蓋率模式執行測試用例。

        Jacoco--測試覆蓋率工具

        5.執行完成後自動生成測試報告。

        Jacoco--測試覆蓋率工具

        MAVEN

        在pom.xml檔案中新增以下外掛後,執行 mvn test 即可在target/site/jacoco資料夾下生成報告。

        如果想要跳過失敗的測試用例,請使用 mvn test -Dmaven.test.failure.ignore=true

        <plugin>    <groupId>org.jacoco</groupId>    <artifactId>jacoco-maven-plugin</artifactId>    <version>0.8.2-SNAPSHOT</version>    <executions>        <execution>            <id>default-prepare-agent</id>            <goals>                <goal>prepare-agent</goal>            </goals>        </execution>        <execution>            <id>default-report</id>            <phase>test</phase>            <goals>                <goal>report</goal>            </goals>        </execution>        <execution>            <id>default-check</id>            <goals>                <goal>check</goal>            </goals>        </execution>    </executions></plugin>複製程式碼

        執行時測試

        jacoco支援程式執行中監控執行情況。下面介紹直接執行和tomcat伺服器執行兩種監控方式。

        準備

        在jacoco官方下載jacoco包,下載連線:www.jacoco.org/jacoco/

        下載的包中包括三個jar,此處使用 jacocoagent.jar 和 jacococli.jar

        直接執行

        1.假如直接執行的是test.jar, 執行以下命令:

        java -javaagent:jacoco\jacocoagent.jar=includes=* -jar test.jar

        其中下劃線處指明準備中的jar包,後面為引數。

        相關引數請參考:www.jacoco.org/jacoco/trun…

        2.待程式執行結束後,會在test.jar同級目錄生成jacoco.exec檔案,此檔案為jacoco獲取的執行情況檔案。

        3.獲取需要分析的class檔案,假設test.jar中的原始碼生成的檔案位於com資料夾中,將此資料夾放入和jacoco.exec同一資料夾下。

        4.執行命令即可生成報告:

        java -jar jacoco\jacococli.jar report jacoco.exec --classfiles com --html report

        下劃線處為準備中的jar包,report表明生成報告, jacoco.exec為執行監控檔案,–classfiles為生成報告正對的class檔案,–html為報告格式,report為報告資料夾。(此處的class檔案應當和執行中相同)

        詳細引數請參考:www.jacoco.org/jacoco/trun…

        tomcat執行

        tomcat執行與直至執行的方式基本相同,唯一不同的是指明jacocoagent.jar的方式。

        在Windows下,在$TOMCAT_HOME/bin/catalina.bat,Linux下,在$TOMCAT_HOME/bin/catalina.sh的前面,增加如下設定:

        set "JAVA_OPTS=-javaagent:=jacoco\jacocoagent.jar=includes=*"

        如果在引數中未未指明exec檔案的生成路徑,那麼會在$TOMCAT_HOME/bin資料夾下生成,其餘操作與上述相同。



        相關文章