我正在尝试为Java应用程序项目设置代码覆盖率 .
项目名称:NewApp
项目结构:
-
src / java / **(源代码)
-
src / java-test(单元测试 - Jnuit)
-
test / it-test(集成测试)
-
测试/测试(验收测试)
-
tomcat / *(包含tomcat启动/停止脚本)
-
xx / ..等常用应用程序所需的文件夹 .
Gradle版本:1.6
环境:Linux
我有一个正在运行的gradle构建脚本,它从构建工件存储库(artifact或maven for ex)中获取应用程序(NewApp)依赖项(即应用程序用于构建过程的服务jar),并构建应用程序 .
现在,在这一点上,我希望使用JaCoCo插件为我的NewApp应用程序项目获取代码覆盖率 .
我按照Gradle / Jacoco的文档进行了操作,但它似乎没有为jacoco等创建任何报告/ ...文件夹,我可以在其中找到Jacoco覆盖报告的内容 .
我的问题:1 . 为了使用单元测试(Junit)获取代码覆盖率,我假设我所要做的就是以下内容,它不需要我在运行单元测试之前启动/停止tomcat(测试任务即“gradle test”) )通过单元测试获得代码覆盖率 . 请指教/纠正 . 代码(仅适用于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将报告它为代码覆盖率找到的内容 .
- 为了获得集成测试的代码覆盖率,我假设我必须首先启动tomcat(即在运行/调用测试目标进行集成测试之前),然后调用"gradle integrationTest"或"gradle test"任务然后停止tomcat - 以获取代码覆盖率报告 . 从其他博客文章中我还发现,应该在tomcat启动之前设置JAVA_OPTS变量来分配jacoco代理 .
例如:设置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的新手 - 我不确定在build.gradle(构建脚本)中应该编写什么代码,以便在涉及tomcat的启动/停止时进行上述Integration / Unit测试 . 如果有人可以提供示例脚本来执行此操作,我会尝试 .
-
我现在没有获得任何代码覆盖,当我在Jenkins中发布Jacoco代码覆盖率时(使用Jenkins post build action发布Jacoco报告) . Jenkins构建仪表板显示0%代码覆盖率(即显示所有红色的条形图,实际代码覆盖区域不显示绿色) .
需要你的建议,以获得一些牵引力 .
2 回答
要创建覆盖率报告,您需要执行
没有
jacocoTestReport
gradle将不会触发jacoco生成报告 .还有一件事,关于你的代码片段 . 我假设您已将默认主要源集更改为
source/java
. 在这种情况下,您不必设置additionalSourceDirs
.finalizedBy
的新任务排序规则有了这个,你可以做点什么
其中start / stopTomcat是自定义任务 . 如果你必须继续使用Gradle 1.6,你必须 Build 一个
dependsOn
链:我认为博客文章是对的,我对此没有任何经验 .
停止脚本可以用类似的方式编写 . (一些来自Groovy doc:Executing)
jacocoTestReport
时应该修复搞定了 .
Gradle 1.7 - 下载包含二进制文件/ src和文档的.zip . - 转到文件夹:如果你在C:\ gradle-1.7 C:\ gradle-1.7 \ samples \ testing \ jacoco \ quickstart解压缩上面的.zip
运行:gradle build jacocoTestReport
在构建之后,您将看到一个新文件夹“build” . - 如果只调用构建任务,则使用classdumps和.exec创建文件夹jacoco . - 文件夹jacoco和jacocoHtml被创建 - 如果两个构建jacocoTestReport被调用
玩得开心 .
我还看到最好包括:
build.gradle中的以下部分