使用什么 Gitlab 工具来生成代码覆盖率报告?

Ral*_*kum 1 kotlin gitlab test-coverage gitlab-ci

有人告诉我,不使用 JaCoCo,而是会有一个内部 Gitlab 工具,我可以在其中创建测试覆盖率报告?

  • 我不想使用 JaCoCo。
  • 我对 Gitlab 中的任何可视化插件都不感兴趣。
  • 我想生成一个 xml/html 文件,其中包含条形图等,可以通过电子邮件发送并在外部打开。

我在 Gitlab 仪表板菜单中找不到任何内容。该项目是一个 Android App Kotlin 项目。

Sim*_*ner 5

问题是您想查看/拥有保险的哪一部分:

  • 只是 MR 中的一个数字 - 因此 GitLab 解析作业的日志输出
  • MR 内的覆盖可视化 - 因此您需要提供报告。

概述的覆盖范围

对于概述中的覆盖范围并且只是为了获得百分比,您需要使用正则表达式配置您的作业,如何解析它,例如

job1:
  # ....
  coverage: '/Code coverage: \d+\.\d+/'
Run Code Online (Sandbox Code Playgroud)

https://docs.gitlab.com/ee/ci/yaml/#coverage

可视化

我们实际上使用的是 JaCoCo,但为了使覆盖范围可见并在合并请求中包含信息,您必须将所有内容都转换为 Cobertura 报告。

有不同的方法可以实现这一目标:

  1. 使用像https://github.com/kageiit/gradle-jacobo-plugin这样的 gradle-plugin

    配置非常简洁,如果您已经有 gradle 构建,那么很容易集成

  2. 在 CI 管道中有一个自己的步骤 - 请参阅https://docs.gitlab.com/ee/user/project/merge_requests/test_coverage_visualization.html

    test-jdk11:
       stage: test
       image: gradle:6.6.1-jdk11
       script:
         - 'gradle test jacocoTestReport' # jacoco must be configured to create an xml report
       artifacts:
         paths:
           - build/jacoco/jacoco.xml
    
     coverage-jdk11:
       # Must be in a stage later than test-jdk11's stage.
       # The `visualize` stage does not exist by default.
       # Please define it first, or chose an existing stage like `deploy`.
       stage: visualize
       image: registry.gitlab.com/haynes/jacoco2cobertura:1.0.7
       script:
         # convert report from jacoco to cobertura, using relative project path
         - python /opt/cover2cover.py build/jacoco/jacoco.xml $CI_PROJECT_DIR/src/main/java/ > build/cobertura.xml
       needs: ["test-jdk11"]
       artifacts:
         reports:
           cobertura: build/cobertura.xml
    
    Run Code Online (Sandbox Code Playgroud)

需要注意的是,您始终必须告诉 GitLab CI 您的 cobertura 工件路径:

job:
    #...
    artifacts:
      reports:
        cobertura: build/cobertura.xml
Run Code Online (Sandbox Code Playgroud)