![](/img/trans.png)
[英]Gradle - Jacoco code coverage without running connectedCheck
[英]Gradle jacoco code coverage - Then publish/show in Jenkins
我正在尝试为Java应用程序项目设置代码覆盖率。
项目名称:NewApp
项目结构:
摇篮版本:1.6
环境:Linux
我有一个正在运行的gradle构建脚本,该脚本从构建工件存储库(例如artifactory / maven)中获取应用程序(NewApp)依赖项(即应用程序用于构建过程的服务jar),并构建应用程序。
现在,我想为我的NewApp应用程序项目使用JaCoCo插件获得代码覆盖。
我按照Gradle / Jacoco的文档进行操作,但似乎没有为jacoco等创建任何report / ...文件夹,在这里我可以找到Jacoco承保范围报告的内容。
我的问题:1.为了获得使用单元测试(Junit)的代码覆盖率,我假设我要做的就是以下操作,并且它不需要我在运行单元测试(测试任务即“渐变测试”)之前启动/停止tomcat。 )以使用单元测试获得/通过的代码覆盖率。 请告知/纠正。 代码(仅适用于Gradle jacoco单元测试部分)-我使用的是:
apply plugin: 'jacoco'
test {
include 'src/java-test/**'
}
jacocoTestReport {
group = "reporting"
description = "Generate Jacoco coverage reports after running tests."
reports {
xml.enabled true
html.enabled true
csv.enabled false
}
//classDirectories = fileTree(dir: 'build/classes/main', include: 'com/thc/**')
//sourceDirectories = fileTree(dir: 'scr/java', include: 'com/thc/**')
additionalSourceDirs = files(sourceSets.main.allJava.srcDirs)
}
对于集成测试:
task integrationTest(type: Test) {
include 'test/java/**'
}
由于jacocoTestReport取决于测试任务,因此将首先调用它们,然后最终将调用jacocoTestReport,以报告针对代码覆盖范围发现的内容。
例如:设置JAVA_OPTS变量,例如:
export JACOCO="-Xms256m -Xmx512m -XX:MaxPermSize=1024m -javaagent:/production/jenkinsAKS/jobs/NewApp/workspace/jacoco-0.6.3.201306030806/lib/jacocoagent.jar=destfile=/production/jenkinsAKS/jobs/NewApp/workspace/jacoco/jacoco.exec,append=true,includes=*"
export JAVA_OPTS="$JAVA_OPTS $JACOCO"
是Gradle / groovy的新手-如果不确定是否涉及tomcat的启动/停止,我不确定应该在build.gradle(构建脚本)中编写哪些代码才能使上述Integration / Unit测试正常工作。 如果有人可以提供示例脚本来执行此操作,我将尝试。
当我在Jenkins中发布Jacoco代码覆盖率时(使用Jenkins发布后动作来发布Jacoco报告),我现在没有任何代码覆盖率。 Jenkins构建仪表板显示0%的代码覆盖率(即,条形图显示所有红色,而实际显示的绿色则没有绿色)。
需要您的建议以吸引一些注意。
问题:我假设您的单元测试不依赖于tomcat。 在这种情况下,您是对的,您不能预先启动tomcat。
要创建覆盖率报告,您需要执行
gradle jacocoTestReport
没有jacocoTestReport
gradle不会触发jacoco生成报告。
关于您的摘要的另一件事。 我假设您已将默认的主要sourceset更改为source/java
。 在这种情况下,您不必设置additionalSourceDirs
。
集成测试:是的,您需要首先启动tomcat,或者至少必须确保tomcat正在运行。 您应该看看Gradle 1.7。 它具有一个称为finalizedBy
的新任务排序规则
有了这个你可以做类似的事情
task integrationtests(type: Test) { dependsOn startTomcat finalizedBy stopTomcat }
其中start / stopTomcat是自定义任务。如果您必须使用Gradle 1.6,则必须构建一个dependsOn
链:
stopTomcat -dependsOn-> integrationtests -dependsOn-> startTomcat
我认为该博客文章是对的,对此我没有任何经验。
启动/停止Tomcat:您可以按照以下方式进行操作
task startTomcat() << { def tomcatStartScript = "${project.rootDir}/tomcat/startScript" tomcatStartScript.execute() }
停止脚本可以类似的方式编写。 (来自Groovy doc:正在执行 )
Jenkins&Jacoco:执行jacocoTestReport
得到它的工作。
Gradle 1.7-下载包含二进制文件/ src和文档的.zip。 -转到文件夹:如果您将上述.zip文件解压缩到C:\\ gradle-1.7 C:\\ gradle-1.7 \\ samples \\ testing \\ jacoco \\ quickstart
运行:gradle build jacocoTestReport
构建后,您将看到一个新的文件夹“ build”。 –如果仅调用构建任务,则使用类转储和.exec创建文件夹jacoco。 –创建文件夹jacoco和jacocoHtml –如果同时调用了两个版本的jacocoTestReport
玩得开心。
我还看到最好包括:
build.gradle中的以下部分
/////
tasks.withType(Compile) {
options.debug = true
options.compilerArgs = ["-g"]
}
////
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.