Spring boot 接口测试获取代码测试覆盖率(亲测有效)

Spring Boot 接口测试获取代码测试覆盖率-(适用于PostMan/Swagger等接口测试的代码覆盖率)

工具:Spring Boot+maven+Jacoco+Ant

项目为现在主流的前后端分离架构,后端代码开发完后需要进行本地自测,尤其是在业务比较复杂的系统中,覆盖率要求比较高。所以为了提高测试代码覆盖率,使用一种工具来获取代码的执行情况,此次采用Jacoco进行采集,方便开发人员发现未执行过的代码,提高测试效率。

环境搭建主要在Windows下进行

配置步骤

1、JaCoco安装

https://www.jacoco.org/jacoco/

选择一个版本下载 并解压缩到本地目录即安装成功
在这里插入图片描述

2、Ant安装

https://ant.apache.org/bindownload.cgi

  1. 下载后解压缩

在这里插入图片描述

  1. 配置环境变量

ANT_HOME=D:\soft\apache-ant-1.9.15
PATH 添加 %ANT_HOME%/bin
cmd输入 ant -version 展示版本号即安装成功

3、Spring Boot JVM启动参数配置

1 项目结构
在这里插入图片描述
2 编写测试service

@Service
public class UserService {


    public User findName(String id) {
        if ("1".equals(id)) {
            return new User("zholiu", "man", "21");
        }
        if ("2".equals(id)) {
            return new User("zhangsan", "woman", "22");
        }
        if ("3".equals(id)) {
            return new User("lsi", "man", "23");
        }
        if ("4".equals(id)) {
            return new User("wangw", "man", "24");
        }
        return null;
    }

}

3 controller

@RestController
@RequestMapping("/test")
public class testController {


    @Autowired
    private UserService userService;

    @GetMapping("/getName/{id}")
    public User getName(@PathVariable String id) {
        return userService.findName(id);
    }
}

4 启用参数

-javaagent:D:\soft\jacoco-0.8.5\lib\jacocoagent.jar=includes=org.example.*,output=tcpserver,port=8125,address=127.0.0.1

在这里插入图片描述

build.xml文件配置

新建build.xml 注:这个文件随便放在那里

<?xml version="1.0" encoding="UTF-8"?>
<project name="JaCoCo" default="run" xmlns:jacoco="antlib:org.jacoco.ant">
        <!--Jacoco的安装路径-->
    <property name="jacocoAntPath" value="D:\soft\jacoco-0.8.5\lib\jacocoant.jar"/>
        <!--最终生成.exec文件的路径,Jacoco就是根据这个文件生成最终的报告的-->
    <property name="jacocoExecPath" value="D:\work\test\jacocoExec"/>
        <!--生成覆盖率报告的路径-->
    <property name="jacocoReportPath" value="D:\work\test\report"/>
        <!--远程tomcat服务的ip地址   -->
    <property name="server_ip" value="localhost"/>
        <!--前面配置的远程tomcat服务打开的端口,要跟上面配置的一样-->
    <property name="server_port" value="8125"/>
 
        <!--源代码路径-->
    <property name="srcPath" value="D:\work\jacocoDemo\serviceB\src\main\java"/>
 
        <!--service.class文件路径-->
    <property name="classesPath" value="D:\work\jacocoDemo\serviceB\target\classes"/>
 
        <!--让ant知道去哪儿找Jacoco-->
      <taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml">
            <classpath path="${jacocoAntPath}"/>
      </taskdef>
 
           <target name="run">
            <echo message="start..."/>
            <echo message="dump..."/>
                <antcall target="dump"/>
            <echo message="merge..."/>
                <antcall target="merge"/>
            <echo message="report..."/>
                <antcall target="report"/>
            <echo message="end..."/>
           </target>
 
      <!--dump任务:
                        根据前面配置的ip地址,和端口号,访问目标tomcat服务,并生成.exec文件。-->
      <target name="dump">
        <jacoco:dump address="${server_ip}" reset="true" destfile="${jacocoExecPath}/study_jacoco.exec" port="${server_port}" append="false"/>
      </target>
 
    <target name="merge">
        <jacoco:merge destfile="${jacocoExecPath}/merged.exec">
            <fileset dir="${jacocoExecPath}" includes="*.exec"/>
        </jacoco:merge>
    </target>
 
       <!--jacoco任务:
                        根据前面配置的源代码路径和.class文件路径,
                        根据dump后,生成的.exec文件,生成最终的html覆盖率报告。-->
       <target name="report">
        <jacoco:report>
               <executiondata>
                <file file="${jacocoExecPath}/merged.exec"/>
            </executiondata>
 
            <structure name="JaCoCo Report">
                <group name="serviceB">
                    <sourcefiles encoding="UTF-8">
                            <fileset dir="${srcPath}"/>
                    </sourcefiles>
                    <classfiles>
                          <fileset dir="${classesPath}/org/example"/>
                    </classfiles>
                </group>
 
            </structure>
 
            <html destdir="${jacocoReportPath}" encoding="utf-8"/>
           <csv destfile="${jacocoReportPath}/report.csv"/>
        <xml destfile="${jacocoReportPath}/report.xml"/>
        </jacoco:report>
      </target>
</project>
 

生成报表

在build.xml所在目录执行 ant -f build.xml 命令
一定要先启动spring boot服务再执行此命令
在这里插入图片描述
查看报表结果
打开 D:\work\test\report\index.html,可以看到我调用UserService的情况,红色的为从未执行过的代码,
在这里插入图片描述
此时调用 localhost:9001/test/getName/{id} 接口传入参数2再次查看结果发现代码已经标绿在这里插入图片描述

到此结束我们的jacoco就安装完成了

JAVA讨论群:931243010

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值