FunTester jacoco 接口测试代码覆盖率实现精细化过滤报告中无用的类

FunTester · March 31, 2020 · 318 hits

做使用jacoco做接口代码覆盖率测试的过程中,遇到一个问题:测试报告里面信息太多,很杂乱没有针对性,很多都是config和bean以及适配器的类,绝大部分没有业务代码,统计出来的覆盖率受影响比较大,不够准确。

这里就引入了如何过滤jacoco代码覆盖率测试报告的问题,经过查阅资料,大概的方案分两种:一是在jacoco配置中过滤,二是在class文件夹中删除掉无用的class文件。

经过一些考量,决定采用第一种方案,原因如下:1.第二种方案不可逆,如果在统计完某一个moudel的覆盖率,之后在统计其他moudel的时候就无法直接实现;2.第二种处理起来比较麻烦,规则需要脚本实现。3.与现有框架不好结合,没办法在报告的框架中方便快捷实现这个功能。

第一种方案主要修改build文件的配置:


<?xml version="1.0" ?>
<project name="studentpad-middle-toc" basedir="/home/jmsmanager/report/studentpad-middle-toc"
xmlns:jacoco="antlib:org.jacoco.ant"
xmlns:sonar="antlib:org.sonar.ant" default="all">
<!--项目名-->
<property name="projectName" value="studentpad-middle-toc"/>
<!--Jacoco的安装路径-->
<property name="jacocoantPath" value="/home/jmsmanager/jacoco/lib/jacocoant.jar"/>
<!--生成覆盖率报告的路径-->
<property name="reportfolderPath" value="${basedir}/report/"/>
<!--远程服务的ip地址,如有多个,可设置多个,name需修改-->
<property name="server_ip" value="127.0.0.1"/>

<!--待测程序.class文件路径-->
<property name="waterommpClasspath" value="/xdfapp/${projectName}/webapps/ROOT/WEB-INF/classes/com/noriental/moudle"/>

<!--待测程序源码文件路径-->
<property name="mcmSrcpath" value="${basedir}/source/${projectName}/workspace/src/main/java"/>
<!--Jacoco所在目录-->
<taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml">
<classpath path="${jacocoantPath}" />
</taskdef>

<!--merge task,当有多个待测程序时,生成报告前需将所有.exec文件merge成一个-->
<target name="merge" depends="dump">
<jacoco:merge destfile="jacoco.exec">
<fileset dir="${basedir}" includes="*.exec"/>
</jacoco:merge>
</target>
<!--dump任务:
根据前面配置的ip地址,和端口号,访问目标服务,并生成.exec文件。-->

<target name="dump">
<!-- reset="true"是指在dump完成之后,重置jvm中的覆盖率数据为空。append="true"是指dump出来的exec文件为增量方式 -->
<jacoco:dump address="${server_ip}" reset="true" destfile="${basedir}/jacoco.exec" port="12345" append="false"/>
</target>


<!--report任务:
根据前面配置的源代码路径和.class文件路径,
根据dump后,生成的.exec文件,生成最终的html覆盖率报告。-->
<target name="report">
<delete dir="${reportfolderPath}" />
<mkdir dir="${reportfolderPath}" />

<jacoco:report>
<executiondata>
<file file="${basedir}/jacoco.exec" />

</executiondata>

<structure name="JaCoCo Report">

<group name="学生中间层代码覆盖率">
<classfiles>
<fileset dir="${waterommpClasspath}">
<exclude name="**/vo/*.class"/>
</fileset>
</classfiles>

<sourcefiles encoding="UTF-8">
<fileset dir="${mcmSrcpath}">
</fileset>
</sourcefiles>
</group>
</structure>

<html destdir="${reportfolderPath}" encoding="utf-8" />
<csv destfile="${reportfolderPath}/report.csv" />
<xml destfile="${reportfolderPath}/report.xml" />

</jacoco:report>
</target>
<target name="all" />

</project>

主要在exclude这个标签里面过滤,如果大块排除,也可以在指定classfilepath的时候过滤。


  • 郑重声明:文章首发于公众号“FunTester”,欢迎关注交流,禁止第三方(腾讯云除外)转载、发表。

技术类文章精选

无代码文章精选

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
No Reply at the moment.
需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up