本博客全部为原创,转载请注明出处:D.Q的专栏(http://blog.csdn.net/itfootball)。 如有疑惑,请到TesterHome(http://testerhome.com/)论坛交流。
之前在构建eclipse项目中已经涉及了一点,这篇文章详细的讲讲。jacoco是什么,大家google或者百度一下都可以,我就不自己定义了。
需要注意的一点是Jacoco的插件目前还是孵化阶段,以后会有变动。
要想在gradle项目中使用jacoco。需要加入下面的plugin语句:
apply plugin: 'jacoco'
reportsDir:报告的存放路径 toolVersion:jacoco的jar包版本,默认为0.7.1.201405082137
applyTo(tasks):所用于所有的任务 applyTo(task):创建jacoco的插件扩展
在build.gradle脚本文件中加入jacoco任务的语法如下:
jacoco{ toolVersion = "0.7.1.201405082137" reportsDir = file("$buildDir/customJacocoReportDir") }
D:\eclipse\workspare\TestNG_gradl>gradle clean test :clean :compileJava :processResources :classes :compileTestJava :processTestResources :testClasses :test BUILD SUCCESSFUL Total time: 6.443 secs
D:\eclipse\workspare\TestNG_gradl>gradle jacoco :compileJava UP-TO-DATE :processResources UP-TO-DATE :classes UP-TO-DATE :jacocoTestReport BUILD SUCCESSFUL Total time: 4.883 secs
D:\eclipse\workspare\TestNG_gradl>gradle clean jacoco :clean :compileJava :processResources :classes :jacocoTestReport SKIPPED BUILD SUCCESSFUL Total time: 4.246 secs
好了,现在我们来看一下结果:
会发现多了一个customJacocoReportDir文件目录(这可不是我新建的,是自动生成的),打开里面的html文件,就可以看到结果报告的数据啦:
(我的测试case都是简单的输出case,所以覆盖率是0,真实的数据可不是这样的)
该任务继承自Report任务,report任务里面分为csv、xml和html格式的测试报告。下面我们来了解了解:
jacocoTestReport{ reports{ xml.enabled true csv.enabled true html.enabled true } }
D:\eclipse\workspare\TestNG_gradl>gradle clean test jacoco :clean :compileJava :processResources :classes :compileTestJava :processTestResources :testClasses :test :jacocoTestReport BUILD SUCCESSFUL Total time: 8.72 secs
结果会生成3种报告,如下图所示:
下面我们在jacocoTestReport任务中去改变jacoco结果文件的保存目录
build.gradle
jacocoTestReport{ reports{ xml.enabled true csv.enabled true html.enabled true html.destination "${buildDir}/jacocoHtml" xml.destination "${buildDir}/jacocoXml.xml" csv.destination "${buildDir}/jacocoCsv.csv" } }
上面三句设置destination的语句形式是一样的,但是是有区别的。区别在于html的设置是到目录的,其他两个是到文件的。因为html格式的结果页面中操作有很多,而且结果页面也不止一个,所以需要用文件夹保存,必须写到目录。而另外两个就是直接保存到文件的。直接看执行后的结果:
由结果可以看出,jacoco任务中设定的目录没有生成,而是生成了jacocoTestReport任务中定义的文件目录。
我们在Test任务中对jacoco进行了扩展,可以对jacoco的一些特殊的属性配置。
官网解释说是修改已执行的数据要写入的文件。其实就是修改test.exec文件目录或文件名。
好,来例子试试。
test { useTestNG(); jacoco{ destinationFile = file("$buildDir/doctor/doctorq.exec") } }
append的意思是如果上面的destinationFile 指定的路径存在,那么通过append来配置是否在原有的文件上追加,或者不追加。
如果append = false,那么无论destinationFile文件存不存在,都会生成新文件,意思就是先将之前的删掉,然后生成一个新的。
如果append = true,如果之前的exec文件存在,不会删除它,而是在目录下再生成一个新的。下面看实际操作:
首先我们重新构建一下
D:\eclipse\workspare\TestNG_gradl>gradle clean test :clean :compileJava :processResources :classes :compileTestJava :processTestResources :testClasses :test BUILD SUCCESSFUL Total time: 7.645 secs
构建后的文件跟上面是一样的,build/doctor/下有一个doctorq.exec文件。build.gradle文件如下:
test { useTestNG(); jacoco{ append = true destinationFile = file("$buildDir/doctor/doctorq.exec") } }
test { useTestNG(); jacoco{ append = true destinationFile = file("$buildDir/doctor/doctorq1.exec") } }
这个时候我们不能执行clean任务,因为clean会把之前的build文件下全部删除,我们就不好去比较了,那么怎么在不clean的情况还能执行test的任务呢?如果不做任何操作,直接执行test,输出如下:
D:\eclipse\workspare\TestNG_gradl>gradle test :compileJava UP-TO-DATE :processResources UP-TO-DATE :classes UP-TO-DATE :compileTestJava UP-TO-DATE :processTestResources UP-TO-DATE :testClasses UP-TO-DATE :test UP-TO-DATE BUILD SUCCESSFUL
其实修改一下case的文件就行,我们删除其中一个case文件或者增加一个都行,然后再执行gradle test。这个时候你会发现在build/doctor/目录下多了一个doctorq1.exec文件
但是如果你把build.gradle的append属性设置为false。不管你怎么操作,它都会生成新的,而不是追加。我就不具体贴例子了。