原文:https://www.jianshu.com/p/d2fd02d4164b
一、代碼覆蓋率
通常我們在做單元測試的時候會接觸到代碼覆蓋率的概念,通過在單元測試的過程中收集代碼覆蓋率去判斷測試用例是否充分,去更精准的定位問題。而對於功能測試或者接口測試比較少的去關注覆蓋率數據,功能測試時覆蓋率的收集也是比較困難的。然后對於功能測試而言進行代碼覆蓋率的收集有利於測試工程師去判斷哪些分支沒有被覆蓋,判斷是否是設計用例的時候沒有做到覆蓋,又或者是由於存在bug使得無法覆蓋到,從而更精准的去定位bug的位置,去分析問題,節省時間。
二、工具簡介
對於java的代碼覆蓋率的收集,比較常用的工具有emma、jacoco,它們都是免費的代碼覆蓋率工具。emma目前已經不維護,EclEmma團隊推出了jacoco,jacoco可以理解為emma的升級版本。Jacoco可以跟ant、maven、gradle等集成,降低了使用成本,使用更靈活 ;同時它還引入了監控機制,通過JJavaAgent技術監控Java程序。Jacoco還可以更第三方平台進行集成,比如sonar、jenkins,通過第三方平台更友好的將覆蓋率數據在web端展示。
二、Java Counters
Jacoco提供了多維度的覆蓋率統計方法,包含指令級(Instructions,C0coverage)覆蓋,分支(Branches,C1coverage)覆蓋、類(classes)覆蓋、方法(non-abstract methods)覆蓋、行(Lines)覆蓋。同時還提供圈復雜度(CyclomaticComplexity)的統計,它會去計算每個類,方法的圈復雜度,根據McCabe1996的定義,圈復雜度可以理解為覆蓋所有的可能情況最少使用的測試用例數,同時圈復雜度越高意味着程序越復雜,發生bug的概率越大。
2.1 Instructions
Jacoco在統計覆蓋率時最小的統計單位就是字節碼指令。通過指令覆蓋率統計的是所有的指令哪些被執行了哪些沒有被執行,從而得出統計數據。這項規則完全獨立於源碼格式並且在任何情況下有效,不需要類文件的調試信息。
2.2 Branches
Jacoco對所有的if...else...和switch...case...指令計算了分支覆蓋率。分支覆蓋會去統計程序中所有的分支數量,並統計哪些被執行哪些沒有被執行,從而得出有效的覆蓋率數據。
2.3 Classes
類覆蓋是收集類的統計數據,計算中每個類中只要有一個方法被執行,這個類就被認定為被執行,那么它的覆蓋率就是100%。
2.4 Methods
方法覆蓋是收集類中的方法的覆蓋率,通常一個非抽象方法都至少有一條指令,只要改方法中有一行被執行,該統計規則就認為他被執行了,該方法的覆蓋率就是100%。
2.5 Lines
行覆蓋,統計每行代碼的覆蓋率,只有當每一行代碼都被執行到了才會是100%,理論上保證100%的覆蓋率就能保證程序不會有bug。
三、准備工作
進入jacoco官網:http://www.eclemma.org/jacoco/ ,下載jacoco-0.7.8.zip。
進入apache官網:http://ant.apache.org/bindownload.cgi ,下載apache-ant-1.9.6-bin.tar.gz。
四、Tomcat 服務配置
1、本地為windows系統,先關閉tomcat服務。
2、將下載得到的jacocoagent.jar拷貝至D:\Program Files (x86)\apache-tomcat-8.0.30-windows-x86\apache-tomcat-8.0.30\lib\
3、修改bin/catalina.bat中JAVA_OPTS的配置
set JAVA_OPTS="-javaagent:%CATALINA_BASE%\lib\jacocoagent.jar=includes=com.yihu.qa.*,output=tcpserver,port=3344,address=192.168.1.103"
其中:%CATALINA_BASE%\lib\jacocoagent.jar為安裝jacoco的jacocoagent.jar包相對路徑;output覆蓋率數據輸出的形式,有file, tcpserver, tcpclient, 默認是file,file是在jvm停掉時才將覆蓋率數據dump出來;address和port可以提供client訪問,並dump出覆蓋率數據文件,在build.xml會使用。
4、執行 startup.bat 啟動tomcat。
五、本地ant配置
1、ant配置
將下載來的ant解壓到某個目錄下,添加ant環境變量,我的電腦->屬性->高級系統設置->環境變量->新建


接下來查看ant配置是否ok,打開命令行,執行ant -version,如下圖,表示ant安裝成功

Ant -version
2、創建一個ant的目錄D:\Program Files (x86)\apache-tomcat-8.0.30-windows-x86\ant,將下載得到的jacocoant.jar拷貝至D:\Program Files (x86)\apache-tomcat-8.0.30-windows-x86\ant
3、配置build.xml

說明:主要需要配置dump任務,jacoco生成報告任務;dump任務主要是為了能夠生成.exec文件,在通過jacoco的任務根據源碼跟.class文件以及.exec文件得出相應的html格式的覆蓋率數據。
如何定義任務:
<target name=”***”>****</target>
如何執行任務:ant targetname
3、執行ant dump,執行成功后可以在ant的目錄下發行.exec的文件

ant dump
4、執行 ant report,在ant目錄下看到coverage_ant_task文件夾


5、查看報告
在報告中我們可以看到整個項目的各個覆蓋率的情況,同時我們也可以查看到各個類方法的覆蓋率數據,以及可以看到代碼的行覆蓋的情況,在方法里可以清晰的看到紅色跟綠色,紅色代表沒有覆蓋,綠色代表已經被覆蓋了。從而我們可以推斷出可能用例不完善這時候需要補充用例去覆蓋改部分的內容,如果用例已經覆蓋了,需要排查是否是出現了bug。



作者:_夏兮
鏈接:https://www.jianshu.com/p/d2fd02d4164b
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並注明出處。