如何在使用Azure DevOps构建管道时从代码覆盖结果中排除测试代码

3
我正在使用 Azure DevOps 构建管道编译 .Netcore 应用程序。在 .Netcore 测试构建任务中,我传递了以下参数以收集代码覆盖率结果:
--configuration $(BuildConfiguration) --collect"XPlat Code Coverage"
为发布代码覆盖率结果,我使用“Publish Code Coverage Results”构建任务,并使用“Cobertura”工具。
代码覆盖分析所有在单元测试期间加载的解决方案程序集。但我想从代码覆盖结果中排除测试代码,并仅通过 Azure DevOps 构建管道包含应用程序代码。
为此,我参考了这个 documentation。根据此文档,您需要向每个测试类添加“ExcludeFromCodeCoverageAttribute”属性。但我想通过 Azure DevOps 构建管道来实现它。
2个回答

1

几个月前我也处于你同样的情况。但是与其使用Coverlet,我是这样使用本地的MS Code覆盖工具:

  - task: DotNetCoreCLI@2
    displayName: 'DotNetCoreCLI Test with report (cobertura format)'
    condition: succeededOrFailed()
    inputs:
      command: test
      projects: '**/**.Tests.csproj'
      arguments: '--configuration $(BuildConfiguration) --no-restore --collect "Code Coverage" --logger trx --results-directory "TestResults/Coverage/" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Format=cobertura'
      publishTestResults: false

这个方法很好,但是存在同样的问题。我使用ReportGenerator任务来过滤解决了这个问题:

  - task: reportgenerator@5
    condition: succeededOrFailed()
    inputs:
      reports: '$(Build.SourcesDirectory)/TestResults/Coverage/**/**.cobertura.xml'
      targetdir: '$(Build.SourcesDirectory)/TestResults/Coverage/Reports'
      reporttypes: 'HtmlInline_AzurePipelines_Dark;Cobertura'
      assemblyfilters: '+My.Company.**;-My.Company.**.Tests'

它工作得很好。 如有其他问题,请参阅我在GitHub上的答案这里


0
我成功地在Azure DevOps管道中排除了Cobertura格式的单元测试,具体方法如下:
请注意以下用法:
  • 使用XPlat Code Coverage代替Code Coverage
  • 在测试命令中加入--settings $(unittestsRunSettings)
  • 使用reports: '$(Agent.TempDirectory)/**/*.cobertura.xml'来识别所有原始测试文件

CodeCoverage.runsettings

<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
  <DataCollectionRunSettings>
    <DataCollectors>
      <DataCollector friendlyName="XPlat Code Coverage" uri="datacollector://Microsoft/CodeCoverage/2.0" assemblyQualifiedName="Microsoft.VisualStudio.Coverage.DynamicCoverageDataCollector, Microsoft.VisualStudio.TraceCollector, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
        <Configuration>
          <Format>Cobertura</Format>
          <CodeCoverage>
            <ModulePaths>
              <Exclude>
                <ModulePath>.*MyApp.Repositories.dll$</ModulePath>
              </Exclude>
            </ModulePaths>

            <Functions>
              <Exclude>
                <Function>.*Program\..*</Function>
                <Function>.*Startup\..*</Function>
                <Function>.*Settings\..*</Function>
                <Function>.*Setting\..*</Function>
                <Function>.*Exception\..*</Function>
              </Exclude>
            </Functions>
          </CodeCoverage>
        </Configuration>
      </DataCollector>
    </DataCollectors>
  </DataCollectionRunSettings>
</RunSettings>

pipeline.yml

variables:
  unittestsRunSettings: '$(Build.Repository.LocalPath)\src\CodeCoverage.runsettings'


# Run unit tests with cobertura coverage format
- task: DotNetCoreCLI@2
  displayName: 'Run Unit Tests - $(buildConfiguration)'
  inputs:
    command: 'test'
    arguments: '--no-build --configuration $(buildConfiguration) --collect "XPlat Code Coverage" --settings $(unittestsRunSettings)'
    publishTestResults: true
    projects: '**/*Test*.csproj'

# Publish code coverage report to the pipeline
- task: reportgenerator@5
  displayName: 'Merge code coverage reports'
  inputs:
    reports: '$(Agent.TempDirectory)/**/*.cobertura.xml'
    targetdir: '$(Pipeline.Workspace)/coverlet'
    reporttypes: 'Cobertura'
    verbosity: 'Verbose'
     
- task: PublishCodeCoverageResults@1
  displayName: 'Publish code coverage results'
  inputs:
    codeCoverageTool: Cobertura
    summaryFileLocation: '$(Pipeline.Workspace)/coverlet/Cobertura.xml'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接