Тестирование покрытия SonarQube с помощью MsTest

Я пытался получить SonarQube работа с простым приложением dot net. У меня был некоторый успех в настройке и запуске, но покрытие кода не работает.

Похоже, что многие другие люди сталкивались с этой проблемой, когда SonarQube прекратил поддержку многих инструментов покрытия "перейти к", таких как DotCover and OpenCover через Галлио

Примеры, которым я следовал:

Я попробовал несколько инструментов командной строки VS, чтобы сгенерировать .coverage файл

vstest.console.exe .\UnitTestProject1\bin\Debug\UnitTestProject1.dll /EnableCodeCoverage

а также

CodeCoverage.exe collect /output:DynamicCodeCoverage.coverage .\UnitTestProject1\bin\Debug\UnitTestProject1.dll

И написали какой-то код, чтобы преобразовать его в .coveragexml файл отсюда

Чтобы получить следующий XML:

<?xml version="1.0" standalone="yes"?>
<CoverageDSPriv>
  <Module>
    <ModuleName>unittestproject1.dll</ModuleName>
    <ImageSize>32768</ImageSize>
    <ImageLinkTime>0</ImageLinkTime>
    <LinesCovered>12</LinesCovered>
    <LinesPartiallyCovered>0</LinesPartiallyCovered>
    <LinesNotCovered>0</LinesNotCovered>
    <BlocksCovered>9</BlocksCovered>
    <BlocksNotCovered>0</BlocksNotCovered>
    <NamespaceTable>
      <BlocksCovered>9</BlocksCovered>
      <BlocksNotCovered>0</BlocksNotCovered>
      <LinesCovered>12</LinesCovered>
      <LinesNotCovered>0</LinesNotCovered>

И даже используемая таблица стилей XSLT обеспечивает тот, который может использоваться бегуном SonarQube

<?xml version="1.0" encoding="utf-8"?>
<results>
  <modules>
    <module name="unittestproject1.dll" path="unittestproject1.dll" block_coverage="100" line_coverage="100" blocks_covered="9" blocks_not_covered="0" lines_covered="12" lines_partially_covered="0" lines_not_covered="0">
      <functions>
        <function name="Setup" type_name="UnitTest1" block_coverage="100" line_coverage="100" blocks_covered="1" blocks_not_covered="0" lines_covered="2" lines_partially_covered="0" lines_not_covered="0">
          <ranges>
            <range source_id="1" covered="yes" start_line="13" start_column="9" end_line="13" end_column="10" />
            <range source_id="1" covered="yes" start_line="15" start_column="9" end_line="15" end_column="10" />
          </ranges>
        </function>

когда я запускаю сонар

  1. MSBuild.SonarQube.Runner.exe Начало
  2. MSBuild
  3. MSBuild.SonarQube.Runner.exe конец

Я получаю сообщения об ошибках типа "Причина": unknown XML Node, Ожидайте покрытия, но получили результаты

Это потому, что ему не нравится структура моего XML, но я не уверен, что ожидается и сколько работы мне нужно сделать над файлом покрытия, чтобы преобразовать его в формат, который нравится Sonar

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

Дополнительная информация о моем Sonar plugins являются

  1. с # = 4,1
  2. Общий охват = 1,1

1 ответ

Решение

Отчеты OpenCover и dotCover поддерживаются плагином C# 4.1. Установить sonar.cs.dotcover.reportsPaths или же sonar.cs.opencover.reportsPaths Свойство соответственно для обоих инструментов для импорта покрытия кода.

Gallio не совсем инструмент для перехода: проект неактивен с 2013 года. Основная проблема с плагином SonarQube C# Plugin 2.x, который основывался на Gallio, заключается в том, что он запускал Gallio сам по себе - не позволяя конечному пользователю настроить как тесты должны быть запущены и покрытие собрано.

Теперь ситуация намного проще: запустите ваш любимый инструмент покрытия кода, попросите его создать отчет и направьте его в MSBuild SonarQube Runner.

Если вы используете Team Foundation Server 2013, включение покрытия кода - это выбор Enable Code Coverage вариант в определении сборки.

Теперь очень прискорбно, что у Microsoft есть два разных .coveragexml форматов, и что плагин SonarQube C# поддерживает только один из них (то есть, пока. См. http://jira.sonarsource.com/browse/SONARNTEST-3).

В ожидании исправления этого билета, вот шаги для получения ожидаемого .coveragexml отчет (примечание: заменить 14 от 12 в различных путях, если вы используете VS 2013 вместо 2015):

  1. MSBuild.SonarQube.Runner begin /k:SonarQube_Project_Key /n:SonarQube_Project_Name /v:1.0 /d:sonar.cs.vscoveragexml.reportsPaths=%CD%\VisualStudio.coveragexml
  2. msbuild
  3. "C:\Program Files (x86)\Microsoft Visual Studio 14.0\Team Tools\Dynamic Code Coverage Tools\CodeCoverage.exe" collect /output:VisualStudio.coverage "C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe" "UnitTestProject1\bin\Debug\UnitTestProject1.dll"
  4. "C:\Program Files (x86)\Microsoft Visual Studio 14.0\Team Tools\Dynamic Code Coverage Tools\CodeCoverage.exe" analyze /output:VisualStudio.coveragexml VisualStudio.coverage
  5. MSBuild.SonarQube.Runner end

Я бы не рекомендовал использовать XSLT для преобразования форматов отчетов о покрытии кода, используйте CodeCoverage.exe Инструмент Microsoft вместо.

Пожалуйста, убедитесь, что указаны ниже:

1) У вас есть файл покрытия, который создается в процессе сборки?

Если он не сгенерирован, то, возможно, необходимо обновить сценарий сборки, чтобы сгенерировать его, или нужно добавить явный шаг в инструмент автоматизации сборки для его создания.

For e.g. "C:\Program Files\dotnet\dotnet.exe" test <Target-filename>.csproj --logger:trx --collect:"Code Coverage"

2) Убедитесь, что создана XML-версия файла CodeCoverage.

Итак, будет два файла:

CodeCoverage (generated using dotnet command)

CodeCoverageXml (This is generated by using "CodeCoverage.exe analyze /output: newfilename Your_CodeCoverage_file" )

3) Указывается ли правильный путь к файлу покрытия при вызове SonarQube?

4) Установлена ​​ли на вашем сервере сборки правильная версия Dotnet и выполняется ли та же версия Dotnet?

Иногда на сервере сборки есть несколько версий Dotnet (например, v2.0.3 и v2.1.0)

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

Другие вопросы по тегам