PHPUnit の Clover XML を Cobertura XML に変換して Gitlab の MR で コードカバレッジの可視化

以下で説明される通り、Gitlab では MR のコード差分画面で行ごとのコードカバレッジを可視化できます。

この機能を利用するためには Cobertura 形式の XML をカバレッジレポートが必要です。PHP の場合 PHPUnit 9.4 から Cobertura 形式のカバレッジレポートが出力できるので、そのまま利用できます。

ただ・・PHPUnit 9.4 って結構最近ですね。諸般の事情により PHPUnit のバージョンを上げられない場合は Clover 形式の XML を出力して Cobertura 形式に変換すれば良さそうです。

Cobertura 形式や Clover 形式がどういうものなのか詳細は知りませんが、Gitlab の Cobertura XML を処理するコードを見た感じ、Cobertura XML の一部の要素しか抽出していないので、これぐらいなら雰囲気で Clover 形式から変換できそうです。

というわけで、雑に作ってみました。

.gitlab-ci.yml で次のように設定します。

image: ngyuki/php-dev

test:
  stage: test
  only:
    - merge_requests
  script:
    - composer install --prefer-dist --no-progress --no-suggest --ansi
    - phpdbg -qrr vendor/bin/phpunit --coverage-clover=clover.xml
    - vendor/bin/clover-to-cobertura < clover.xml > cobertura.xml
  cache:
    paths:
      - vendor/
  artifacts:
    reports:
      cobertura: cobertura.xml

MR のコード差分で次のように表示されます(行番号の右の緑と赤の線)。

f:id:ngyuki:20210117140857p:plain