Python 向け Test Impact Analysis This product is not supported for your selected
Datadog site . (
).
互換性 Test Impact Analysis は、以下のバージョンとテストフレームワークでのみサポートされています。
pytest>=7.2.0
ddtrace>=2.1.0
以降。Python>=3.7
以降。coverage>=5.5
が必要です。pytest-cov
とは非互換 (既知の制限事項 を参照)unittest
ddtrace>=2.2.0
以降。Python>=3.7
以降。coverage
セットアップ テストの最適化 Test Impact Analysis を設定する前に、Python 向け Test Optimization をセットアップしてください。Agent 経由でデータを報告する場合は、v6.40 以降または v7.40 以降を使用してください。
テストサービスの Test Impact Analysis を有効にする あなた、またはあなたの組織で Intelligent Test Runner Activation (intelligent_test_runner_activation_write
) 権限を持つユーザーが、テストサービス設定 ページで Test Impact Analysis を有効にする必要があります。
必要な依存関係 Test Impact Analysis には coverage
パッケージ が必要です。
このパッケージを CI テスト環境にインストールするには、関連する要件ファイルで指定するか、pip
を使用します。
すでに coverage
パッケージや pytest-cov
のようなプラグインを使用している場合は、既知の制限事項 を参照してください。
Test Impact Analysis を有効にしてテストを実行する Test Impact Analysis は、Datadog インテグレーションがアクティブな状態でテストを実行すると有効になります。次のコマンドでテストを実行してください。
Copy
DD_ENV = ci DD_SERVICE = my-python-app pytest --ddtrace
Copy
DD_ENV = ci DD_SERVICE = my-python-app ddtrace-run python -m unittest
Test Impact Analysis を一時的に無効にする 環境変数 DD_CIVISIBILITY_ITR_ENABLED
を false
または 0
に設定することで、Test Impact Analysis をローカルで無効化できます。
DD_CIVISIBILITY_ITR_ENABLED
(オプション)Test Impact Analysis のカバレッジおよびテストスキップ機能を有効化デフォルト : (true)
次のコマンドを実行して Test Impact Analysis を無効化します。
Copy
DD_ENV = ci DD_SERVICE = my-python-app DD_CIVISIBILITY_ITR_ENABLED = false pytest --ddtrace
Copy
DD_ENV = ci DD_SERVICE = my-python-app DD_CIVISIBILITY_ITR_ENABLED = false ddtrace-run python -m unittest
特定のテストに対するスキップの無効化 Test Impact Analysis の動作を上書きし、特定のテストがスキップされないようにできます。これらのテストは unskippable テストと呼ばれます。
テストをスキップできないようにする理由は? Test Impact Analysis uses code coverage data to determine whether or not tests should be skipped. In some cases, this data may not be sufficient to make this determination.
例:
テキストファイルからデータを読み込むテスト テスト対象のコード以外の API とやりとりするテスト (リモートの REST API など) Designating tests as unskippable ensures that Test Impact Analysis runs them regardless of coverage data.
互換性 スキップ不可のテストは以下のバージョンでサポートされています。
Marking tests as unskippable pytest
の skipif
マーク を使用して、Test Impact Analysis が個々のテストやモジュールをスキップしないようにできます。condition
を False
、reason
を "datadog_itr_unskippable"
として指定します。
個々のテスト 個々のテストは、@pytest.mark.skipif
デコレータを使用して、以下のようにスキップ不可としてマークすることができます。
import pytest
@pytest.mark.skipif ( False , reason = "datadog_itr_unskippable" )
def test_function ():
assert True
モジュール モジュールをスキップするには、以下のように pytestmark
グローバル変数 を使用します。
import pytest
pytestmark = pytest . mark . skipif ( False , reason = "datadog_itr_unskippable" )
def test_function ():
assert True
注 : これは他の skip
マークや condition
が True
に評価される skipif
マークをオーバーライドしません。
互換性 スキップ不可のテストは以下のバージョンでサポートされています。
unittest
での unskippable テストの指定方法unittest
の skipif
マーク を使用して、Test Impact Analysis が個々のテストをスキップしないようにできます。condition
を False
、reason
を "datadog_itr_unskippable"
として指定します。
個々のテスト 個々のテストは、@unittest.skipif
デコレータを使用して、以下のようにスキップ不可としてマークすることができます。
import unittest
class MyTestCase ( unittest . TestCase ):
@unittest.skipIf ( False , reason = "datadog_itr_unskippable" )
def test_function ( self ):
assert True
@unittest.skipif
を使用すると、他の skip
マークや condition
が True
に評価される skipif
マークをオーバーライドしません。
既知の制限 コードカバレッジの収集 カバレッジツールとの相互作用 Test Impact Analysis が有効な場合、カバレッジデータが不完全に見えることがあります。通常テストでカバーされるコード行が、これらのテストがスキップされるとカバーされなくなります。
coverage
パッケージとの相互作用Test Impact Analysis は coverage
パッケージの API を使用してコードカバレッジを収集します。そのため、coverage run
や pytest-cov
のようなプラグインからのデータは、ddtrace
が Coverage
クラスを使用するため不完全です。
pytest-xdist
のようなテスト実行順序を変更したり並列化を導入する pytest
プラグインを使用すると、競合状態により例外が発生する可能性があります。
参考資料