概要

コードカバレッジは、モジュールやセッションが実行するコードの総量のうちのパーセンテージを測定するものです。

Test Visibility がすでにお使いの言語に設定されていることを確認してください。

コードカバレッジを報告する

互換性

  • dd-trace>=3.20.0
  • jest>=24.8.0jest-circus で実行した場合のみ。
  • mocha>=5.2.0
  • cucumber-js>=7.0.0
  • Istanbul コードカバレッジのみがサポートされています。

テストが Istanbul でインスツルメントされた場合、Datadog トレーサーは test.code_coverage.lines_pct タグを通じてテストセッションのコードカバレッジを自動的に報告します。Istanbul でテストをインスツルメントするには、nyc を使用します。

テストセッションから総コードカバレッジを報告するには、次の手順に従います。

  1. nyc をインストールします。
npm install --save-dev nyc
  1. テストコマンドを nyc でラップします。
{
  "scripts": {
    "test": "mocha",
    "coverage": "nyc npm run test"
  }
}
: Jest にはデフォルトで Istanbul が含まれているので、nyc をインストールする必要はありません。単に --coverage を渡すだけです。
{
  "scripts": {
    "coverage": "jest --coverage"
  }
}
  1. 新しい coverage コマンドでテストを実行します。
NODE_OPTIONS="-r dd-trace/ci/init" DD_ENV=ci DD_SERVICE=my-javascript-service npm run coverage

互換性

  • dd-trace>=2.31.0

コードカバレッジが利用できる場合、Datadog トレーサー (v2.31.0 以降) は、テストセッションの test.code_coverage.lines_pct タグでそれを報告します。

コードカバレッジの計算に Coverlet を使用している場合、dd-trace を実行する際に DD_CIVISIBILITY_EXTERNAL_CODE_COVERAGE_PATH 環境変数にレポートファイルへのパスを指定します。レポートファイルは、OpenCover または Cobertura 形式である必要があります。または、DD_CIVISIBILITY_CODE_COVERAGE_ENABLED=true 環境変数で、Datadog トレーサーに内蔵されているコードカバレッジ計算を有効にできます。

高度なオプション

Datadog トレーサーのビルトインコードカバレッジは、.runsettings ファイルを通して CoverletVS Code Coverage オプションの両方をサポートしています。

ファイル構造

<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
    <DataCollectionRunSettings>
        <DataCollectors>
            <DataCollector friendlyName="DatadogCoverage">
                <Configuration>
                    <!-- Datadog コードカバレッジの設定 -->
                    ...
                </Configuration>
            </DataCollector>
        </DataCollectors>
    </DataCollectionRunSettings>
</RunSettings>

Coverlet オプション

オプションメトリクス
ExcludeByAttribute属性で装飾されたメソッド、クラス、またはアセンブリをコードカバレッジから除外します。
ExcludeByFile特定のソースファイルをコードカバレッジから除外します。
除外するフィルター式を使用してコードカバレッジ分析から除外します。
NodeJS

System.Diagnostics.CodeAnalysis ネームスペースにある ExcludeFromCodeCoverage 属性を作成して適用することで、メソッド、クラス全体、またはアセンブリをコードカバレッジから除外することができます。

ExcludeByAttribute プロパティと属性の短い名前 (ネームスペースを除いた型名) で追加の属性を除外します。

ソースファイル

ExcludeByFile プロパティで特定のソースファイルをコードカバレッジから除外します。

  • カンマで区切って、単一または複数のパスを使用します。
  • 例えば dir1/*.cs のように、ワイルドカード (*) を使用したファイルパスまたはディレクトリパスを使用します。
フィルター

フィルターでは、以下の構文のフィルター式を使って、除外するものを細かく制御することができます。

[<ASSEMBLY_FILTER>]<TYPE_FILTER>

ワイルドカードはサポートされています。

  • * => 0 文字以上にマッチします
  • ? => プレフィックス文字はオプションです

:

  • [*]* => すべてのアセンブリのすべての型を除外します (インスツルメンテーションされるものはありません)
  • [coverlet.*]Coverlet.Core.Coverage => coverlet.* にマッチするアセンブリ (例えば coverlet.core) に属する Coverlet.Core ネームスペース内の Coverage クラスを除外します
  • [*]Coverlet.Core.Instrumentation.* => あらゆるアセンブリ内の Coverlet.Core.Instrumentation ネームスペースに属するすべての型を除外します
  • [coverlet.*.tests?]* => coverlet. で始まり、.test または .tests で終わるアセンブリ内のすべての型を除外します (? により s はオプションになります)
  • [coverlet.*]*,[*]Coverlet.Core*\ => coverlet.* にマッチするアセンブリを除外し、あらゆるアセンブリ内の Coverlet.Core ネームスペースに属するすべての型を除外します

VS コードカバレッジオプション

詳細については、Microsoft ドキュメントのコードカバレッジ分析のカスタマイズを参照してください。

オプションメトリクス
Attributes\Exclude属性で装飾されたメソッド、クラス、またはアセンブリをコードカバレッジから除外します。
Sources\Exclude特定のソースファイルをコードカバレッジから除外します。

Runsettings の例

<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
    <DataCollectionRunSettings>
        <DataCollectors>
            <DataCollector friendlyName="DatadogCoverage">
                <Configuration>
                    <!-- Coverlet 構成 -->
                    <ExcludeByAttribute>CompilerGeneratedAttribute</ExcludeByAttribute>
                    <ExcludeByFile>**/Fibonorial.cs</ExcludeByFile>
                    <Exclude>[myproject.*.tests?]*</Exclude>

                    <!-- VS Code Coverage configuration -->
                    <CodeCoverage>
                        <Attributes>
                            <Exclude>
                                <Attribute>^System\.ObsoleteAttribute$</Attribute>
                            </Exclude>
                        </Attributes>
                        <Sources>
                            <Exclude>
                                <Source>^MyFile\.cs$</Source>
                            </Exclude>
                        </Sources>
                    </CodeCoverage>
                </Configuration>
            </DataCollector>
        </DataCollectors>
    </DataCollectionRunSettings>
