首先,研发写的代码里要有单元测试相关的桩内容。

1.需要下载可用的jacoco.jar包配置到build.xml中

2.jenkins配置:

sonar.projectKey=${JOB_NAME}
sonar.projectName=$JOB_NAME
sonar.projectVersion=$SVN_REVISION
sonar.sources=. 
sonar.language=java  
sonar.sourceEncoding=UTF-8
sonar.dynamicAnalysis=reuseReports
sonar.core.codeCoveragePlugin=jacoco
sonar.surefire.reportsPath=${WORKSPACE}/billtrunk/target/junit
sonar.java.binaries=${WORKSPACE}/billtrunk/bin/classes
sonar.jacoco.reportPath=${WORKSPACE}/billtrunk/target/sonar/jacoco.exec
sonar.junit.reportPaths=${WORKSPACE}/billtrunk/target/junit
sonar.jacoco.itReportPath=${WORKSPACE}/billtrunk/target/ITCoverageReport/jacocoIT.exec

3.build.xml样本

<?xml version="1.0" encoding="UTF-8"?>
<project name="Simple Java Project analyzed with the Sonar Ant Task" default="all" basedir="." xmlns:jacoco="antlib:org.jacoco.ant" xmlns:sonar="antlib:org.sonar.ant" xmlns:ivy="antlib:org.apache.ivy.ant">

<!-- ========= Define the main properties of this project ========= -->
        <property name="src.dir" value="src" />
        <property name="build.dir" value="bin" />
        <property name="classes.dir" value="${build.dir}/classes" />
        <property name="lib.dir" value="${build.dir}/lib/"/>
        <property name="reports.junit.xml.dir" value="${basedir}/target/junit"/>
        <property name="sonar.coverage.lib" value="/opt/lib_coverage"/>
        <property name="ivysettings.dir" value="/opt/ivysettings"/>
        <property name="jacoco.dir" value="${basedir}/target/sonar"/>
        <property name="reports.ITCoverageReport.exec" value="${basedir}/target/ITCoverageReport"/>
        <property name="reports.ITCoverageReport.dir" value="${reports.ITCoverageReport.exec}/report"/>
        
        
        
    <path id="project.classpath">
            <fileset dir="${lib.dir}">
                <include name="*.jar"/>
            </fileset>
            <pathelement path="${classes.dir}"/>
        </path>
       
        <ivy:settings file="${ivysettings.dir}/ivysettings.xml" />
        <target name="resolve" description="--> parse ivy.xml">
            <ivy:resolve file="ivy.xml" conf="*" />
            <ivy:retrieve pattern="${lib.dir}/[artifact].[ext]"/>
        </target>

<target name="clean">
                <delete dir="${build.dir}" />
                <delete dir="${jacoco.dir}"/>
        </target>
        <target name="init">
            <mkdir dir="${build.dir}" />
            <mkdir dir="${classes.dir}" />
            <mkdir dir="${reports.junit.xml.dir}" />
            <mkdir dir="${jacoco.dir}" />
        </target>

<target name="compile" depends="init">
            <javac srcdir="${src.dir}" destdir="${classes.dir}" source="1.7" target="1.7" debug="true"
               deprecation="false" optimize="false" failonerror="true" >
                <compilerarg line="-encoding UTF-8"/>
                <classpath refid="project.classpath"></classpath>
            </javac>
            <copy todir="${classes.dir}" overwrite="true">
                <fileset dir="${src.dir}/main/java/">
                    <exclude name="**/*.java"/>
                </fileset>
                <fileset dir="${src.dir}/test/java/">
                    <exclude name="**/*.java"/>
                </fileset>
                <fileset dir="${src.dir}/main/resources/">
                    <exclude name="**/*.java"/>
                </fileset>
                <fileset dir="${src.dir}/test/resources/">
                    <exclude name="**/*.java"/>
                </fileset>
            </copy>
        </target>
    
        <target name="test" depends="compile">

<taskdef name="junit" classname="org.apache.tools.ant.taskdefs.optional.junit.JUnitTask">
                <classpath>
                    <path refid="project.classpath"/>
                </classpath>
            </taskdef>

<!-- Import the JaCoCo Ant Task -->
            <taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml">
                <!-- Update the following line, or put the "jacocoant.jar" file in your "$HOME/.ant/lib" folder -->
                <classpath path="${sonar.coverage.lib}/jacocoant0.7.9.jar" />
            </taskdef>

