接口测试代码覆盖率(jacoco)方案分享

在作接口测试过程当中,为了达到量化接口测试用例效果的目的,引入了代码覆盖率做为重要指标,在查阅相关文档和资料经过实践以后,大概获得了一个方案。如图:
html

备注:该方案略微复杂了一些,缘由在于服务JVM所在的服务器和Jenkins构建服务器与测试脚本所在服务器分别在三台服务器上。java

Jenkins机器:服务对应的Jenkins机器web

测试项目Jenkins:服务对应的测试项目Jenkins机器编程

第一次画流程图,有点乱,这里在介绍一下思路,经过服务所在的Tomcat容器的启动脚本(JAVA_OPTS参数)引入jacoco配置,而后启动服务,经过ant配置build.xml读取exec的信息编译并生成报告(html格式)。最后使用web服务来查看相关报告。服务器

最终页面展现状况以下:app

jacoco配置
 框架

jacoco配置
jacoco配置须要在jar项目启动参数里面添加以下信息:jvm

 -javaagent:/home/jmsmanager/jacoco/lib/jacocoagent.jar=includes=com.noriental.*,output=tcpserver,address=127.0.0.1,port=12345tcp

javaagent配置:jacocoagent.jar所在目录性能

includes配置:所包含的包路径

output配置:输出类型,默认tcpserver

address配置:服务ip,本机IP选12.7.0.0.1

port配置:端口,任选

ant配置build.xml文件

<?xml version="1.0" ?>

<project name="user-center" basedir="/home/jmsmanager/report/user-center"
    xmlns:jacoco="antlib:org.jacoco.ant"
    xmlns:sonar="antlib:org.sonar.ant" default="all">
    <!--项目名-->
    <property name="projectName" value="user-center"/>
    <!--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="/home/jmsmanager/report/${projectName}/source/BOOT-INF/classes/com/noriental/center/moudle/"/>

    <!--待测程序源码文件路径-->
    <property name="mcmSrcpath" value="${basedir}/source/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="false" destfile="${basedir}/jacoco.exec" port="12347" append="true"/>
    </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="**/request/*.class"/>
                                <exclude name="**/response/*.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>
</project>
 

由于报告在服务所运行的机器上,并且设计的机器比较多,因此把测试报告集中放在某一台机器上统一提供查看。

一块儿来~FunTester

往期文章精选

  1. java一行代码打印心形
  2. Linux性能监控软件netdata中文汉化版
  3. 接口测试代码覆盖率(jacoco)方案分享
  4. 性能测试框架
  5. 如何在Linux命令行界面愉快进行性能测试
  6. 图解HTTP脑图
  7. 写给全部人的编程思惟
  8. 测试之JVM命令脑图

公众号地图

相关文章
相关标签/搜索