</RunSettings>

互換性

  • dd-trace-java >= 1.24.2

コードカバレッジが利用できる場合、Datadog トレーサーは、テストセッションの test.code_coverage.lines_pct タグでそれを報告します。

Jacoco はコードカバレッジライブラリとしてサポートされています。

プロジェクトにすでに Jacoco が構成されている場合、Datadog トレーサーはそれをインスツルメントし、カバレッジデータを自動的に Datadog に報告します。

そうでない場合、ランタイムでテスト実行に Jacoco を追加するようトレーサーを構成できます。 環境変数 DD_CIVISIBILITY_JACOCO_PLUGIN_VERSION を使用して、注入したい Jacoco のバージョンを指定します (例: DD_CIVISIBILITY_JACOCO_PLUGIN_VERSION=0.8.11)。

互換性

  • datadog-ci>=2.17.2

JUnit レポートのアップロードでは、コードカバレッジパーセンテージの値をアップロードできます。

datadog-ci junit upload --service <service_name> --report-metrics=test.code_coverage.lines_pct:85 <path>

この例では、85 はテストがカバーする行の割合であり、別のツールで生成する必要があります。

コードカバレッジレポートは別のプロセスで生成する必要があります。そうしないと、JUnit レポートのアップロードでコードカバレッジレポートが生成されません。報告されるメトリクス名は test.code_coverage.lines_pct でなければなりません。

互換性

  • dd-trace>=2.5.0.
  • Python>=3.7.
  • coverage>=4.4.2.
  • pytest>=3.0.0.
  • pytest-cov>=2.7.0.
  • unittest>=3.8.
  • コードカバレッジは coverage.pypytest-cov のみがサポートされています。

テストに coverage.py または pytest-cov がインスツルメンテーションされると、Datadog トレーサーはテストセッションの test.code_coverage.lines_pct タグでコードカバレッジを自動的に報告します。

coverage.py を使ってテストセッションから総コードカバレッジを報告するには、次の手順に従います。

  1. coverage をインストールします。
python3 -m pip install coverage
  1. 新しい coverage コマンドでテストを実行します。
DD_ENV=ci DD_SERVICE=my-python-service coverage run -m pytest

または、pytest-cov を使ってテストセッションから総コードカバレッジを報告するには、次の手順に従います。

  1. pytest をインストールします。
python3 -m pip install pytest
  1. pytest-cov をインストールします。
python3 -m pip install pytest-cov
  1. pytest コマンドに --cov フラグを追加してテストを実行します。
DD_ENV=ci DD_SERVICE=my-python-service pytest --cov

コードカバレッジをグラフ化する

報告されたコードカバレッジは @test.code_coverage.lines_pct として報告され、これはファセット内の合計パーセンテージを表し、CI Visibility Explorer で他のメジャーファセットと同様にプロットできます。

テストセッションのカバレッジタブ

報告されたコードカバレッジは、テストセッションの詳細ページの Coverage タブにも表示されます。

グラフのエクスポート

グラフをダッシュボードノートブックにエクスポートし、Export ボタンをクリックすると、それに基づいてモニターを作成することができます。

モニターの追加

CI テストモニターを作成して、サービスのコードカバレッジが特定のしきい値を下回るとアラートを受けます。

ブランチのコードカバレッジの推移を見る

また、Branch Overview ページでコードカバレッジの推移を見ることができ、改善されているか悪化しているかを確認できます。

プルリクエストのコードカバレッジの変化を表示する

プルリクエストのテストサマリーコメントには、GitHub プルリクエストのコードカバレッジの変化が、デフォルトブランチと比較する形で表示されます。

Intelligent Test Runner と総コードカバレッジ

Intelligent Test Runner は、機能するために_テストごと_のコードカバレッジが必要であるにもかかわらず、自動的に総コードカバレッジの測定を行いません

その他の参考資料