Отсутствие покрытия кода в SonarCloud из базовой сборки Azure Devops .NET

Я настроил конвейер для своего проекта .NET Core в Azure Devops, используя шаблон .NET Core with SonarCloud. Когда я строю, анализ запускается в SonarCloud, но с 0% покрытием кода (в моем решении есть тесты).

Независимо от того, какие настройки конфигурации я делаю в сборке, я не могу заставить работать покрытие кода.

Что мне не хватает?

Я наткнулся на эту статью и https://dejanstojanovic.net/aspnet/2019/may/publishing-code-analysis-to-sonarcloud-from-azure-build-pipeline/ реализовал сценарий PowerShell, описанный в нем, но я все еще не получаю кода покрытие в SonarCloud

Я пробовал использовать покрывало, как описано здесь, но все равно безуспешно https://gunnarpeipman.com/aspnet/azure-devops-code-coverage/

Мой пайплайн состоит из следующих задач

  • .NET Core - восстановление
  • Подготовить конфигурацию анализа
  • .NET Core - сборка
  • .NET Core - Тест
  • Выполнить анализ кода
  • Опубликовать результат проверки качества

Моя тестовая задача настроена:

Аргументы: --configuration $(BuildConfiguration)

Опубликовать результаты тестирования и покрытие кода - отмечено

В консоли задачи «Выполнить анализ кода» получаю:

10:43:54.7  Fetching code coverage report information from TFS...
10:43:54.702  Attempting to locate a test results (.trx) file...
10:43:54.753  Looking for TRX files in: C:\\TFSBuilds\\TJPYHG04-GHJ01\\_work\\475\\TestResults
10:43:54.755  No test results files found
10:43:54.81  Did not find any binary coverage files in the expected location.
10:43:54.811  Falling back on locating coverage files in the agent temp directory.
10:43:54.812  Searching for coverage files in C:\\TFSBuilds\\TJPYHG04-GHJ01\\_work\\_temp
10:43:54.814  No coverage files found in the agent temp directory.

person Tracey Penberthy    schedule 06.06.2019    source источник
comment
Можете ли вы получить покрытие на месте с покрывалом? Если так, я бы попытался сделать шаг покрытия и создать файл lcov, который будет собирать Sonar. Кроме того, Sonar нужен тег ProjectGuid в csproj, если вы создаете свой проект вместо всего решения, как вы можете видеть здесь: docs.sonarqube.org/display/SCAN/   -  person rogerdossantos    schedule 07.06.2019
comment
У меня настроен ProjectsGuids. Когда я реализовал coverlet в тестовой задаче, я действительно получил результаты покрытия, отображаемые в консоли тестовой задачи, и сказал, что он опубликовал эти результаты, но я не смог заставить SonarCloud их забрать (в консоли он сказал, что не может найти их). Независимо от того, какую конфигурацию я установил, они публиковались во временной папке, а SonarCloud всегда просматривал папку testresults.   -  person Tracey Penberthy    schedule 07.06.2019


Ответы (2)


надеюсь, что этот ответ по-прежнему актуален для вас.

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

Вот как я это решил.

Шаг 1. Перейдите в подпапку модульного тестирования (такую ​​же, как файл .csproj модульного тестирования) и выполните следующую команду dotnet.

dotnet add package coverlet.msbuild

Шаг 2 - Добавьте следующее в Дополнительные свойства задачи SonarCloudPrepare или добавьте непосредственно в файл yml (если вы используете yml вместо классического редактора)

    extraProperties: |
      sonar.exclusions=**/obj/**,**/*.dll
      sonar.cs.opencover.reportsPaths=$(Build.SourcesDirectory)/**/coverage.opencover.xml
      sonar.cs.vstest.reportsPaths=$(Agent.TempDirectory)/*.trx

Каталог для настройки по вашему выбору.

Или вы также можете создать в своем репозитории файл под названием sonar-project.properties и сохранить внутри все соответствующие свойства SonarCloud.

Шаг 3. Добавьте в свою тестовую задачу dotnet следующее

- task: DotNetCoreCLI@2
  inputs:
    command: 'test'
    arguments: '--configuration $(BuildConfiguration) /p:CollectCoverage=true /p:CoverletOutputFormat=opencover --logger trx'
    testRunTitle: 'dotnet test'

Вы можете заметить, что есть флажок «Опубликовать результаты тестирования и покрытие кода», но я все же предпочитаю использовать /p:CollectCoverage=true.

Вы также можете протестировать локально, чтобы запустить команду dotnet test /p:CollectCoverage=true /p:CoverletOutputFormat=opencover --logger trx, и coverage.opencover.xml будет сгенерирован в вашей папке модульного тестирования.

Обратитесь к ссылкам 2 и 3 для получения дополнительных параметров и их описания.

Боковое примечание. Если вы выполняете какие-либо свойства включения теста Sonar, обратите внимание, что их тесты Sonar.Tests и Sonar.Test.Inclusions различаются. ржу не могу

Использованная литература:

  1. Использование SonarCloud в конвейерах Azure
  2. Параметры анализа (официальная документация)
  3. Покрытие и выполнение тестов (официальная документация)

Надеюсь это поможет :)

person rick    schedule 02.12.2019
comment
Добавление reportPath для сонара сработало для меня. Для тестовой команды DotNetCoreCLI@2 добавление --logger trx не требуется, потому что он уже добавляет это (на самом деле выдает ошибку, говорящую, что можно протестировать не более 1 проекта) в конвейере Azure - person Jonwd; 25.01.2020

Отсутствие покрытия кода в SonarCloud из базовой сборки Azure Devops .NET

Эта проблема может быть вызвана тем, что путь вывода vstest недавно изменен:

Выходной путь файла покрытия vstest изменится с D:\a\1\s\TestResults\... на D:\a\_temp\...

Что сломало последующие скрипты в конвейере (например, codecoverage.exe для преобразования в xml и последующего импорта в sonarqube).

Microsoft предлагает использовать остальные API-интерфейсы для проверки тестовых артефактов и повторно загрузить их в агент сборки.

Более подробно изучить эту проблему можно в ветке Расширение Azure DevOps (VSTS) больше не импортирует покрытие и модульные тесты автоматически для отслеживания проблем.

К счастью, команда SonarSourcer только что выпустила новые версии расширений SonarQube (v4.6.3) и SonarCloud (v1.6.3) для решения проблемы покрытия и регресса.

Надеюсь это поможет.

person Leo Liu-MSFT    schedule 07.06.2019
comment
Спасибо, Лео, да, я наткнулся на эту ветку и надеялся, что это проблема, но у нас установлена ​​последняя версия расширения SonarCloud в DevOps, поэтому я не думаю, что это, к сожалению - person Tracey Penberthy; 07.06.2019
comment
@TraceyPenberthy, извините за это. После прочтения документа dejanstojanovic .net / aspnet / 2019 / may / снова, я обнаружил дополнительный шаг в конвейере для подготовки результатов тестирования для загрузки в SonarCloud, если возможно, вы можете проверить, помогает ли это. - person Leo Liu-MSFT; 07.06.2019
comment
Спасибо, Лео, я попытался реализовать дополнительную задачу сценария PowerShell «Анализ отчетов CodeCoverage», описанную в этой статье, но у меня это не сработало :( - person Tracey Penberthy; 07.06.2019
comment
У меня такая же проблема, какое решение? - person mahendra rathod; 29.06.2019