Jacoco+Jenkines小白之路

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.重新构建工程,可以看到如下的效果。

原文地址:https://www.cnblogs.com/lixuan1998/p/10679141.html

时间: 2024-11-13 02:11:01

Jacoco+Jenkines小白之路的相关文章

1、Java小白之路前言

大二一年准备好好学习Java,养成一个良好的习惯写博客,但是由于各种各样的原因,并没有坚持下来.而正好又赶上大三结束,去实习,发现自己的基础还是有些薄弱,所以决定,重新走上这条Java小白之路. 时隔多年又重新走上了Java小白之路,这一次很幸运,还有小曹源一起陪着,重新开始Java小白之路,我的原因很简单,来到了中国航天院后,接触到代码,接触到设计模式,发现自己被吊打,作为一个本科生和一群985高校的硕士在一起实力差距还是明显的.基础知识的薄弱导致每天的工作质量严重低下,基础知识不牢,基础操作

iOS-重回block小白之路

在我刚刚接触iOS开发的时候,是通过MJ老师讲的OC基础入门的,iOS圈的人应该基本都知道MJ大神吧,即便如此大神,讲解完block之后我依然感觉晕晕乎乎的,直到后来真正进公司做项目,依然感觉这是自己的一个弱项,后来通过不断接触,对它可能有了更多的了解,但是不一定够全面够深入,现在准备通过自己看过的几篇觉得还不错的文章,系统的来总结一下block的使用.不多废话,下面开始: 1.我在平时读他人文章的时候对block常见的描述是匿名函数,再多一些描述就是可以在方法内部使用,也可以在方法外部使用,还

web开发小白之路

今天就来谈谈本人从事web开发的一系列白只又白的经历,本人刚开始是从事ios开发的,由于一系列的变故现在变为了web前端开发,不过说来也奇怪,刚开始接触前端时间可以说是彻底蒙圈,各种选择器,各种适配搞得我脑袋都要炸开了,不过现在还好,慢慢的熟悉了知道是怎么一回事了,不过随着熟悉程度的加深,问题也随之越来越多了,先开始是页面布局总是搞乱各种浮动,居中,内外边距等问题搞得我是一头雾水,不过现在好了,最近开发了一个web网站,虽然说没有什么动态效果,纯静态,但是这也是我的得意之作啊,所以还是难免有点小

SpringBoot小白之路

入门第一个helloWorld 程序: http://www.cnblogs.com/larryzeal/p/5765945.html 瞬间感觉这个高封装度的框架太牛逼了.不需要关注太多的配置. 整合Mybatis 只需要 生成dao文件的插件 以及 分页插件即可. 原文地址:https://www.cnblogs.com/pzyin/p/8337177.html

React 小白之路—TodoList总结

今天使用create-react-app创建一个自己的项目,写了一个TodoList示例演示,写的过程中遇见很多的问题,记录下来,防止以后再犯. <input ref={this._inputElement} placeholder="enter task" type="text">中的ref={this._inputElement} ,原教程中不是这样子写的,而是ref={(a)=>{this._inputElement=a}} ,这样写是老版本

python小白之路(基础知识一)

一.开篇输出:print("Hello World!") 二.中文自由行:#coding=utf-8 或 # -- coding:UTF-8 -- 三.Linux多行:#!/usr/bin/python 四.不能少的注释:1.#单行注释 2.'''多行注释''' 五.标识符由字母.下划线.数字组成,且数字不能开头 六.不能修改和使用的关键词 import keyword keyword.kwlist 七.命名规范:1.见名知意 2.驼峰命名法 八.字符串的格式化:1."我叫%

python小白之路(控制语句二)

1.判断语句:往往用来对是否满足条件进行判断.if.if...else....if...elif...else....if嵌套. 2.循环语句while:一般通过数值是否满足循环条件.for:一般是对能保存多个数据的变量,进行遍历. 3.break和continuebreak:用来结束整个循环.continue:用来结束本次循环,继续执行下一次循环.break/continue只能用在循环中,在嵌套循环中,遵循就近原则只对最近的一层循环起作用. 原文地址:http://blog.51cto.co

python小白之路(特性语法三之字符串)

1.字符串:双引号或单引号中的数据输出:print() 输入:input()切片:[起始下标:结束下标:步长] PS:选取区间属于左闭右开型.[1:5:1] [5:1:-1]常见操作:find: mystr.find(str, start=0, end=len(mystr)) 存在返回索引值,否则返回-1.index: mystr.index(str, start=0, end=len(mystr)) 同find一样,存在返回索引,不存在会报异常.count: mystr.count(str,

python小白之路(特性语法三之遍历、公共方法、引用)

一.遍历通过for...in...的语法结构,我们可以遍历字符串.列表.元组.字典等数据结构.1.字符串遍历a_str = "hello world"for char in a_str:print(char,end=' ')2.列表遍历a_list = [1,2,3,4,5]for num in a_list:print(num,end=' ')3.元组遍历a_tuple =(1,2,3,4,5)for num in a_tuple:print(num,end=' ')4.字典遍历1)