测试代码已包含在覆盖率报告中,并且歪曲了覆盖率

时间:2020-07-18 12:17:10

标签: azure-devops azure-pipelines cobertura clover reportgenerator

我正在Azure DevOps管道中使用OpenClover。

问题:target/site/clover/index.html中给出的覆盖率(当我在本地运行三叶草时)大约为45%,而在Azure DevOps中则为71%。

这样做的原因是,基于target/site/clover.xml的AzDO中的覆盖率报告还包含测试代码,该代码通常具有100%的覆盖率,因此会使结果产生偏差。

如何摆脱包含测试代码的覆盖率报告?我试图无济于事的是在ReportGenerator中使用classfilters-它负责将clover.xml转换为Cobertura,因此AzDO可以解释它。以下两项均无效:

classfilters: '-*Test.java'
classfilters: '-*Test'
classfilters: '-*Test.class'

关于上下文,这是我的管道。

- task: Maven@3
  inputs:
    mavenPomFile: 'pom.xml'
    mavenOptions: '-Xmx1024m'
    mavenAuthenticateFeed: true
    javaHomeOption: 'JDKVersion'
    jdkVersionOption: '1.11'
    jdkArchitectureOption: 'x64'
    publishJUnitResults: false
    goals: 'clean clover:setup test clover:aggregate clover:clover'

- task: reportgenerator@4
  inputs:
    reports: '$(Build.SourcesDirectory)/target/site/clover/clover.xml'
    classfilters: '-*Test'
    targetdir: '$(Build.SourcesDirectory)/CoverageResults'

- task: PublishCodeCoverageResults@1
  displayName: 'Publish code coverage'
  inputs:
    codeCoverageTool: Cobertura
    summaryFileLocation: '$(Build.SourcesDirectory)/CoverageResults/Cobertura.xml'

这是pom文件中与三叶草有关的部分:

<build>
    <plugins>
        <plugin>
            <groupId>org.openclover</groupId>
            <artifactId>clover-maven-plugin</artifactId>
            <version>4.4.1</version>
            <executions>
                <execution>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>instrument</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

2 个答案:

答案 0 :(得分:1)

在ReportGenerator任务中使用filefilters代替classfilters是有效的

- task: reportgenerator@4
  inputs:
    reports: '$(Build.SourcesDirectory)/target/site/clover/clover.xml'
    filefilters: '-*Test.java'
    targetdir: '$(Build.SourcesDirectory)/CoverageResults'

答案 1 :(得分:0)

在ReportGenerator 4.6.4中,无需(脆弱的)文件过滤器就可以排除测试项目。

- task: reportgenerator@4
  inputs:
    reports: '$(Build.SourcesDirectory)/target/site/clover/clover.xml'
    customSettings: 'settings:excludeTestProjects=true'
    targetdir: '$(Build.SourcesDirectory)/CoverageResults'