基于Jacoco+Maven+Jenkins配置的单元测试覆盖率报告实践

最近,系统重构,要求对底层基础服务加入单元测试用例,而我被安排产出单元测试覆盖率报告。

第一版比较简单,只是一个简单的测试报告,并无具体覆盖率

1. 针对maven项目,pom配置

<reporting>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-report-plugin</artifactId>
            <version>2.4.2</version>
        </plugin>
    </plugins>
</reporting>

2. jenkins配置,待测服务的configure里设置如下

构建脚本: mvn clean surefire-report:report

 

配置报告的另一种方式是生成的html报告,集成到jenkins中;这需要jenkins的Publish HTML reports 插件,安装插件后在 job中配置如下:

 

第二版添加findbugs

1. maven配置

<reporting>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>findbugs-maven-plugin</artifactId>
            <version>3.0.1</version>
            <configuration>
                <xmlOutput>true</xmlOutput>
                <!-- Optional directoryto put findbugs xdoc xml report -->
                <!--<xmlOutputDirectory>target/site</xmlOutputDirectory>-->
                <findbugsXmlOutput>true</findbugsXmlOutput>
                <findbugsXmlWithMessages>true</findbugsXmlWithMessages>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-report-plugin</artifactId>
            <version>2.4.2</version>
        </plugin>
    </plugins>
</reporting>

2. jenkins配置

 jenkins上先安装Findbugs插件

构建脚本:mvn clean surefire-report:report findbugs:findbugs

Post-build Actions配置

现在单元测试的报告仅存在workspace里,如果想让项目组的人直接查看,还需要配置邮件发送。

发送邮件配置Editable Email Notification

邮件配置默认是执行失败时才会发送邮件,如果需要更改,如我设置的是每次都发邮件,就在高级设置里triggers里选择always

第三版,直到这里,管道已经疏通,但是离我的目标还差了一点,现在得到的是单元测试报告,而非单元测试覆盖率报告,我使用了jacoco来生成单元测试覆盖率报告。

jenkins上安装jacoco 插件

maven关于jacoco配置,参考:https://www.cnblogs.com/DFX339/p/8386556.html

jenkins配置如下,各个参数含义请参考:https://www.jianshu.com/p/16a8ce689d60

为了最后邮件的单元测试展示形式比较直观,可以直接展示总结数据而非链接点击跳转,所以在邮件发送正文里,HTML做了一些调整
 

重点是指定jacoco执行完生成的Index报告位置:        ${FILE ,path="${WORKSPACE}/common/target/site/jacoco-ut/index.html"}

<!DOCTYPE html>  
<html style="padding: 10px;">  
<head>  
<meta charset="UTF-8">  
<title>${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次构建日志</title>  
</head>  
  
<body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4"  
    offset="0" style="border: 1px solid #eaeaea;padding: 10px;">  
	<h3 style="margin: 0;font-size: 16px;">以下是Jenkins自动发送的邮件,请勿回复!</h3><br />
        <h6 style="margin: 0;font-size: 14px;">项目背景:</h6>
        <h6 style="margin: 0;font-size: 14px;">基础服务模块包括公用基础功能组件(邮件,短信,文件云服务,RPC-远程过程调用)和 基本工具类,下沉系统业务,抽取出其中可以做公共组件的部分作为业务公用基础功能模块(可供其他业务系统接入),以适应业务线的快速发展。</h6><br />

    <div style="width: 100%">
	<table width="100%" 
        style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif"> 
		<tr>
			<th><br />
				<h2>构建信息</h2> 
			</th>
		</tr>
        <tr>  
            <td>  
                <ul>  
                    <li>项目名称 : ${PROJECT_NAME}</li>
                    <li>触发原因: ${CAUSE}</li>                  
                    <li>测试报告: <a href="${PROJECT_URL}ws/common/target/site/jacoco-ut/index.html">${PROJECT_URL}ws/common/target/site/jacoco-ut/index.html</a></li>
                    <li>缺陷报告: <a href="${BUILD_URL}/findbugsResult/">${BUILD_URL}/findbugsResult/</a></li>
                    <li>特别说明:测试报告参数说明—Instructions指令覆盖,Branches分支覆盖,Cyclomatic Complexity非抽象方法计算圈复杂度,Lines行覆盖,Methods方法覆盖,Classes类覆盖<br />
测试报告中com.tezign.core.email.base.exception,com.tezign.core.exception.exceptions,com.tezign.core.email.base.aop分支覆盖显示N/A,真实分支覆盖率已经达到100%,详情可参考测试报告链接</li><br />



                </ul>  
            </td> 
        </tr>  
	</table> 
	</div>
	<div>
	<table width="100%" cellpadding="0" cellspacing="0" 
        style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif"> 
		<tr>  
            <th><br />
			<h2>测试报告</h2>
            </th>  
        </tr>

		<tr>
			<td>
				<div>
                                  ${FILE ,path="${WORKSPACE}/common/target/site/jacoco-ut/index.html"}
                                </div>
			</td>
		</tr>

	</table> 
	</div>
     
  </body>  
</html>

至此,配置已经全部结束,只需要在jenkins上执行job,就会生成对应的各个报告,发送邮件,样式还可以优化,但基本要求已经达到,实际邮件展示如下:

至此,完成了单元测试覆盖率报告的完整产出。

 

 

 

 

 

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页