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
説明
pytestconftestテストコレクションでモジュールを探してカスタムフックとフィクスチャを収集し、それらからカスタムオブジェクトをインポートします。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ファイルの使用法は何ですか?