<!-- Run your unit tests, adding the JaCoCo agent -->
            <jacoco:coverage destfile="${jacoco.dir}/jacoco.exec">
             <junit fork="on" forkmode="once" printsummary="on" showoutput="true">
                 <formatter type="xml" usefile="true"/>
                 <classpath>  
                  <path refid="project.classpath"/>  
                </classpath>
                <batchtest todir="${reports.junit.xml.dir}">
                 <fileset dir="${classes.dir}">
                    <include name="test/**/*Test.class" />
                 </fileset>
                </batchtest>
             </junit>         
            </jacoco:coverage>  
            
            <junitreport todir="${reports.junit.xml.dir}">
             <fileset dir="${reports.junit.xml.dir}">
                 <include name="TEST-*.xml" />
             </fileset>
             <report format="frames" todir="${reports.junit.xml.dir}" />
            </junitreport>
            
            <jacoco:report>
                <executiondata>
                    <file file="${jacoco.dir}/jacoco.exec" />
                </executiondata>
                <structure name="ma project coverage report">
                    <classfiles>
                        <fileset dir="${classes.dir}" />
                    </classfiles>
                    <sourcefiles encoding="UTF-8">
                        <fileset dir="${src.dir}" />
                    </sourcefiles>
                </structure>
                <html destdir="${basedir}/target/report" />
                <csv destfile="${basedir}/target/report/report.csv" />
                <xml destfile="${basedir}/target/report/report.xml" />
            </jacoco:report>

</target>

<target name="it coverage" depends="test">
        <jacoco:dump address="192.168.126.7" reset="true" destfile="${reports.ITCoverageReport.exec}/jacocoIT.exec" port="8080" append="true">
        </jacoco:dump>
    </target>
    <target name="it coverage report" depends="it coverage">
        <delete dir="${reports.ITCoverageReport.dir}" />
        <mkdir dir="${reports.ITCoverageReport.dir}" />
        <jacoco:report>
            <executiondata>
                <file file="${reports.ITCoverageReport.exec}/jacocoIT.exec" />
            </executiondata>
            <structure name="integration test coverage rate report">
                <group name="Check Order Related">
                    <classfiles>
                        <fileset dir="${classes.dir}" />
                    </classfiles>
                    <sourcefiles encoding="UTF-8">
                        <fileset dir="${basedir}/src" />
                    </sourcefiles>
                </group>
            </structure>
            <html footer="baby-console it coverage report" destdir="${reports.ITCoverageReport.dir}" />
            <csv destfile="${reports.ITCoverageReport.dir}/coverage-report.csv" />
            <xml destfile="${reports.ITCoverageReport.dir}/coverage-report.xml" />
        </jacoco:report>
    </target>

<!-- ========= The main target "all" ========= -->
        <target name="all" depends="clean,resolve,compile,it coverage report" />

</project>

4.单元测试要显示在sonarqube中,需要在web端配置

5.可以在设计,链接中加入详情

可以tomcat的conf/server.xml中配置链接 <host>标签内加上访问url

<Context path="/coverage" docBase="/opt/jenkins/workspace/UNIT_TEST_srpbase-common/billtrunk/target/report" debug="0" privileged="true">
</Context>
<Context path="/junit" docBase="/opt/jenkins/workspace/UNIT_TEST_srpbase-common/billtrunk/target/junit" debug="0" privileged="true">
</Context>

---------------------
原文:https://blog.csdn.net/aaf02002/article/details/81507410
版权声明:本文为博主原创文章,转载请附上博文链接!

