1. 程式人生 > >Jacoco+Jenkines小白之路

Jacoco+Jenkines小白之路

hot dex utf cover code java epo public {}

Jacoco+Jenkines小白之路

最近工作中正在推廣jacoco的增量覆蓋率的統計,想學習一波,純粹采坑中,適合小白學習jacoco。調研了一下市面上使用的增量覆蓋率的工具,發現大多數公司都在使用jacoco,那麽jacoco到底相比其他工具的優點表現在哪些方面呢?

市場上主要的代碼覆蓋率工具:

  • Emma
  • Cobertura
  • Jacoco
  • Clover

比較:(wuli圖片是我上百度copy下來的),總結一下jacoco的優勢

  • JaCoCo支持分支覆蓋、引入了Agent模式
  • EMMA官網已經不維護了,JaCoCo是其團隊開發的,可以理解為一個升級版
  • JaCoCo社區比較活躍,官網也在不斷的維護更新
  • 很多第三方的工具提供了對JaCoCo的集成,如sonar、Jenkins等
    技術分享圖片

接下來就進入正題了,我們可以現在本地的Maven工程中插入jacoco插件學習一下,只需要3步,跟我一起學習吧

1.pom.xml文件中插入jacoco的插件及版本

<?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>jacoco</groupId>
<artifactId>jacoco</artifactId>
<version>1.0-SNAPSHOT</version>

<name>JaCoCo Examples</name>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

    <!-- Sonar -->
    <sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
    <sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
    <!-- The destination file for the code coverage report has to be set to the same value
    in the parent pom and in each module pom. Then JaCoCo will add up information in
    the same report, so that, it will give the cross-module code coverage. -->
    <sonar.jacoco.itReportPath>${project.basedir}/target/jacoco.exec</sonar.jacoco.itReportPath>
    <sonar.language>java</sonar.language>
</properties>

<dependencies>
    <!--
    <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.8.1</version>
    <scope>test</scope>
    </dependency>
    -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
        <scope>test</scope>
    </dependency>
</dependencies>

<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.8.2</version>
            </plugin>
        </plugins>
    </pluginManagement>

    <plugins>
        <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <!--<configuration>-->
                <!--<includes>com.*</includes>-->
            <!--</configuration>-->
            <executions>
                <execution>
                    <id>pre-test</id>
                    <goals>
                        <goal>prepare-agent</goal>
                    </goals>
                </execution>
                <execution>
                    <id>post-test</id>
                    <phase>test</phase>
                    <goals>
                        <goal>report</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.5</source>
                <target>1.5</target>
            </configuration>
        </plugin>
    </plugins>
</build>


2.寫一個Java方法及它的測試方法(這個測試方法就是用來測試你寫的方法的並且計算你的全量覆蓋率的),我寫了個超級超級簡單的HelloWorld方法

public class HelloWorld {

 public HelloWorld(){}
 public String Method1(){
     return "Hello World";
 }
 public int Method2(int a,int b){
     return a+b;
 }

}

public class HelloWorldTest {

@Test
public void testMethod1(){
    HelloWorld helloWorld=new HelloWorld();
    String string=helloWorld.Method1();
    Assert.assertNotNull(string);
}

}

  1. mvn clean 一下,然後在運行一下,就可以生成全量報告

技術分享圖片
技術分享圖片
技術分享圖片

4.進入文件夾中找到index.html,打開就可以查看全量測報告了
技術分享圖片

以上就是本地玩轉jacoco的教程,因為Jenkins提供了對jacoco的集成,所以接下來是Jenkins+jacoco

1.首先有一臺服務器並且配置好了Jenkins,需要將代碼上傳到git上,我的Jenkins之前就配置好了github,所以我把代碼上傳到github上
2.Jenkins上配置
技術分享圖片

技術分享圖片

3.重新構建工程,可以看到如下的效果。
技術分享圖片

Jacoco+Jenkines小白之路