Coverage & Unit (C#) OpenCover and etc

Не большая статья(примеры решений) для

  • Отправки процента покрытия тестов в 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'

Добавить комментарий 0