我正在尝试通过在本地运行Azure管道来调试Gradle任务。该任务的YAML定义是:

- task: Gradle@2
  displayName: 'Test Project'
  inputs:
    gradleWrapperFile: 'gradlew'
    gradleOptions: '-Xmx7000m'
    sonarQubeRunAnalysis: true
    sonarQubeGradlePluginVersion: 2.6.2
    testRunTitle: $(DISPLAY_NAME)
    codeCoverageToolOption: JaCoCo
    publishJUnitResults: true
    testResultsFiles: '**/build/test-results/test/TEST-*.xml'
    tasks: "test -Dtest.profile=unit --parallel"

我试图找出等效的本地命令。我已经到了
./gradlew test -DcodeCoverageToolOption=JaCoCo -Dtest.profile=unit --parallel

但是,我不确定如何传递其他参数,例如codeCoverageToolOption: JaCoCo

最佳答案

1.codeCoverageToolOption:JaCoCo

对于Azure Devops,codeCoverageToolOption: JaCoCo意味着选择一个代码覆盖率工具JaCoCo来确定测试用例涵盖的代码。但是,没有这样的命令可以使选择使用哪个代码覆盖率工具。

在gradle中,类似的操作是先在JaCoCo中将dependencies插件添加为build.gradle。现在,您可以调用jacocoTestReport任务来创建代码覆盖率报告。

./gradlew test jacocoTestReport

注意:如果jacocoTestReport文件不存在,则test.exec任务将不执行任何操作。因此,您应该始终先运行testbuild任务

2. testResultsFiles

对于YAML中的testResultsFiles,它用于指定应放入的测试结果文件。但是,对于gradle而言,其默认路径是build/reports/jacoco/test/html/index.html,该路径在build.gradle文件中指定。简单样本:
task codeCoverageReport(type: JacocoReport) {
    executionData fileTree(project.rootDir.absolutePath).include("**/build/jacoco/*.exec")
    subprojects.each {
        sourceSets it.sourceSets.main
    }
    reports {
        xml.enabled true
        xml.destination "${buildDir}/reports/jacoco/{TestResultFileName}.xml"
        html.enabled false
        csv.enabled false
    }
}

3. publishJUnitResults:正确

在azure devops中,我们不使用gradle命令将测试结果文件发布到VSTS中。我们使用脚本CodeCoverage Publish实现此目的。

10-08 17:35