conftest
解決
最も侵襲性の低いソリューションはconftest.py
、repo/
ディレクトリに名前が付けられた空のファイルを追加することです。
$ touch repo/conftest.py
それでおしまい。をマングルするためのカスタムコードを記述しsys.path
たり、ドラッグPYTHONPATH
したり配置したりすることを覚える必要はありません。__init__.py
、それが属していないディレクトリにし。
その後のプロジェクトディレクトリ:
repo
├── conftest.py
├── app.py
├── settings.py
├── models.py
└── tests
└── test_app.py
説明
pytest
conftest
テストコレクションでモジュールを探してカスタムフックとフィクスチャを収集し、それらからカスタムオブジェクトをインポートします。pytest
の親ディレクトリを追加conftest.py
するsys.path
(この場合、repo
ディレクトリ)。
その他のプロジェクト構造
他のプロジェクト構造がある場合conftest.py
は、パッケージルートディレクトリ(パッケージを含むがパッケージ自体ではないため、__init__.py
、を)に配置します。次に例を示します。
repo
├── conftest.py
├── spam
│ ├── __init__.py
│ ├── bacon.py
│ └── egg.py
├── eggs
│ ├── __init__.py
│ └── sausage.py
└── tests
├── test_bacon.py
└── test_egg.py
src
レイアウト
このアプローチはsrc
レイアウトで使用できますconftest.py
が、src
DIR):
repo
├── src
│ ├── conftest.py
│ ├── spam
│ │ ├── __init__.py
│ │ ├── bacon.py
│ │ └── egg.py
│ └── eggs
│ ├── __init__.py
│ └── sausage.py
└── tests
├── test_bacon.py
└── test_egg.py
を追加src
するPYTHONPATH
ことの意味と利点を軽減することに注意してくださいsrc
レイアウトの。インストールされたパッケージではなく、リポジトリからコードをテストすることになります。あなたがそれをする必要があるなら、多分あなたはまったくsrc
ディレクトリを必要としません。
ここから先
もちろん、conftest
モジュールはソースコードの発見に役立つ単なるファイルではありません。ここで、pytest
フレームワークのプロジェクト固有のすべての拡張とテストスイートのカスタマイズが行われます。ドキュメント全体に散在するモジュールpytest
に関する多くの情報がありconftest
ます。で始まる:ローカルのディレクトリごとのプラグインconftest.py
また、SOはconftest
モジュールに関して優れた質問をしています。py.testでは、conftest.pyファイルの使用法は何ですか?