conftest解決
最も侵襲性の低い解決策はconftest.py、repo/ディレクトリに指定された空のファイルを追加することです。
$ touch repo/conftest.py
それでおしまい。sys.pathをマングリングしたり、ドラッグすることを忘れないPYTHONPATHで、またはそれが属していないディレクトリに配置するためのカスタムコードを記述する必要はありません(ただし、 Apteryxの回答で提案されているように__init__.py使用することは良い解決策です!)。python -m pytest
その後のプロジェクト ディレクトリ:
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):
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に関する多くの情報があります。で始まる: ディレクトリごとのローカルプラグインconftestconftest.py
conftestまた、SO にはモジュールに関する優れた質問があります。py.test では、conftest.py ファイルの使用は何ですか?