zoukankan      html  css  js  c++  java
  • jacoco测试覆盖率过滤非业务类

    之前在做接口测试代码覆盖率(jacoco)方案的时候,漏了一些东西,这篇文章补一下。做使用jacoco做接口代码覆盖率测试的过程中,遇到一个问题:测试报告里面信息太多,很杂乱没有针对性,很多都是configbean以及适配器的类,绝大部分没有业务代码,统计出来的覆盖率受影响比较大,不够准确。

    这里就引入了如何过滤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”首发,欢迎关注交流,禁止第三方转载。更多原创文章:FunTester十八张原创专辑,合作请联系Fhaohaizi@163.com

    热文精选

  • 相关阅读:
    【JS】415- JS面向对象之 7 大基本原则
    【每周小回顾】14- 一起回顾上周精彩内容
    【全栈修炼】414- CORS和CSRF修炼宝典
    【全栈修炼】CORS和CSRF修炼宝典
    【JS】413- JavaScript中的位运算和权限设计
    【面试题】412- 35 道必须清楚的 React 面试题
    【CSS】410- 关于CSS盒子模型、BFC及其应用
    15.app后端怎么设计用户登录方案
    14.app后端如何设计api
    13.app后端为什么要用到消息队列
  • 原文地址:https://www.cnblogs.com/FunTester/p/12935686.html
Copyright © 2011-2022 走看看