具有 android 测试和测试覆盖率的 sonarqube
sonarqube with both androidTest and test covarage
我正在尝试在我的 Android 项目中设置 sonarqube 报告。我目前无法在声纳 UI 中显示所有测试 类,覆盖率以百分比显示,目前只有来自 app/src/test/
的单元测试显示为单元测试。
我的项目有一个测试文件夹 app/src/test/
,其中包含单元测试,我有一个 android测试文件夹 app/src/androidTest/
,其中包含 android 单元、集成和 UI 测试。当我通过 gradle 运行 所有测试时, android-gradle 插件生成 build/jacoco/testDebugUnitTest.exec
和 build/test-results/debug/TEST-*Test.xml
其中包含 jacoco 结果和覆盖率报告测试文件夹中的单元测试。此外,android-gradle 插件生成 build/outputs/code-coverage/connected/coverage.ec
和 build/outputs/androidTest-results/connected/TEST-*Test.xml
包含来自 androidTest 文件夹
的结果和覆盖率报告
在我的 build.gradle 中,我可以指定声纳插件的属性。
sonarqube {
properties {
property "sonar.sources", "src/main/java,src/main/res"
property "sonar.tests", "src/test/java,src/androidTest/java"
property "sonar.java.coveragePlugin", "jacoco"
property "sonar.jacoco.reportPath", "${project.buildDir}/jacoco/testDebugUnitTest.exec"
property 'sonar.jacoco.itReportPath', "${project.buildDir}/outputs/code-coverage/connected/coverage.ec"
property "sonar.junit.reportsPath", "${project.buildDir}/test-results/debug" // path to junit reports
}
}
使用 sonar.junit.reportsPath
我可以指定将哪个 xml 报告发送到 sonarqube 服务器。当我将其更改为 build/outputs/androidTest-results/connected
时,我得到 android 测试在仪表板上显示为单元测试。有没有办法让声纳插件在两个目录中查找或将结果合并在一起?
在修复 https://jira.sonarsource.com/browse/SONAR-4101 之前,您唯一的选择是编写一个任务,将测试结果文件复制到一个地方并将其配置为 sonar.junit.reportsPath
,如下所示:
task combineTestResultsForSonarqube {
group = "Reporting"
def modules = ["app", "and", "other", "modules"];
doLast {
modules.each { module ->
File combined = file("${module}/build/combined-test-results")
if (combined.exists()) {
combined.deleteDir()
}
combined.mkdirs();
def testDirs = [file("${module}/build/test-results/debug/"),
file("${module}/build/outputs/androidTest-results/connected/")];
testDirs.each { testDir ->
if (!testDir.exists()) {
logging.captureStandardOutput LogLevel.WARN
println "WARNING: ignoring non-existant ${testDir.path}"
return;
}
files(testDir.listFiles()).each { file ->
new File(combined, file.getName()) << file.text
}
}
}
}
}
当您的构建中有风格时,当然必须调整路径。
我正在尝试在我的 Android 项目中设置 sonarqube 报告。我目前无法在声纳 UI 中显示所有测试 类,覆盖率以百分比显示,目前只有来自 app/src/test/
的单元测试显示为单元测试。
我的项目有一个测试文件夹 app/src/test/
,其中包含单元测试,我有一个 android测试文件夹 app/src/androidTest/
,其中包含 android 单元、集成和 UI 测试。当我通过 gradle 运行 所有测试时, android-gradle 插件生成 build/jacoco/testDebugUnitTest.exec
和 build/test-results/debug/TEST-*Test.xml
其中包含 jacoco 结果和覆盖率报告测试文件夹中的单元测试。此外,android-gradle 插件生成 build/outputs/code-coverage/connected/coverage.ec
和 build/outputs/androidTest-results/connected/TEST-*Test.xml
包含来自 androidTest 文件夹
在我的 build.gradle 中,我可以指定声纳插件的属性。
sonarqube {
properties {
property "sonar.sources", "src/main/java,src/main/res"
property "sonar.tests", "src/test/java,src/androidTest/java"
property "sonar.java.coveragePlugin", "jacoco"
property "sonar.jacoco.reportPath", "${project.buildDir}/jacoco/testDebugUnitTest.exec"
property 'sonar.jacoco.itReportPath', "${project.buildDir}/outputs/code-coverage/connected/coverage.ec"
property "sonar.junit.reportsPath", "${project.buildDir}/test-results/debug" // path to junit reports
}
}
使用 sonar.junit.reportsPath
我可以指定将哪个 xml 报告发送到 sonarqube 服务器。当我将其更改为 build/outputs/androidTest-results/connected
时,我得到 android 测试在仪表板上显示为单元测试。有没有办法让声纳插件在两个目录中查找或将结果合并在一起?
在修复 https://jira.sonarsource.com/browse/SONAR-4101 之前,您唯一的选择是编写一个任务,将测试结果文件复制到一个地方并将其配置为 sonar.junit.reportsPath
,如下所示:
task combineTestResultsForSonarqube {
group = "Reporting"
def modules = ["app", "and", "other", "modules"];
doLast {
modules.each { module ->
File combined = file("${module}/build/combined-test-results")
if (combined.exists()) {
combined.deleteDir()
}
combined.mkdirs();
def testDirs = [file("${module}/build/test-results/debug/"),
file("${module}/build/outputs/androidTest-results/connected/")];
testDirs.each { testDir ->
if (!testDir.exists()) {
logging.captureStandardOutput LogLevel.WARN
println "WARNING: ignoring non-existant ${testDir.path}"
return;
}
files(testDir.listFiles()).each { file ->
new File(combined, file.getName()) << file.text
}
}
}
}
}
当您的构建中有风格时,当然必须调整路径。