設定

コマンドラインオプションと設定ファイルの設定

一般的なヘルプオプションを使用して、コマンドラインオプションと INI スタイルの設定ファイルの値に関するヘルプを取得できます:

pytest -h   # prints options _and_ config file settings

これにより、インストールされたプラグインによって登録されたコマンドラインおよび設定ファイルの設定が表示されます。

設定ファイル形式

多くの pytest 設定設定ファイル に設定できます。 これは慣例としてリポジトリのルートディレクトリに配置されます。

pytest がサポートする設定ファイルの簡単な例:

pytest.ini

pytest.ini ファイルは、空の場合でも他のファイルより優先されます。

また、隠しバージョンの .pytest.ini を使用することもできます。

# pytest.ini or .pytest.ini
[pytest]
minversion = 6.0
addopts = -ra -q
testpaths =
    tests
    integration

pyproject.toml

Added in version 6.0.

pyproject.toml は、tool.pytest.ini_options テーブルを含む場合に設定として考慮されます。

# pyproject.toml
[tool.pytest.ini_options]
minversion = "6.0"
addopts = "-ra -q"
testpaths = [
    "tests",
    "integration",
]

注釈

他のツールと同様に [tool.pytest] ではなく、なぜ [tool.pytest.ini_options] なのか疑問に思うかもしれません。

その理由は、pytest チームが将来的に設定のために豊富な TOML データ形式を完全に活用することを意図しており、そのために [tool.pytest] テーブルを予約しているからです。 ini_options テーブルは、現在の .ini 設定システムと将来の設定形式との間の橋渡しとして使用されています。

tox.ini

tox.ini ファイルは tox プロジェクトの設定ファイルであり、[pytest] セクションがある場合には pytest の設定を保持するためにも使用できます。

# tox.ini
[pytest]
minversion = 6.0
addopts = -ra -q
testpaths =
    tests
    integration

setup.cfg

setup.cfg ファイルは汎用設定ファイルであり、元々は distutils (現在は非推奨) および setuptools によって使用されていました。 また、[tool:pytest] セクションがある場合には pytest の設定を保持するためにも使用できます。

# setup.cfg
[tool:pytest]
minversion = 6.0
addopts = -ra -q
testpaths =
    tests
    integration

警告

非常に単純な使用例を除いて、setup.cfg の使用は推奨されません。 .cfg ファイルは pytest.ini および tox.ini とは異なるパーサーを使用するため、追跡が困難な問題を引き起こす可能性があります。 可能な場合は、後者のファイルまたは pyproject.toml を使用して pytest の設定を保持することをお勧めします。

初期化: rootdir と configfile の決定

pytest は、コマンドライン引数 (指定されたテストファイル、パス) と設定ファイルの存在に基づいて、各テスト実行の rootdir を決定します。 決定された rootdirconfigfile は、起動時に pytest ヘッダーの一部として印刷されます。

pytestrootdir を使用する目的の概要は次のとおりです:

  • 収集中に nodeids を構築します。 各テストには一意の nodeid が割り当てられ、rootdir をルートとし、フルパス、クラス名、関数名、およびパラメータ化 (ある場合) を考慮します。

  • プラグインによってプロジェクト/テスト実行固有の情報を保存するための安定した場所として使用されます。 たとえば、内部の cache プラグインは、rootdir.pytest_cache サブディレクトリを作成して、テスト実行間の状態を保存します。

rootdirsys.path/PYTHONPATH を変更したり、モジュールのインポート方法に影響を与えたりするためには使用されません。 詳細については pytest のインポートメカニズムと sys.path/PYTHONPATH を参照してください。

--rootdir=path コマンドラインオプションを使用して特定のディレクトリを強制することができます。 他のコマンドラインオプションとは異なり、--rootdirpytest.ini 内の addopts で使用することはできません。 なぜなら、rootdir はすでに pytest.ini見つける ために使用されているからです。

rootdir の検索

