1. 程式人生 > >程式碼覆蓋率-clover- 介紹

程式碼覆蓋率-clover- 介紹

學習地址:
http://wiki.hudson-ci.org/display/HUDSON/Clover+Plugin
Hudson 上 可選擇的程式碼覆蓋率外掛有: 
1.   Clover Plugin — 該外掛是在Hudson中整合 Clover code coverage reports(程式碼覆蓋測試分析工具)。
2.   Emma Plugin — 該外掛在Hudson中整合EMMA code coverage reports (檢測和報告 JAVA 程式碼覆蓋率的開源工具)。Hudson will generate the trend report of coverage.
分析: Clover Plugin 強調重點:測試覆蓋率的分析工具, Emma Plugin 強調重點:分析程式碼覆蓋率的趨勢。
比較Emma與Clover
連結:http://www.taobaotest.com/blogs/qa?bid=6425
使用方法:http://www.taobaotest.com/blogs/qa?bid=3820
注意事項:
 必須使用   free-style software project
 構建工程;
如何配置一個能夠進行程式碼覆蓋率統計分析的專案?
1. POM中配置(使用此版本的外掛,不需要licence,但是隻能執行在linux下的機器上):
<build>
        <plugins>
            <plugin>
                <groupId>com.atlassian.maven.plugins</groupId>
                <artifactId>maven-clover2-plugin</artifactId>
                <version>1.0.0.nl-SNAPSHOT</version>
                <configuration>
                    <contextFilters>catch,static</contextFilters>
                    <includes>
                        <include>*.java</include>
                    </includes>
                    <includesTestSourceRoots>false</includesTestSourceRoots>
                    <generateHistorical>true</generateHistorical>
                    <encoding>GBK</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>

問題:如果按照以上操作沒有正確生成覆蓋率檔案,初步判斷是 jar包中的lisence沒有生效。
window 系統下,當官網上註冊生成自己的證書,不過只能用30天,主POM中配置:
                 <plugin>
                <groupId>com.atlassian.maven.plugins</groupId>
                <artifactId>maven-clover2-plugin</artifactId>
                <version>2.5.1</version>
                <configuration>
                    <includesTestSourceRoots>false</includesTestSourceRoots>
                    <generateHistorical>true</generateHistorical>
                    <encoding>GBK</encoding>
                    <licenseLocation>D:/clover.license</licenseLocation>
                </configuration>
            </plugin>
帶有單元測試集的子POM配置:(跳過開發的單元測試集,我們自己的qatest就不需要新增這些程式碼了)
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>   
        <version>2.4.2</version>   
        <configuration>   
          <skipTests>true</skipTests>   
        </configuration>   
</plugin>   

2,構建:
如果我們使用 

在goals 中輸入: 

clover2:setup test clover2:aggregate clover2:clover -Dmaven.test.failure.ignore
備註:
如果我們隊 checkout下來的程式碼不作處理,那麼執行上面的命令就會直接執行所有module下的單元測試集,如果開發程式碼中的單元測試出現bug,那麼會導致整個專案的執行失敗,如何跳過開發的單元測試呢 ?
思考的方法一:刪除開發程式碼下的test資料夾;證明是行不通的,因為我們每次執行程式碼前都會去 update 程式碼;
思考的方法二:命令中test後面新增-lp 指定只執行特定的模組,但是如果採用這個策略的話,只會在這頂的特定模組中打樁(clover),所以這種方法沒法統計到開發的程式碼覆蓋率(因為開發的程式碼沒有被打樁)。
思考的方法二:在又單元測試的子module中,對POM檔案做修改,在 <build> 新增程式碼:
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId>   
        <version>2.4.2</version>   
        <configuration>   
          <skipTests>true</skipTests>   
        </configuration>   
</plugin>   
意思就是  跳過本module下的單元測試。
注意:修改開發程式碼中的POM,只能在我們執行的hudson機器的job中去修改,切記別提交開發程式碼。

3. 構建後操作: 

選擇

Publish Clover Coverage Report 
Clover report directory: target/site/clover
Clover report file name: clover.xml


4.設定執行觸發時間:
 schedule setting for build periodically in hudson
Schedule的配置規則是有5個空格隔開的字元組成,從左到右分別代表:分 時 天 月 年。*代表所有,
                 0 12,20 * * * 表示在任何年任何月的任何天的12和20點的0分 進行構建!