Azure Задача devops reportgenerator не может найти cover.cobertura. xml файл - PullRequest
0 голосов
/ 24 февраля 2020

, как следует из названия, я пытаюсь заставить покрытие кода работать на Azure Devops Pipeline.

Это конвейер:

trigger:
 - master

pool:
   vmImage: 'windows-latest'

variables:
   solution: '**/*.sln'
   buildPlatform: 'Any CPU'
   buildConfiguration: 'Release'

steps:
- task: DotNetCoreInstaller@0
  displayName: 'Installing .NET Core SDK...'
  inputs:
    version: 3.1.101

- script: dotnet build --configuration $(buildConfiguration)
  displayName: 'Building $(buildConfiguration)...'

- task: DotNetCoreCLI@2
  displayName: 'Executing dotnet tests...'
  inputs:
    command: test
    arguments: '--configuration $(BuildConfiguration) /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura /p:CoverletOutput=$(Build.SourcesDirectory)\TestResults\Coverage\'
    projects: '**/*Test/*.csproj'
    nobuild: true

- script: |
  dotnet tool install -g dotnet-reportgenerator-globaltool
  reportgenerator -reports:$(Build.SourcesDirectory)\TestResults\Coverage\coverage.cobertura.xml - targetdir:$(Build.SourcesDirectory)\CodeCoverage -reporttypes:HtmlInline_AzurePipelines;Cobertura
  displayName: 'Creating code coverage report...'

- task: PublishCodeCoverageResults@1
  displayName: 'Publishing code coverage...'
  inputs:
    codeCoverageTool: Cobertura
    summaryFileLocation: '$(Build.SourcesDirectory)\CodeCoverage\Cobertura.xml'
    reportDirectory: '$(Build.SourcesDirectory)\CodeCoverage'

Мое решение содержит внешний интерфейс и тестовый проект xunit с именем, оканчивающимся на «Test».

Тесты выполняются просто отлично, но я всегда выдает ошибку в этой строке:

reportgenerator -reports: $ (Build.SourcesDirectory) \ TestResults \ Coverage \ охват.cobertura. xml ...

При фактическом конвейере ошибка:

Файл отчета 'D: \ a \ 1 \ s \ TestResults \ Coverage \ cover.cobertura. xml' недействителен. Файл не существует (Полный путь: 'D: \ a \ 1 \ s \ TestResults \ Coverage \ покрытие.cobertura. xml').

Я пытался создавать отчеты о тестах локально на моем p c и это работает просто отлично. Это означает, что с пакетами все в порядке.

Что я делаю не так?

1 Ответ

1 голос
/ 25 февраля 2020

Как показано в сообщении об ошибке, ему нужно coverage.cobertura.xml, но оно не найдено. (Не сгенерировано!)

В вашем скрипте reportgenerator -reports:$(Build.SourcesDirectory)\TestResults\Coverage\coverage.cobertura.xml - .... coverage.cobertura.xml - ожидаемый входной файл, но он не сгенерирован. По моему опыту, это потому, что ваша задача dotnet test не сгенерировала этот файл успешно.

Я полагаю, что ваша задача dotnet test может быть успешно выполнена без каких-либо ошибок, но если мы проверим журнал, мы сможем его найти. создать ожидаемый coverage.cobertura.xml файл. Для выяснения причины проблемы вы можете обратиться к этому документу :

VSTest Integration

Если вы используете команду dotnet add package coverlet.collector для добавления coverlet.collector пакет для вашего проекта, вы должны использовать команду dotnet test --collect:"XPlat Code Coverage" для создания coverage.cobertura.xml файла, содержащего результаты.

MSBuild Integration

И если вы добавите coverlet.msbuild пакет для вашего проекта, используя dotnet add package coverlet.msbuild. Затем вам нужно включить покрытие кода следующим образом: dotnet test /p:CollectCoverage=true. И после запуска вышеуказанной команды будет создан файл coverage.json, содержащий результаты.

Поскольку в приведенном ниже сценарии для команды do tnet test требуется файл coverage.cobertura.xml, вам следует использовать VSTest Интеграция , и это означает, что вы должны использовать команду dotnet test --collect:"XPlat Code Coverage" вместо dotnet test /p:CollectCoverage=true. Имеет смысл сгенерировать отсутствующий файл.

Примечание:

1. В моем тесте задача dotnet test не выдаст никакой ошибки, хотя покрытие кода отчет не генерируется. Мы всегда можем проверить журнал задач на предмет реальной информации, которая нам нужна.

2. Кроме того, проверьте этот документ вы можете найти: *If you're building on the Windows platform, code coverage metrics can be collected by using the built-in coverage data collector.* и *If you're building on Linux or macOS, you can use Coverlet or a similar tool to collect code coverage metrics.*. Поэтому, в соответствии с содержанием вашего скрипта, рекомендуется запускать в Linux или агентах macOS. Если вы просто хотите, чтобы он работал в windows, у него есть встроенный сборщик данных покрытия по умолчанию.

Надеюсь, что все вышеперечисленное поможет решить вашу загадку и оригинальную проблему.

...