【问题标题】:Excluding files from code coverage analysis in Azure devops pipeline从 Azure devops 管道中的代码覆盖率分析中排除文件
【发布时间】:2022-08-17 18:48:45
【问题描述】:
我已启用 Cobertura 格式的代码覆盖率,并试图从 Azure DevOps 管道中的代码覆盖率分析中排除一些文件(尤其是第 3 方 DLL)。目前,以下是我在管道中得到的输出
这里,第 3 方 DLL 也包含在覆盖率报告中。我想排除所有 3rd 方 DLL,如 FluentAssertion、Microsoft.Azure 等。
下面是我的 YAML 文件中产生上述输出的一些行
- task: VSTest@2
displayName: \'Run .NET Core Unit Tests $(ucSolution)\'
continueOnError: true
inputs:
testSelector: \'testAssemblies\'
testAssemblyVer2: |
**\\MyApp.*.UnitTests.dll
!**\\*TestAdapter.dll
!**\\obj\\**
!**\\ref\\**
searchFolder: \'$(System.DefaultWorkingDirectory)\'
platform: \'$(buildPlatform)\'
configuration: \'$(buildConfiguration)\'
diagnosticsEnabled: true
rerunFailedTests: true
rerunFailedThreshold: \'10\'
rerunMaxAttempts: \'1\'
resultsFolder: \'$(build.ArtifactStagingDirectory)\\Test\\Results\\core\'
otherConsoleOptions: \'/collect:\"Code Coverage;Format=Cobertura\"\'
- task: PublishCodeCoverageResults@1
displayName: \'Publish code coverage results\'
inputs:
codeCoverageTool: Cobertura
summaryFileLocation: $(build.ArtifactStagingDirectory)/Test/Results/**/**/*.cobertura.xml
谁能建议我如何从分析或代码覆盖率报告中排除第 3 方 DLL?
我非常感谢您能提供的任何帮助。
标签:
unit-testing
azure-devops
code-coverage
cobertura
exclude
【解决方案1】:
将 .runsettings 文件添加到您的解决方案,并在测试步骤中引用它。 runsettings 文件将需要一个ModulePaths、Exclude、ModulePath 节点,见下文:
<?xml version="1.0" encoding="utf-8" ?>
<RunSettings>
<DataCollectionRunSettings>
<DataCollectors>
<DataCollector friendlyName="XPlat code coverage">
<Configuration>
<ModulePaths>
<Exclude>
<ModulePath>.*FluentAssertions.*</ModulePath>
</Exclude>
</ModulePaths>
</Configuration>
</DataCollector>
</DataCollectors>
</DataCollectionRunSettings>
</RunSettings>
管道 yaml 中的示例测试任务。您的 VSTest@2 任务会略有不同,但主体相似。查看我如何为 .net 核心测试任务 --settings MyFolder/.runsettings 添加参数
- task: DotNetCoreCLI@2
displayName: 'Tests'
inputs:
command: test
projects: 'MyTestProject.csproj'
arguments: '--configuration debug --collect:"XPlat Code Coverage" --settings MyFolder/.runsettings'
publishTestResults: true
testRunTitle: "Run Tests"
可以在此处找到 Microsoft 文档:
https://docs.microsoft.com/en-us/visualstudio/test/customizing-code-coverage-analysis?view=vs-2022
【解决方案2】:
@Jack 提供的 solution 正在使用 dotnet test 和“XPlat 代码覆盖率”。对于vstest 和“代码覆盖率”,您仍然需要像这样的 .runsettings 文件:
<?xml version="1.0" encoding="utf-8" ?>
<RunSettings>
<DataCollectionRunSettings>
<DataCollectors>
<DataCollector friendlyName="Code Coverage">
<Configuration>
<CodeCoverage>
<ModulePaths>
<Exclude>
<ModulePath>FluentAssertions.*</ModulePath>
<!-- Add more ModulePath nodes here. -->
</Exclude>
</ModulePaths>
</CodeCoverage>
</Configuration>
</DataCollector>
</DataCollectors>
</DataCollectionRunSettings>
</RunSettings>
(注意额外的<CodeCoverage> 节点,与其他解决方案相比)
接下来,使用 runSettingsFile 参数引用 vstest 任务中的设置文件,如下所示:
- task: VSTest@2
displayName: 'Run .NET Core Unit Tests $(ucSolution)'
continueOnError: true
inputs:
testSelector: 'testAssemblies'
testAssemblyVer2: |
**\MyApp.*.UnitTests.dll
!**\*TestAdapter.dll
!**\obj\**
!**\ref\**
searchFolder: '$(System.DefaultWorkingDirectory)'
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'
diagnosticsEnabled: true
rerunFailedTests: true
rerunFailedThreshold: '10'
rerunMaxAttempts: '1'
resultsFolder: '$(build.ArtifactStagingDirectory)\Test\Results\core'
otherConsoleOptions: '/collect:"Code Coverage;Format=Cobertura"'
runSettingsFile: '<PATH/TO/FILE.RUNSETTINGS>'