简单实现jacoco代码覆盖率测试

Posted by DDW on 03-04,2023

一、windows实现

1、下载java编译器IDEAL社区版
https://www.jetbrains.com/idea/download/?section=windows
image-1692241100221
下载完成后,第一个创建快捷方程式打勾,然后按照提示一直往下走即可。
2、打开安装浩的IDEAL,创建新的项目,写好安装路径
image-1692241270133
3、将测试代码放入其中

import java.util.Scanner;

public class test {
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);

        int w;
        int isContinue = 1;

        while (isContinue > 0){
            System.out.println("input w :");
            w = scan.nextInt();

            switch (w%7) {
                case 1:
                    System.out.println("一");
                    break;
                case 2:
                    System.out.println("二");
                    break;
                case 3:
                    System.out.println("三");
                    break;
                case 4:
                    System.out.println("四");
                    break;
                case 5:
                    System.out.println("五");
                    break;
                case 6:
                    System.out.println("六");
                    break;
                case 0:
                    System.out.println("七");
                    break;
            }

            System.out.println("isContinue(0/1)?");
            isContinue = scan.nextInt();
        }

    }
}

image-1692241321391
4、直接右键选择 RUN “……” with Coverage 或者点击右上角的运行图标即可运行。
image-1692241592440
运行结果会直接显示出来
image-1692241615662
点击结果旁边的生成覆盖报告图标,输入保存路径,可以生成对应的HTML文件。
image-1692241710972
5、可以更改覆盖率工具
image-1692241682506

二、linux实现

github下载jacoco包,开源的
https://github.com/jacoco/jacoco/releases/tag/v0.8.10
下载jar,利用rz命令或宝塔工具放进自己的服务器中,解压这里就不再多说了

1、生成桩文件

输入以下命令:

java -javaagent:/usr/local/jacoco/lib/jacocoagent.jar=destfile=jacoco_test.exec,includes=com.tony* -jar halo-1.5.4.jar

命令分解:

  • -javaagent:/usr/local/jacoco/lib/jacocoagent.jar 前面是固定格式,后面的路径是你解压后,里面jacocoagent.jar这个包的路径。
  • =destfile=jacoco_test.exec,这个是到时候保存代码覆盖率文件的名字,随意取,如果不写路径就是保存到你当前的文件夹。
  • includes=com.tony这段代码的意思是 includes是参数,后面的是要统计java包里面的哪个类(具体工作的时候要问开发),这里com.tony意思是统计所有com.tony*开头的类,includes函数也可改成excludes表示除去哪个类其他的都统计。
  • -jar halo-1.5.4.jar表示要启动的主服务,也就是你要统计的java程序是哪个(相对路径和绝对路径都可以)。

执行该命令后,会启动服务,然后可以在服务上随意调用接口,功能测试,然后ctrl+c关闭掉该服务,会自动生成jacoco_test.exec

2、生成html

使用jacocoli.jar(跟jacocoagent.jar在同一目录下的)
输入命令

java -jar jacocoli.jar report jacoco_test.exec --sourcefiles ~/app/halo.java --classfiles ~/app/classes --html ./repost-test --encoding utf-8

命令分解:

  • java -jar jacocoli.jar report jacoco_test.exec 前面是你的jacocoli.jar文件的路径,后面是你第一步生成exec的路径在哪里。
  • –sourcefiles ~/app/halo.java 你的java源代码路径在哪里
  • –classfiles ~/app/classes 你的java编译后的代码路径在哪里
  • –html ./repost-test生成的是html文件 后面是生成的路径
  • –encoding utf-8 源码的编码方式
    把这些收集好的信息,都填好了以后就会生成好这个报告了,可以用XSHELL sz命令或者用宝塔工具抓取到本机打开查看。
    image-1692329937795
    可以点击进入
    image-1692330162441
    image-1692330173970
    image-1692330243835
    点击进入还可以看源码
    image-1692330274023
    绿色代表执行过,红色代表没执行过,黄色代表有分支没有执行到。