Не большая статья(примеры решений) для
- Отправки процента покрытия тестов в Gitlab
- Отправка пройдённых тестов в Gitlab
- Отправки результатов процента покрытия и репорта в SonarQube
- Отправка пройдённых тестов в SonarQube
- Формирования отчета с помощью ReportGenerator
Будет примерно что то такое


Пример реализации vstest с OpenCover, ReportGenerator, trx2junit
Внутри OpenCover запускается процесс vstest выполнением мы получаем coverage.xml и trx
Потом преобразуем c помощью trx2junit trx в понятный для Gitlab junit (Для вкладки Tests в Gitalb)
С помощью ReportGenerator формируем html отчет для дальнейшей публикации gitlab pages
B вот этой строкой coverage: /(Visited Points).*\((.*)\)/ с дополнительный регуляркой мы извлекаем процент покрытия из cobertura-coverage.xml и отправляем с gitlab
variables:
OPENCOVER_PATH: 'D:\opencover\4.7.1221\tools'
REPORT_GENERATOR: 'D:\reportgenerator\5.1.13\tools\net47'
test:
script:
- '& "$env:OPENCOVER_PATH\OpenCover.Console.exe" -target:"$env:VSTEST_PATH\vstest.console.exe" -returntargetcode -targetargs:"$env:DEPLOY_TESTS_PATH\$PRODUCT_NAME.Tests.dll /Platform:x64 /InIsolation /logger:trx;LogFileName=$PRODUCT_NAME.Tests.trx /TestAdapterPath:$env:DEPLOY_TESTS_PATH\ForAutoTest /ResultsDirectory:$env:DEPLOY_TESTS_PATH\result /Diag:$env:DEPLOY_TESTS_PATH\result\testrun.log" -output:$env:DEPLOY_TESTS_PATH\cobertura-coverage.xml'
- trx2junit "$env:DEPLOY_TESTS_PATH\result\$PRODUCT_NAME.Tests.trx"
- '& "$REPORT_GENERATOR\ReportGenerator.exe" -reports:$env:DEPLOY_TESTS_PATH\cobertura-coverage.xml -targetdir:$env:DEPLOY_TESTS_PATH\report_dir'
coverage: /(Visited Points).*\((.*)\)/
after_script:
- Copy-Item $DEPLOY_TESTS_PATH\report_dir -destination public/ -Recurse -Force
- Copy-Item $DEPLOY_TESTS_PATH\cobertura-coverage.xml -destination $CI_PROJECT_DIR\out\ModuleTestsResult\cobertura-coverage.xml -Force
artifacts:
when: always
paths:
- public
reports:
coverage_report:
coverage_format: cobertura
path: $CI_PROJECT_DIR\out\ModuleTestsResult\cobertura-coverage.xml
junit:
- $CI_PROJECT_DIR\out\ModuleTestsResult\$PRODUCT_NAME.Tests.xml
expire_in: 2 week
environment:
name: Coverage
url: "https://gitlab.com/-/$CI_PROJECT_NAME/-/jobs/$CI_JOB_ID/artifacts/public/index.html"
Пример SonarQube Msbuild и параллельной отправкой пройденных тестов и отчета о покрытии
script:
- echo "Nuget restore $CI_PROJECT_NAME.sln start"
- '& "$env:NUGET_PATH" restore "$env:SOLUTION_FILE" -Verbosity Normal -NonInteractive'
- echo 'SonarScaner Start'
- '& "$env:SONARSCANNER_MSBUILD_PATH" begin /k:$env:SONARQUBE_PROJECT_KEY /d:sonar.verbose=true /d:sonar.cs.opencover.reportsPaths="$CI_PROJECT_DIR\out\ModuleTestsResult\cobertura-coverage.xml" /d:sonar.login=$env:SONAR_TOKEN /d:sonar.cs.vstest.reportsPaths="$CI_PROJECT_DIR\out\ModuleTestsResult\$CI_PROJECT_NAME.Tests.trx" /n:$env:SONARQUBE_PROJECT_NAME /d:sonar.host.url=$env:SONARQUBE_HOST_URL /d:sonar.gitlab.project_id=$CI_PROJECT_PATH /v:$VERSION /d:sonar.dotnet.excludeGeneratedCode=true /d:sonar.ci.autoconfig.disabled=true'
- echo "Build $CI_PROJECT_NAME.sln start"
- '& "$env:MSBUILD_PATH" "$env:SOLUTION_FILE" /restore:true /m'
- '& "$env:SONARSCANNER_MSBUILD_PATH" end /d:sonar.login=$env:SONAR_TOKEN'