我正在尝试在Azure DevOps管道中在线发布详细的报告,但是我所得到的只是一个链接,用于下载此Coverage文件。 (自Visual Studio 2019以来,社区版本无法再读取)
这是我的管道:
trigger:
branches:
include:
- '*'
pool:
vmImage: 'windows-2019'
steps:
- task: NuGetToolInstaller@0
displayName: Instal Nuget
inputs:
checkLatest: true
- task: NuGetCommand@2
displayName: Restore Nuget Packages
inputs:
restoreSolution: '**/*.sln'
- task: UseDotNet@2
displayName: 'Install .NET Core SDK'
inputs:
version: 3.1.x
performMultiLevelLookup: true
- task: DotNetCoreCLI@2
displayName: Build Tests
inputs:
command: 'build'
projects: '**/OneTienditaUnitTests/*.csproj'
arguments: '--configuration Release'
- script: dotnet test OneTienditaUnitTests --logger trx --collect "Code coverage"
- task: PublishTestResults@2
inputs:
testRunner: VSTest
testResultsFiles: '**/*.trx'
- task: XamarinAndroid@1
displayName: Build Android App
inputs:
projectFile: '**/*Android*.csproj'
outputDirectory: '$(build.binariesDirectory)/Release'
configuration: 'Release'
如果我像这样使用Cobertura,那是行不通的:
- task: DotNetCoreCLI@2
displayName: Run Tests
inputs:
command: 'test'
projects: '**/OneTienditaUnitTests/*.csproj'
arguments: '--configuration Release /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura /p:CoverletOutput=../reports/coverage/'
- task: PublishCodeCoverageResults@1
displayName: 'Publish code coverage results'
inputs:
codeCoverageTool: Cobertura
summaryFileLocation: '$(build.sourcesdirectory)\reports\coverage\coverage.cobertura.xml'
reportDirectory: '$(build.sourcesdirectory)\reports\coverage'
请帮忙吗?我不是专业的DevOps
答案 0 :(得分:1)
要在那里发布报告,您需要使用Cobertura。对于TRX,您将仅获得下载文件的链接。要创建Cobertura报告,您需要在测试项目coverlet.collector
nuget软件包中安装。在这里,您可以找到解决问题的代码:
# You just added coverlet.collector to use 'XPlat Code Coverage'
- task: DotNetCoreCLI@2
displayName: Test
inputs:
command: test
projects: '**/*Tests/*.csproj'
arguments: '--configuration $(buildConfiguration) --collect:"XPlat Code Coverage" -- RunConfiguration.DisableAppDomain=true'
workingDirectory: $(Build.SourcesDirectory)
- task: DotNetCoreCLI@2
inputs:
command: custom
custom: tool
arguments: install --tool-path . dotnet-reportgenerator-globaltool
displayName: Install ReportGenerator tool
- script: ./reportgenerator -reports:$(Agent.TempDirectory)/**/coverage.cobertura.xml -targetdir:$(Build.SourcesDirectory)/coverlet/reports -reporttypes:"Cobertura"
displayName: Create reports
- task: PublishCodeCoverageResults@1
displayName: 'Publish code coverage'
inputs:
codeCoverageTool: Cobertura
summaryFileLocation: $(Build.SourcesDirectory)/coverlet/reports/Cobertura.xml
答案 1 :(得分:0)
我已经尝试了很多来解决他的问题...
所以首先,问题是管道的测试任务(在我的例子中是 DotNetCoreCLI@2 任务)。如果此任务收集代码覆盖率,它会自动与 .coverage 格式的测试一起发布。出于某种原因,.coverage 文件的推送位于管道(或作业 - 我不知道)的末尾,因此会覆盖所有以前上传的文件。
解决方案 使用像 OpenCover 这样的覆盖率工具,并通过打开 CodeCoverage 集合的测试任务来收集代码覆盖率,而不是收集。
示例:
OpenCover.Console.exe -target:"dotnet.exe" -targetArguments:"test {solution.sln]" -output:"{outputDir}\OpenCover.xml"
然后通过 ReportGenerator 任务将 OpenCover 文件转换为 Cobertura 格式。
之后,您可以像往常一样通过 PublishCodeCoverageResult 任务发布它。
您可能需要稍微尝试一下,但考虑到该解决方案,它会起作用。