ここに args から rootdir を見つけるアルゴリズムがあります:

  • コマンドラインで -c が渡された場合、それを設定ファイルとして使用し、そのディレクトリを rootdir とします。

  • ファイルシステムに存在するパスとして認識される指定された args の共通の祖先ディレクトリを決定します。 そのようなパスが見つからない場合、共通の祖先ディレクトリは現在の作業ディレクトリに設定されます。

  • 祖先ディレクトリおよびその上位ディレクトリで pytest.ini, pyproject.toml, tox.ini, および setup.cfg ファイルを探します。 1 つが一致した場合、それが configfile となり、そのディレクトリが rootdir になります。

  • 設定ファイルが見つからなかった場合、共通の祖先ディレクトリから上位に向かって setup.py を探し、rootdir を決定します。

  • setup.py が見つからなかった場合、指定された args のそれぞれおよびその上位ディレクトリで pytest.ini, pyproject.toml, tox.ini, および setup.cfg を探します。 1 つが一致した場合、それが configfile となり、そのディレクトリが rootdir になります。

  • configfile が見つからず、設定引数が渡されなかった場合、すでに決定された共通の祖先をルートディレクトリとして使用します。 これにより、パッケージの一部ではなく、特定の設定ファイルを持たない構造で pytest を使用することができます。

args が指定されていない場合、pytest は現在の作業ディレクトリ以下のテストを収集し、そこから rootdir の決定を開始します。

ファイルは次の場合にのみ設定に一致します:

  • pytest.ini: 常に一致し、空の場合でも優先されます。

  • pyproject.toml: [tool.pytest.ini_options] テーブルを含む。

  • tox.ini: [pytest] セクションを含む。

  • setup.cfg: [tool:pytest] セクションを含む。

最後に、他に一致するものが見つからなかった場合、pyproject.toml ファイルが configfile と見なされます。 この場合、[tool.pytest.ini_options] テーブルを含まない場合でも (これは 8.1 で追加されました)。

ファイルは上記の順序で考慮されます。 複数の configfiles 候補からのオプションは決してマージされません - 最初の一致が勝ちます。

設定ファイルは rootpath の値も決定します。

Config オブジェクト (フックを介して、または pytestconfig フィクスチャを介してアクセス可能) は、次の属性を持ちます:

  • config.rootpath: 決定されたルートディレクトリで、存在が保証されています。 テストアドレス ("nodeids") を構築するための参照ディレクトリとして使用され、プラグインによってテスト実行ごとの情報を保存するためにも使用できます。

  • config.inipath: 決定された configfile で、None である場合があります (歴史的な理由から inipath と名付けられています)。

Added in version 6.1: config.rootpath および config.inipath プロパティ。 これらは古い config.rootdir および config.inifilepathlib.Path バージョンであり、型 py.path.local を持ち、後方互換性のためにまだ存在しています。

例:

pytest path/to/testdir path/other/

共通の祖先を path として決定し、次のように設定ファイルをチェックします:

# first look for pytest.ini files
path/pytest.ini
path/pyproject.toml  # must contain a [tool.pytest.ini_options] table to match
path/tox.ini         # must contain [pytest] section to match
path/setup.cfg       # must contain [tool:pytest] section to match
pytest.ini
... # all the way up to the root

# now look for setup.py
path/setup.py
setup.py
... # all the way up to the root

警告

カスタム pytest プラグインのコマンドライン引数には、pytest --log-output ../../test.log args のようにパスを含めることができます。 この場合、args は必須です。 そうでない場合、pytest は rootdir の決定に test.log のフォルダーを使用します ( #1435 も参照してください)。 現在の作業ディレクトリを参照するためのドット . も可能です。

組み込み設定ファイルオプション

オプションの完全なリストについては、リファレンスドキュメント を参照してください。

構文強調テーマのカスタマイズ

pytest で使用される構文強調テーマは、2 つの環境変数を使用してカスタマイズできます: