Jacoco安装

前往地址下载,如下所示:

使用Jacoco查看Java代码覆盖率_jacoco


然后解压到自定义的目录即可:

使用Jacoco查看Java代码覆盖率_jacoco_02

在lib目录下看到有几个jar文件,其中jacocoagent.jar是在作为agent时用到,jacocoant.jar是结合ant使用的,jacococli.jar是命令行时会用到。

新建Springboot项目

这里只是为了演示,只新建一个简单的spring-boot项目,就一个简单的获取数字的平方的接口:

package com.example.jacocodemo.service;

import org.springframework.stereotype.Service;

public interface ServicePower {
    int numberPower(int number);

    @Service
    class ServicePowerImpl implements ServicePower {
        @Override
        public int numberPower(int number) {
            if (number == 0) {
                return 0;
            }
            return number * number;
        }
    }
}
package com.example.jacocodemo.rest;

import com.example.jacocodemo.service.ServicePower;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class RestPower {
    @Autowired private ServicePower servicePower;

    @GetMapping("/power/{number}")
    public int numberPower(@PathVariable("number") int number) {
        return servicePower.numberPower(number);
    }
}

使用agent启动服务

java -javaagent:./jacocoagent.jar=destfile=./target/coverage.exec -jar ./target/jacocodemo-0.0.1-SNAPSHOT.jar

然后根据实际的测试用例调用一下接口,这里的逻辑很简单,比如:接口参数一个是0,一个是4即可。如:http://localhost:8080/power/0和http://localhost:8080/power/4。

生成覆盖率报告

调用完接口后,即可把服务停了,此时会生成coverage.exec文件,可以执行命令来生成html形式的报告:java -jar jacococli.jar report coverage.exec --classfiles F:\code\Java\jacocodemo\target\classes --html ./target/。

使用Jacoco查看Java代码覆盖率_jacoco_03

另外,在启动agent的时候,可以指定启动参数以实现更多自定义的过滤:

使用Jacoco查看Java代码覆盖率_jacoco_04

可以参考文档了解更多。

使用Jacoco查看Java代码覆盖率_jacoco_05

这里只是提供一个简单集成示例,这个步骤后续应该集成到devops系统来实现自动化的测试与报告生成,不用人工这么低效的逐步执行。