我们一般都是用jacoco+jenkins进行代码覆盖率的统计和展示。从实践来看,变更代码覆盖率分析更贴合我们日常的使用场景。在版本迭代及回归测试阶段,可以采用黑盒测试+变更覆盖分析(白盒测试)的灰盒测试方法,完善测试场景,减少测试遗漏,保证测试的充分性。
具体的jacoco的配置及jenkins的配置可以参考以下文档:
附我们项目中使用的build.xml配置:
<?xml version="1.0" ?> <project name="Example" xmlns:jacoco="antlib:org.jacoco.ant" basedir="." default="rebuild"> <!--Jacoco文件路径--> <property name="jacocoantPath" value="/home/test/tools/jacoco-0.7.4/lib/jacocoant.jar"/> <!--最终生成.exec文件的路径,Jacoco根据这个文件生成最终的报告--> <property name="jacocoexecPath" value="/home/test/jenkins/workspace/Example-Coverage/jacoco_ci_report/exec/"/> <!--生成覆盖率报告的路径--> <property name="reportfolderPath" value="/home/test/jenkins/workspace/Example-Coverage/jacoco_ci_report/report/"/> <!--远程tomcat服务的ip--> <property name="server_ip" value="10.165.***.**"/> <!--jacocoagent服务打开的端口--> <property name="server_port" value="8035"/> <!--源代码路径--> <property name="checkOrderSrcpath" value="/home/test/jenkins/workspace/Example-Coverage/moduleName/src/main/java" /> <!--.class文件路径--> <property name="checkOrderClasspath" value="/home/test/jenkins/workspace/Example-Coverage/moduleName/target/classes" /> <tstamp> <format property="stime" pattern="yyyy-MM-dd HH-mm-ss" locale="cn"/> </tstamp> <!--让ant知道去哪儿找Jacoco--> <taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml"> <classpath path="${jacocoantPath}" /> </taskdef> <!--dump任务: 根据前面配置的ip地址和端口,访问目标tomcat服务,并生成.exec文件。--> <target name="dump"> <jacoco:dump address="${server_ip}" reset="false" destfile="${jacocoexecPath}ExampleApiTest${stime}.exec" port="${server_port}" append="true" dump="true"/> </target> <!--merge指定的.exec文件--> <target name="merge_exec"> <jacoco:merge destfile="${jacocoexecPath}ExampleApiTest-merge.exec"> <fileset dir="${jacocoexecPath}" includes="ExampleApiTest*.exec" /> </jacoco:merge> </target> <!--jacoco任务:根据前面配置的源代码路径和.class文件路径,及merge后生成的.exec文件,生成最终的html覆盖率报告--> <target name="report"> <delete dir="${reportfolderPath}" /> <mkdir dir="${reportfolderPath}" /> <jacoco:report> <executiondata> <file file="${jacocoexecPath}ExampleApiTest-merge.exec" /> </executiondata> <structure name="JaCoCo Report"> <group name="Check Order related"> <classfiles> <fileset dir="${checkOrderClasspath}" /> </classfiles> <sourcefiles encoding="gbk"> <fileset dir="${checkOrderSrcpath}" /> </sourcefiles> </group> </structure> <html destdir="${reportfolderPath}" encoding="utf-8" /> <_xml destfile="${reportfolderPath}/jacoco_report.xml" encoding="utf-8" /> </jacoco:report> </target> <target name="rebuild" depends="dump,merge_exec,report"></target> </project> |