Jenkins+sonar+jcoco+ivy做代码覆盖率的更多相关文章

  1. Jenkins+Sonar 项目构建前代码审查

    一.sonar简介 1.概述 Sonar (SonarQube)是一个开源平台,用于持续检查代码质量,不只是一个质量数据报告工具,更是代码质量管理平台. 支持Java, C#, C/C++, PL/S ...

  2. 使用Cobertura做代码覆盖率测试

    经验总结:首先要把cobertura.jar包含ant的classpath路径中,其次要求它包含在测试用例的classpath中: 使用cobertura做代码覆盖率测试中出现的问题:覆盖率始终为0, ...

  3. Jenkins+Sonar质量门禁【实践篇-maven版】

    Jenkins+Sonar质量门禁[实践篇-maven版] 配置文档百度挺多的,就不展开来了 首先很遗憾的告诉大家,maven版做不了质量门禁!只能扫描!!!     就我们公司项目里,jenkins ...

  4. jenkins + sonar 安装配置

    最近把snoar 添加上了 [root@snoar data]#   wget https://sonarsource.bintray.com/Distribution/sonarqube/sonar ...

  5. Jenkins+Sonar搭建持续集成和代码质量检查环境

    Jenkins+Sonar搭建 一.相关环境及下载地址 系统:Ubuntu JDK:1.8 MySQL:5.7 软件包: jenkins_2.121.3_all.deb sonarqube-7.3.z ...

  6. jenkins+sonar发送结果邮件的状态问题修复

    在我的这篇博文中:使用jenkins+sonar进行代码扫描,并发送自定义邮件 邮件的配置为默认的$PROJECT_DEFAULT_SUBJECT 所以发送的邮件标题中的状态是jenkins构建的状态 ...

  7. Jenkins+Sonar集成对代码进行持续检测

    介绍 SonarQube(曾用名Sonar(声纳)[1])是一个开源的代码质量管理系统. 特征 支持超过25种编程语言[2]:Java.C/C++.C#.PHP.Flex.Groovy.JavaScr ...

  8. Jenkins Sonar

    sonar简介 SonarQube是 一个开源的代码质量分析平台,便于管理代码的质量,可检查出项目代码的漏洞和潜在的逻辑问题.同时,它提供了丰富的插件,支持多种语言的检测, 如 Java.Python ...

  9. jenkins使用jacoco插件检测代码覆盖率(八)

    代码覆盖率:类覆盖,方法覆盖,行覆盖,指令覆盖……(简而言之,就是判断有没有被执行) 覆盖率 = 已经执行的代码 / 总代码 (1)创建maven项目,配置pom.xml如下 pom.xml < ...

随机推荐

  1. Appium自动化WebView中元素的操作

    在App开发过程中,很容易用到第三方的WebView控件,这个属于移动端混合型App.在我们做自动化测试的过程中,就要对这种情况进行处理,最通用的办法就是先将appium切换到webview模式然后按 ...

  2. 很多人都会做错的一道JVM题?【分享】

    有关Java虚拟机类加载机制相关的文章一搜一大把,笔者这儿也不必再赘述一遍了.笔者这儿捞出一道code题要各位大佬来把玩把玩,假定你一眼就看出了端倪,那么祝贺你,你可以下山了:​ public cla ...

  3. 动态修改maven的jdk版本

    当环境变量jdk为1.7,项目为jdk1.8,用mvn clean package指令打包项目时,想不修改环境变量的情况下,修改maven的jdk版本 方法如下: 官网给出了方法 https://ma ...

  4. .net core session部分浏览器或移动客户端不可用

    .net core session使用有很多文章,这里不再赘述. 问题现象为大部分浏览器或者移动客户端(例如微信.支付宝.钉钉)等都可以正常使用.但部分支付宝用户及钉钉用户确无法使用. 写入后读取不到 ...

  5. 海边拾贝-E-第三方专栏文章

    收录一些优秀的专栏文章,或者解决某类知识点的文章: Linux高性能服务器编程:https://blog.csdn.net/gatieme/column/info/high-per-server ht ...

  6. not in和not exists区别

    如果查询语句使用了not in 那么内外表都进行全表扫描,没有用到索引: 而not extsts 的子查询依然能用到表上的索引. 所以无论那个表大,用not exists都比not in要快. 也就是 ...

  7. Kubernetes容器集群管理环境 - 完整部署(下篇)

    在前一篇文章中详细介绍了Kubernetes容器集群管理环境 - 完整部署(中篇),这里继续记录下Kubernetes集群插件等部署过程: 十一.Kubernetes集群插件 插件是Kubernete ...

  8. 我是如何理解并使用maven的

    前言 一直想写一篇关于Maven的文章,但是不知如何下笔,如果说能使用,会使用Maven的话,一.两个小时足矣,不需要搞懂各种概念.那么给大家来分享下我是如何理解并使用maven的. 什么是Maven ...

  9. java的Class<T>与类型信息

    类型是一个数据符号,代表着数据的内存布局和访问规则. default public <T> T xxxxx(Class<T> xclass) throws Exception ...

  10. kali渗透综合靶机(七)--Super-Mario-Host靶机

    kali渗透综合靶机(七)--Super-Mario-Host靶机 靶机百度云下载  链接:https://pan.baidu.com/s/13l1FUgJjXArfoTOfcmPsbA 提取码:a8 ...