テスト関数に属性をマークする方法

pytest.mark ヘルパーを使用することで、テスト関数に簡単にメタデータを設定できます。 組み込みマーカーの完全なリストは API Reference で確認できます。 また、CLI を使用して組み込みおよびカスタムのすべてのマーカーをリストすることもできます - pytest --markers.

以下は組み込みマーカーの一部です:

  • usefixtures - テスト関数またはクラスでフィクスチャを使用する

  • filterwarnings - テスト関数の特定の警告をフィルタリングする

  • skip - 常にテスト関数をスキップする

  • skipif - 特定の条件が満たされた場合にテスト関数をスキップする

  • xfail - 特定の条件が満たされた場合に「予期された失敗」結果を生成する

  • parametrize - 同じテスト関数を複数回呼び出す。

カスタムマーカーを作成したり、マーカーをテストクラスやモジュール全体に適用したりするのは簡単です。 これらのマーカーはプラグインで使用でき、また、コマンドラインで -m オプションを使用して select tests するためによく使用されます。

例としても機能するドキュメントについては カスタムマーカーの使用 を参照してください。

注釈

マークはテストにのみ適用され、fixtures には影響しません。

マークの登録

pytest.ini ファイルにカスタムマークを次のように登録できます:

[pytest]
markers =
    slow: marks tests as slow (deselect with '-m "not slow"')
    serial

または pyproject.toml ファイルに次のように登録できます:

[tool.pytest.ini_options]
markers = [
    "slow: marks tests as slow (deselect with '-m \"not slow\"')",
    "serial",
]

マーク名の後の : 以降はすべてオプションの説明であることに注意してください。

または、pytest_configure フックでプログラム的に新しいマーカーを登録することもできます:

def pytest_configure(config):
    config.addinivalue_line(
        "markers", "env(name): mark test to run only on named environment"
    )

登録されたマーカーは pytest のヘルプテキストに表示され、警告を発しません (次のセクションを参照) 。 サードパーティプラグインは常に register their markers することをお勧めします。

不明なマークに対するエラーの発生

@pytest.mark.name_of_the_mark デコレータで適用された未登録のマークは、名前のタイプミスによる予期しない動作を避けるために常に警告を発します。 前のセクションで説明したように、カスタムマークを pytest.ini ファイルに登録するか、カスタム pytest_configure フックを使用して警告を無効にすることができます。

--strict-markers コマンドラインフラグが渡されると、@pytest.mark.name_of_the_mark デコレータで適用された不明なマークはエラーを引き起こします。 プロジェクトに --strict-markersaddopts に追加することで、この検証を強制できます。

[pytest]
addopts = --strict-markers
markers =
    slow: marks tests as slow (deselect with '-m "not slow"')
    serial