我在Azure DevOps下有一个相对简单的测试项目,我想生成代码覆盖率。
这有效...有点。我明白了:
我得到了我需要的文件(至少我认为),但是该选项卡丢失了。
我有这三个步骤:
执行.NET测试任务 安装报告生成器 运行报告生成器以进行转换(-reporttypes:HtmlInline_AzurePipelines; Cobertura“) 发布结果
但是该标签没有显示吗?有什么想法吗?
- stage: Run_Unit_tests
jobs:
- job: 'Tests'
pool:
vmImage: 'windows-latest'
variables:
buildConfiguration: 'Release'
continueOnError: true
steps:
- task: DotNetCoreCLI@2
inputs:
command: custom
custom: tool
arguments: install --tool-path . dotnet-reportgenerator-globaltool
displayName: Install ReportGenerator tool
- task: DotNetCoreCLI@2
displayName: Test .NET
inputs:
command: test
projects: '**/*Test/*.csproj'
arguments: '--configuration $(buildConfiguration) --logger trx --collect:"XPlat Code Coverage"'
condition: succeededOrFailed()
- task: reportgenerator@4
inputs:
reports: '$(Agent.TempDirectory)\**\coverage.cobertura.xml'
targetdir: '$(Build.SourcesDirectory)\coverlet\reports'
verbosity: 'Verbose'
- task: PublishCodeCoverageResults@1
displayName: 'Publish code coverage'
inputs:
codeCoverageTool: Cobertura
summaryFileLocation: $(Build.SourcesDirectory)\coverlet\reports\Cobertura.xml
failIfCoverageEmpty: false
reportDirectory: $(Build.SourcesDirectory)\coverlet\reports\
我尝试使用代码生成器,不使用,启用代码覆盖率变量或禁用,尝试使用报表生成器,不使用...
答案 0 :(得分:3)
我遇到了同样的问题,只按了F5键就出现了!
这很生气,但实际上一直如此。
似乎devops前端代码中偶尔有一个错误?
答案 1 :(得分:0)
您可以在yaml下面尝试发布代码覆盖率。
首先,您需要确保您对nuget软件包coverlet.msbuild
的项目引用
<PackageReference Include="coverlet.msbuild" Version="2.5.1">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
然后在您的 dotnet测试任务中启用 CollectCoverage
arguments: '/p:CollectCoverage=true /p:CoverletOutput=$(Build.SourcesDirectory)\TestResult\ /p:CoverletOutputFormat=cobertura'
然后在 reportgenerator 任务中将 reports 文件夹指定到 CoverletOutput 文件夹reports: '$(Build.SourcesDirectory)\TestResult\**\coverage.cobertura.xml'
请检查以下Yaml以供参考:
steps:
- task: UseDotNet@2
inputs:
version: 2.2.x
- task: DotNetCoreCLI@2
inputs:
command: restore
projects: '**\*.csproj'
- task: DotNetCoreCLI@2
inputs:
command: custom
custom: tool
arguments: install --tool-path . dotnet-reportgenerator-globaltool
displayName: Install ReportGenerator tool
- task: DotNetCoreCLI@2
displayName: Test .NET
inputs:
command: test
projects: '**\*Test*.csproj'
publishTestResults: false
arguments: '--configuration $(buildConfiguration) /p:CollectCoverage=true /p:CoverletOutput=$(Build.SourcesDirectory)\TestResult\ /p:CoverletOutputFormat=cobertura'
condition: succeededOrFailed()
- task: reportgenerator@4
inputs:
reports: '$(Build.SourcesDirectory)\TestResult\**\coverage.cobertura.xml'
targetdir: '$(Build.SourcesDirectory)\coverlet\reports'
verbosity: 'Verbose'
condition: succeededOrFailed()
- task: PublishCodeCoverageResults@1
displayName: 'Publish code coverage'
inputs:
codeCoverageTool: Cobertura
summaryFileLocation: $(Build.SourcesDirectory)\coverlet\reports\Cobertura.xml
failIfCoverageEmpty: false
reportDirectory: $(Build.SourcesDirectory)\coverlet\reports\
condition: succeededOrFailed()
您也可以参考此blog。
答案 2 :(得分:0)
我也遇到了这个问题,并将其追溯到我的管道中混合了 VS Test 和 dotnet 测试任务。一旦我删除了 VS Test 任务,它就一切正常了。
似乎 VS Test 任务上传了自己的代码覆盖率结果以及发布 cobertura 结果+这个 VS Test 任务的组合混淆了 Azure Devops。