コードカバレッジ
- プラン: Free、Premium、Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
テストでカバーされているソースコードの量を追跡および可視化するように、コードカバレッジを設定します。以下を実行できます:
coverageキーワードを使用して、全体的なカバレッジのメトリクスと傾向を追跡する。artifacts:reports:coverage_reportキーワードを使用して、行ごとのカバレッジを可視化する。
カバレッジレポートを設定する
coverageキーワードを使用して、テストカバレッジを監視し、マージリクエストでカバレッジ要件を適用します。
カバレッジレポートでは、次のことが可能です:
- マージリクエストで全体的なカバレッジ率を表示する。
- 複数のテストジョブからカバレッジを集約する。
- カバレッジチェックの承認ルールを追加する。
- 経時的なカバレッジの傾向を追跡する。
カバレッジレポートを設定するには:
coverageキーワードをパイプライン設定に追加します:test-unit: script: - coverage run unit/ coverage: '/TOTAL.+ ([0-9]{1,3}%)/' test-integration: script: - coverage run integration/ coverage: '/TOTAL.+ ([0-9]{1,3}%)/'テスト出力形式に一致するように正規表現(regex)を設定します。一般的なパターンについては、カバレッジの正規表現パターンを参照してください。
複数のジョブからカバレッジを集約するには、含める各ジョブに
coverageキーワードを追加します。オプション。カバレッジチェックの承認ルールを追加します。
カバレッジの正規表現パターン
次のサンプル正規表現パターンは、一般的なテストカバレッジツールからのカバレッジ出力を解析するように設計されています。
正規表現パターンを注意深くテストしてください。ツールの出力形式は時間とともに変化する可能性があり、これらのパターンは期待どおりに動作しなくなる可能性があります。
| ツール | 言語 | コマンド | 正規表現パターン |
|---|---|---|---|
| pytest-cov | Python | pytest --cov | /TOTAL.*? (100(?:\.0+)?\%|[1-9]?\d(?:\.\d+)?\%)$/ |
| Simplecov-html | Ruby | rspec spec | /Line\sCoverage:\s\d+\.\d+%/ |
| ツール | 言語 | コマンド | 正規表現パターン |
|---|---|---|---|
| gcovr | C/C++ | gcovr | /^TOTAL.*\s+(\d+\%)$/ |
| tarpaulin | Rust | cargo tarpaulin | /^\d+.\d+% coverage/ |
| ツール | 言語 | コマンド | 正規表現パターン |
|---|---|---|---|
| JaCoCo | Java/Kotlin | ./gradlew test jacocoTestReport | /Total.*?([0-9]{1,3})%/ |
| Scoverage | Scala | sbt coverage test coverageReport | /(?i)total.*? (100(?:\.0+)?\%|[1-9]?\d(?:\.\d+)?\%)$/ |
| ツール | コマンド | 正規表現パターン |
|---|---|---|
| tap | tap --coverage-report=text-summary | /^Statements\s*:\s*([^%]+)/ |
| nyc | nyc npm test | /All files[^|]*\|[^|]*\s+([\d\.]+)/ |
| jest | jest --ci --coverage | /All files[^|]*\|[^|]*\s+([\d\.]+)/ |
| node:test | node --experimental-test-coverage --test | /all files[^|]*\|[^|]*\s+([\d\.]+)/ |
| ツール | コマンド | 正規表現パターン |
|---|---|---|
| pest | pest --coverage --colors=never | /Statement coverage[A-Za-z\.*]\s*:\s*([^%]+)/ |
| phpunit | phpunit --coverage-text --colors=never | /^\s*Lines:\s*\d+.\d+\%/ |
| ツール | コマンド | 正規表現パターン |
|---|---|---|
| go test(シングル) | go test -cover | /coverage: \d+.\d+% of statements/ |
| go test(プロジェクト) | go test -coverprofile=cover.profile && go tool cover -func cover.profile | /total:\s+\(statements\)\s+\d+.\d+%/ |
| ツール | 言語 | コマンド | 正規表現パターン |
|---|---|---|---|
| OpenCover | .NET | なし | /(Visited Points).*\((.*)\)/ |
| dotnet test(MSBuild) | .NET | dotnet test | /Total\s*\|*\s(\d+(?:\.\d+)?)/ |
| Pester | PowerShell | なし | /Covered (\d{1,3}(\.|,)?\d{0,2}%)/ |
| ツール | コマンド | 正規表現パターン |
|---|---|---|
| excoveralls | なし | /\[TOTAL\]\s+(\d+\.\d+)%/ |
| mix | mix test --cover | /\d+.\d+\%\s+|\s+Total/ |
カバレッジの可視化
artifacts:reports:coverage_reportキーワードを使用して、マージリクエスト内のテストでカバーされる特定のコード行を表示します。
次の形式でカバレッジレポートを生成できます:
- Cobertura: Java、JavaScript、Python、Rubyなどの複数の言語に対応。
- JaCoCo: Javaプロジェクトにのみ対応。
カバレッジの可視化では、アーティファクトレポートを使用して次のことを行います:
- ワイルドカードパスなど、1つ以上のカバレッジレポートを収集する。
- すべてのレポートからカバレッジ情報を結合する。
- 結合された結果をマージリクエストの差分に表示する。
カバレッジファイルはバックグラウンドジョブで解析されるため、パイプラインの完了からマージリクエストに可視化が表示されるまでに遅延が発生する可能性があります。
デフォルトでは、カバレッジの可視化データは作成から1週間で期限切れになります。
カバレッジの可視化を設定する
カバレッジの可視化を設定するには:
カバレッジレポートを生成するようにテストツールを設定します。
artifacts:reports:coverage_report設定をパイプラインに追加します:test: script: - run tests with coverage artifacts: reports: coverage_report: coverage_format: cobertura # or jacoco path: coverage/coverage.xml
言語固有の設定の詳細については、以下を参照してください:
子パイプラインからのカバレッジレポート
子パイプラインのカバレッジレポートは、マージリクエストの差分の注釈に表示されます。ただし、親パイプラインは、これらのカバレッジレポートにアクセスして、独自のジョブで使用することはできません。
親パイプラインが子パイプラインのカバレッジレポートをフェッチするためのサポートが、issue 285100で提案されています。
カバレッジチェックの承認ルールを追加する
- プラン: Premium、Ultimate
プロジェクトのテストカバレッジを低下させるマージリクエストについて、特定のユーザーまたはグループによる承認を要求するように設定できます。
前提要件:
- カバレッジレポートを設定していること。
Coverage-Check承認ルールを追加するには:
- プロジェクトに移動し、設定 > マージリクエストを選択します。
- マージリクエストの承認で、次のいずれかを実行します:
Coverage-Check承認ルールの横にある有効を選択します。- 手動セットアップの場合は、承認ルールを追加を選択し、ルール名に
Coverage-Checkと入力します。
- ターゲットブランチを選択します。
- 必要な承認数を設定します。
- 承認を行うユーザーまたはグループを選択します。
- 変更を保存を選択します。
Coverage-Check承認ルールは、マージリクエストによって全体のカバレッジが向上したとしても、マージベースのパイプラインにカバレッジデータが含まれていない場合、承認を必須とします。
カバレッジ結果を表示する
パイプラインが正常に実行された後、次の場所でコードカバレッジの結果を確認できます:
マージリクエストウィジェット: ターゲットブランチと比較して、カバレッジ率とその変化を確認します。
マージリクエストの差分: どの行がテストでカバーされているかを確認します。CoberturaレポートおよびJaCoCoレポートで使用できます。
パイプラインジョブ: 個々のジョブのカバレッジ結果をモニタリングします。
カバレッジ履歴を表示する
プロジェクトまたはグループのコードカバレッジの推移を経時的に追跡できます。
プロジェクトの場合
プロジェクトのコードカバレッジ履歴を表示するには:
- 左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。新しいナビゲーションをオンにしている場合、このフィールドは上部のバーにあります。
- 分析 > リポジトリ分析を選択します。
- ドロップダウンリストから、履歴データを表示するジョブを選択します。
- オプション。データのCSVファイルを表示するには、**元のデータをダウンロード (.csv)**を選択します。
グループの場合
- プラン: Premium、Ultimate
グループ内のすべてのプロジェクトのコードカバレッジ履歴を表示するには:
- 左側のサイドバーで、検索または移動先を選択して、グループを見つけます。新しいナビゲーションをオンにしている場合、このフィールドは上部のバーにあります。
- 分析 > リポジトリ分析を選択します。
- オプション。データのCSVファイルを表示するには、過去のテストカバレッジデータをCSV形式でダウンロードを選択します。
カバレッジバッジを表示する
パイプラインバッジを使用して、プロジェクトのコードカバレッジのステータスを共有します。
プロジェクトにカバレッジバッジを追加するには、テストカバレッジレポートバッジを参照してください。
トラブルシューティング
コードカバレッジからカラーコードを削除する
一部のテストカバレッジツールでは、正規表現で正しく解析されないANSIカラーコードが出力に含まれています。これにより、カバレッジの解析が失敗します。
一部のカバレッジツールには、出力のカラーコードを無効にするオプションがありません。その場合は、カラーコードを削除する1行のスクリプトに、カバレッジツールの出力をパイプします。
次に例を示します:
lein cloverage | perl -pe 's/\e\[?.*?[\@-~]//g'