Testing projects¶
test
コマンド(by default)は、pytestと選択プラグインおよびcoverage.pyを使用します。詳細については、testing configurationを参照してください。
ほとんどのプロジェクトは、カスタムenvironmentsを必要とせずに、この方法で完全にテストできます。
Passing arguments¶
引数なしでtest
コマンドを実行すると、tests
はdefault argumentとしてpytest
に渡されます(これはtests
ディレクトリがあることを前提としています)。たとえば、次のコマンドを呼び出します。:
hatch test
大まかには次のように変換されます。:
pytest tests
pytest
に引数を渡すには、test
コマンドに引数を追加します。たとえば、次のコマンドを呼び出します。:
hatch test -vv tests/test_foo.py::test_bar
大まかには次のように変換されます。:
pytest -vv tests/test_foo.py::test_bar
--
セパレータを使用すると、引数を強制的に定位置として扱うことができます。これは、--help
フラグなど、test
コマンドの組み込みフラグがpytest
の組み込みフラグと競合する場合に特に便利です。たとえば、次のコマンドを呼び出します。:
hatch test -r -- -r fE -- tests
大まかには次のように変換されます。:
pytest -r fE -- tests
Note
pytest
が何を実行するか、どこにテストを配置するかを指示する引数を受け取るようにすることが重要です。デフォルトの動作は.
です。これは、現在のディレクトリ内のテストを徹底的に検索することを意味します。これは時間がかかるだけでなく、予期しない動作を引き起こす可能性もあります。
Environment selection¶
Single environment¶
環境オプションが選択されていない場合、「test」コマンドは、すでに存在するか互換性のある最初に定義された環境でのみテストを実行します。さらに、チェック順序は、Hatchが実行されているインタプリタと一致するversion of Pythonを定義する環境を優先します。
たとえば、次のようにdefault matrixをオーバーライドしたとします。:
[[tool.hatch.envs.hatch-test.matrix]]
python = ["3.12", "3.11"]
[[tool.hatch.envs.hatch-test.matrix]]
python = ["3.11"]
feature = ["foo", "bar"]
[[envs.hatch-test.matrix]]
python = ["3.12", "3.11"]
[[envs.hatch-test.matrix]]
python = ["3.11"]
feature = ["foo", "bar"]
拡張環境は通常、次のようになります。:
hatch-test.py3.12
hatch-test.py3.11
hatch-test.py3.11-foo
hatch-test.py3.11-bar
Python 3.11にHatchをインストールした場合、チェックの順序は次のようになります。:
hatch-test.py3.11
hatch-test.py3.11-foo
hatch-test.py3.11-bar
hatch-test.py3.12
Note
公式のinstallerを使用してHatchをインストールした場合、またはstandalone binariesのいずれかを使用している場合、Hatchが実行されるPythonのバージョンは制御できません。単一の環境解決動作に依存している場合は、代わりにPythonバージョンに基づいてexplicitly selecting environmentsを検討してください。
All environments¶
--all
フラグを使用すると、互換性のあるすべての環境でテストを実行できます。たとえば、次のようにmatrixとoverridesを定義したとします。:
[[tool.hatch.envs.hatch-test.matrix]]
python = ["3.12", "3.11"]
feature = ["foo", "bar"]
[tool.hatch.envs.hatch-test.overrides]
matrix.feature.platforms = [
{ value = "linux", if = ["foo", "bar"] },
{ value = "windows", if = ["foo"] },
{ value = "macos", if = ["bar"] },
]
[[envs.hatch-test.matrix]]
python = ["3.12", "3.11"]
feature = ["foo", "bar"]
[envs.hatch-test.overrides]
matrix.feature.platforms = [
{ value = "linux", if = ["foo", "bar"] },
{ value = "windows", if = ["foo"] },
{ value = "macos", if = ["bar"] },
]
次の表に、テストが実行される環境を示します。:
Environment | Linux | Windows | macOS |
---|---|---|---|
hatch-test.py3.12-foo | |||
hatch-test.py3.12-bar | |||
hatch-test.py3.11-foo | |||
hatch-test.py3.11-bar |
Specific environments¶
環境のサブセットを選択するには、--include
/-i
および--exclude
/-x
オプションを使用します。これらのオプションは、特定のマトリックス変数を含めたり除外したりするために使用でき、オプションでその後に特定のカンマ区切りの値が続き、複数回選択できます。
たとえば、マトリックスを次のように定義したとします。:
[[tool.hatch.envs.hatch-test.matrix]]
python = ["3.12", "3.11"]
feature = ["foo", "bar", "baz"]
[[envs.hatch-test.matrix]]
python = ["3.12", "3.11"]
feature = ["foo", "bar", "baz"]
Python 3.12とfoo
またはbar
機能を持つすべての環境でテストを実行したい場合は、次のコマンド呼び出しを使用できます。:
hatch test -i python=3.12 -i feature=foo,bar
あるいは、同じ結果を得るためにbaz
機能を除外することもできます。:
hatch test -i python=3.12 -x feature=baz
Tip
Pythonのバージョンを選択するのは一般的な使用例であるため、--python
/-py
オプションを省略形として使用できます。たとえば、前のコマンドは次のように記述できます。
hatch test -py 3.12 -i feature=foo,bar
hatch test -py 3.12 -x feature=baz
Measuring code coverage¶
--cover
フラグを使用すると、code coverageを有効にできます。たとえば、次のコマンドを呼び出します。:
hatch test --cover
大まかには次のように変換されます。:
coverage run -m pytest tests
すべてのselected environmentsでテストが実行された後、カバレッジデータが結合され、レポートが表示されます。--cover-quiet
フラグを使用してレポートを抑制し、--cover
フラグを暗黙的に有効にすることができます。:
hatch test --cover-quiet
Note
カバレッジデータファイルは、プロジェクトのルートで生成されます。次のglobスタイルのパターンを使用して、バージョン管理から除外してください。
.coverage*
Retry failed tests¶
--retries
オプションを使用すると、失敗したテストをretryできます。:
hatch test --retries 2
テストが毎回失敗し、再試行回数が2
に設定されている場合、テストは合計3回実行されます。
--retry-delay
オプションを使用して、再試行の間隔を秒単位で設定することもできます。:
hatch test --retries 2 --retry-delay 1
Parallelize test execution¶
--parallel
/-p
フラグを使用して、parallelizeテストを実行できます。:
hatch test --parallel
これにより、環境内のテストが複数のワーカーに分散されます。ワーカーの数は、使用可能な物理CPUではなく論理CPUの数に対応します。
Randomize test order¶
--randomize
/-r
フラグを使用すると、テストの順序をrandomizeできます。:
hatch test --randomize