Тестирование покрытия 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>
когда я запускаю сонар
- MSBuild.SonarQube.Runner.exe Начало
- MSBuild
- MSBuild.SonarQube.Runner.exe конец
Я получаю сообщения об ошибках типа "Причина":
unknown XML Node
, Ожидайте покрытия, но получили результаты
Это потому, что ему не нравится структура моего XML, но я не уверен, что ожидается и сколько работы мне нужно сделать над файлом покрытия, чтобы преобразовать его в формат, который нравится Sonar
Надеюсь, я пошел по неверному пути, и есть простой способ интеграции VS Coverage или coveragexml
файлы в сонар без особой работы
Дополнительная информация о моем
Sonar plugins
являются
- с # = 4,1
- Общий охват = 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):
MSBuild.SonarQube.Runner begin /k:SonarQube_Project_Key /n:SonarQube_Project_Name /v:1.0 /d:sonar.cs.vscoveragexml.reportsPaths=%CD%\VisualStudio.coveragexml
msbuild
"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"
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\Team Tools\Dynamic Code Coverage Tools\CodeCoverage.exe" analyze /output:VisualStudio.coveragexml VisualStudio.coverage
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)
Для создания отчета о покрытии очень важно использовать правильную версию, иначе она будет отображаться как ноль или не будет генерировать сам файл покрытия.